我在 Dart 项目中使用 @injectableInit 进行依赖项注入的自动生成代码遇到问题。该代码旨在使用 GetIt 初始化依赖项,但在创建特定类型 (HomeBloc) 期间会导致“错误状态”错误。该错误表明 Dio 类型的对象/工厂未在 GetIt 内注册。有趣的是,当我切换到手动注入时,代码可以完美运行。
自动生成代码。
@injectableInit
GetIt initDI(GetIt getIt) => getIt.init();
错误:-
════════ Exception caught by widgets library ═══════════════════════════════════
Bad state: Tried to read a provider that threw during the creation of its value.
The exception occurred during the creation of type HomeBloc.
══╡ EXCEPTION CAUGHT BY PROVIDER ╞═══════════════════════════════
The following StateError was thrown:
Bad state: GetIt: Object/factory with type Dio is not registered
inside GetIt.
(Did you accidentally do GetIt sl=GetIt.instance(); instead of
GetIt sl=GetIt.instance;
Did you forget to register it?)
When the exception was thrown, this was the stack:
#0 throwIfNot (package:get_it/get_it_impl.dart:12:19)
#1 _GetItImplementation._findFactoryByNameAndType (package:get_it/get_it_impl.dart:397:5)
#2 _GetItImplementation.get (package:get_it/get_it_impl.dart:425:29)
#3 GetItHelper.call (package:injectable/src/get_it_helper.dart:45:13)
#4 GetItInjectableX.init.<anonymous closure> (package:flutter_news_bloc/di/di_init.config.dart:31:13)
#5 _ServiceFactory.getObject (package:get_it/get_it_impl.dart:172:37)
#6 _GetItImplementation.get (package:get_it/get_it_impl.dart:443:34)
#7 GetItHelper.call (package:injectable/src/get_it_helper.dart:45:13)
#8 GetItInjectableX.init.<anonymous closure> (package:flutter_news_bloc/di/di_init.config.dart:35:51)
#9 _ServiceFactory.getObject (package:get_it/get_it_impl.dart:172:37)
#10 _GetItImplementation.get (package:get_it/get_it_impl.dart:443:34)
#11 _GetItImplementation.call (package:get_it/get_it_impl.dart:465:12)
#12 NewsApp.build.<anonymous closure>.<anonymous closure> (package:flutter_news_bloc/app.dart:16:41)
#13 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:736:36)
#14 _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:590:33)
#15 Provider.of (package:provider/src/provider.dart:303:37)
#16 ReadContext.read (package:provider/src/provider.dart:649:21)
#17 _BlocBuilderBaseState.initState (package:flutter_bloc/src/bloc_builder.dart:130:36)
#18 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5602:55)
#19 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5447:5)
#20 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4326:16)
#21 Element.updateChild (package:flutter/src/widgets/framework.dart:3831:20)
#22 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#23 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#24 StatelessElement.update (package:flutter/src/widgets/framework.dart:5547:5)
#25 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#26 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#27 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#28 StatelessElement.update (package:flutter/src/widgets/framework.dart:5547:5)
#29 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#30 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#31 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#32 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#33 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#34 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#35 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#36 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#37 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#38 Element.updateChildren (package:flutter/src/widgets/framework.dart:3964:32)
#39 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6896:17)
#40 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#41 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#42 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#43 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#44 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#45 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#46 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#47 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#48 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#49 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#50 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#51 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#52 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#53 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#54 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#55 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#56 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#57 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#58 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#59 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#60 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#61 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#62 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#63 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#64 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6743:14)
#65 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#66 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#67 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#68 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#69 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#70 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6743:14)
#71 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#72 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#73 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#74 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#75 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#76 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#77 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#78 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#79 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#80 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#81 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#82 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#83 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#84 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#85 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#86 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#87 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#88 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#89 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#90 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#91 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#92 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#93 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#94 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#95 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#96 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#97 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#98 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#100 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#101 ProxyElement.update (package:flutter/src/widgets/framework.dart:5800:5)
#102 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#103 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#104 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5634:11)
#105 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#106 StatefulElement.update (package:flutter/src/widgets/framework.dart:5657:5)
#107 Element.updateChild (package:flutter/src/widgets/framework.dart:3815:15)
#108 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5496:16)
#109 Element.rebuild (package:flutter/src/widgets/framework.dart:5187:7)
#110 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2895:19)
#111 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:984:21)
#112 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:457:5)
#113 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1325:15)
#114 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1255:9)
#115 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:978:7)
#119 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
(elided 3 frames from class _Timer and dart:async-patch)
═════════════════════════════════════════════════════════════════
The relevant error-causing widget was:
════════════════════════════════════════════════════════════════════════════════
D/EGL_emulation(10636): app_time_stats: avg=27455.90ms min=73.91ms max=109310.17ms count=4
但是当我使用手动注入时,它工作正常,任何人都可以帮助我解决这个问题吗?
@injectableInit
void initDI(GetIt getIt) {
final dio = Dio(); // Create a Dio instance
getIt.registerSingleton<Dio>(dio); // Register it as a singleton
getIt.registerSingleton<AppRouter>(AppRouter()); // Register it as a singleton
getIt.registerSingleton<ApiProvider>(ApiProvider(dio)); // Register it as a singleton
getIt.registerSingleton<HomeBloc>(HomeBloc(ApiProvider(dio))); // Register it as a singleton
}
尝试将实例从 getIt 传递到构造函数中:
@injectableInit
void initDI(GetIt getIt) {
getIt.registerSingleton(Dio())
..registerSingleton(AppRouter())
..registerSingleton(ApiProvider(getIt<Dio>()))
..registerSingleton(HomeBloc(getIt<ApiProvider>()));
}