使用 @injectableInit 自动生成的代码出现问题 - GetIt 依赖注入出现错误状态错误

问题描述 投票:0回答:1

我在 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
}
flutter dart retrofit flutter-dependencies bloc
1个回答
0
投票

尝试将实例从 getIt 传递到构造函数中:

@injectableInit
void initDI(GetIt getIt) {
  getIt.registerSingleton(Dio())
   ..registerSingleton(AppRouter())
   ..registerSingleton(ApiProvider(getIt<Dio>()))
   ..registerSingleton(HomeBloc(getIt<ApiProvider>())); 
}
© www.soinside.com 2019 - 2024. All rights reserved.