Добрый вечер, Я пытаюсь использовать внедрение зависимостей с плагином общих настроек, но как только я генерирую код, я получаю сообщение об ошибке для несвязанного блока. я использую
Моя цель - внедрить SharedPreferences в класс для обработки локальных операций, это выглядит так:
class LocalSharedPreferences {
final SharedPreferences _preferences;
LocalSharedPreferences(this._preferences);
...
}
Чтобы правильно внедрить SharedPreferences, я следовал его официальной документации (https://pub.dev/packages/injectable#registering-asynchronous-injectables), поэтому мой код для внедрения стороннего модуля выглядит так:
@module
abstract class RegisterModule {
@preResolve
Future<SharedPreferences> get prefs => SharedPreferences.getInstance();
}
Я следил за этим вопросом на StackOverflow, но это не сработало. Моя ошибка заключается в следующем:
The following assertion was thrown building SignInForm(dependencies: [MediaQuery]):
Object/factory with type SignInFormBloc 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?)
'package:get_it/get_it_impl.dart':
Failed assertion: line 298 pos 9: 'instanceFactory != null'
Код автогенерируемой инъекции выглядит следующим образом:
Future<GetIt> $initGetIt(
GetIt get, {
String environment,
EnvironmentFilter environmentFilter,
}) async {
final gh = GetItHelper(get, environment, environmentFilter);
final registerModule = _$RegisterModule();
gh.factory<DatosBauServerApiHelper>(() => DatosBauServerApiHelper());
gh.factory<DatosBauServerAuth>(
() => DatosBauServerAuth(get<DatosBauServerApiHelper>()));
gh.lazySingleton<IAuthFacade>(
() => DatosBauServerAuthFacade(get<DatosBauServerAuth>()));
final sharedPreferences = await registerModule.prefs;
gh.factory<SharedPreferences>(() => sharedPreferences);
gh.factory<SignInFormBloc>(() => SignInFormBloc(get<IAuthFacade>()));
return get;
}
class _$RegisterModule extends RegisterModule {}
Пакет Получить
Класс LocalSharedPreferences
abstract class LocalSharedPreferences {
// ...
}
Класс LocalSharedPreferencesImpl
class LocalSharedPreferencesImpl extends LocalSharedPreferences {
// ...
// Use your globalSharedPrefs variable here
}
Еще один дартс-файл
GetIt locator = GetIt.instance;
setupServicesLocator() {
locator.registerLazySingleton<LocalSharedPreferences>(() => LocalSharedPreferencesImpl());
}
Ваш файл main.dart
SharedPreferences globalSharedPrefs;
void main() async {
/* ENSURE ASYNC WILL NOT GENERATE RUNTIME ERROR */
WidgetsFlutterBinding.ensureInitialized();
/* GLOBAL SERVICES */
setupServicesLocator();
/* Initialize your globalSharedPreferences variable here */
globalSharedPrefs = await SharedPreferences.getInstance();
}