【问题标题】:Storage was accessed before it was initialized [HydratedBloc]存储在初始化之前被访问 [HydratedBloc]
【发布时间】:2023-01-29 18:32:57
【问题描述】:

在 flutter 中处理水合块时,我遇到了问题。我试图保留一些数据,但每次都会出错。

Storage was accessed before it was initialized.
Please ensure that storage has been initialized.

For example:

final storage = await HydratedStorage.build();
HydratedBlocOverrides.runZoned(
  () => runApp(MyApp()),
  storage: storage,
);

这很奇怪,因为我目前正在正确初始化它。

Future<void> main() async {
  //Because hydrated bloc communicates with the native code, we must first ensure everything is natively initialised.
  WidgetsFlutterBinding.ensureInitialized();
  final storage = await HydratedStorage.build(
      storageDirectory: await getApplicationDocumentsDirectory(),
  );
  HydratedBlocOverrides.runZoned(
        () => runApp(MultiRepositoryProvider(
      providers: [
        RepositoryProvider(
          create: (context) => AdviceRepository()),
        RepositoryProvider(
          create: (context) => FavouritesRepository(),
        )
      ],
      child: const MyApp(),
    )),
    storage: storage,
  );
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MultiBlocProvider(
        providers: [
          BlocProvider(
              create: (context) => AdviceBloc(
                RepositoryProvider.of<AdviceRepository>(context),
              )..add(LoadAdviceEvent())),
          BlocProvider(
              create: (context) => FavouritesBloc(
                RepositoryProvider.of<FavouritesRepository>(context),
              )),
        ],
        child: const Home(),
      ),
    );
  }
}

这是我使用 MultiBlocProvider 或 MultiRepositoryProvider 小部件的方式的问题吗?

我像这样将数据保存到 bloc 中:

  context.read<FavouritesBloc>().add(AddFavourites(
                          AdviceModel(slip: state.advice.slip!)));

【问题讨论】:

    标签: flutter dart bloc


    【解决方案1】:
      HydratedBloc.storage = await HydratedStorage.build(
          storageDirectory: kIsWeb
              ? HydratedStorage.webStorageDirectory
              : await getTemporaryDirectory(),
      );
    

    与 path_provider 包一起使用以获得 Web 支持。

    【讨论】:

      猜你喜欢
      • 2022-07-30
      • 2019-10-18
      • 2016-04-01
      • 2020-12-29
      • 2021-09-10
      • 2020-10-23
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多