嗨,我是新手,我的问题是提供集团的正确方法是什么? 我决定在名为rout的主文件中提供主题,但是问题是当我需要其他集团内部的集团时,我无法提供它。 这是我的主文件路由部分,例如,问题是我想向AssetPage bloc提供AssetDevicesPageBloc bloc,我该怎么做,因为我没有访问权限。我是否以错误的方式提供集团?第一次,我想在一个地方提供所有集团,然后为每个小部件使用blockprovider.value,但是当我搜索它时,我发现它使用资源的方式不正确。请帮助。谢谢
return MaterialApp(
routes: {
'loginPage': (context) => BlocProvider(
child: LogInPage(),
create: (BuildContext context) {
return LoginBloc(
userRepository: userRepository,
authenticationBloc:
BlocProvider.of<AuthenticationBloc>(context));
},
),
'AssetDevicePage': (context) => MultiBlocProvider(
child: AssetDevicesPage(),
providers: [
BlocProvider(
create: (BuildContext context) => AssetDevicesPageBloc(
userRepository: userRepository,
dataBaseRepository: dataBaseRepository,
deviceRepository: deviceRepository)),
BlocProvider(
create: (BuildContext context) => DeviceViewSwitcherBloc(
dataBaseRepository, userRepository, deviceRepository)),
BlocProvider(
create: (BuildContext context) =>
LampBloc(deviceRepository, dataBaseRepository)),
],
),
'AssetPage': (context) => MultiBlocProvider(
providers: [
BlocProvider(
create: (BuildContext context) =>
CategoryBloc(userRepository, dataBaseRepository),
),
BlocProvider(
create: (BuildContext context) =>
AssetPageBloc(BlocProvider.of<CategoryBloc>(context)),
),
],
child: AssetPage(),
),
},
答案 0 :(得分:0)
之所以出现此问题,是因为在您调用它的上下文中该块不可用。
您需要在materialApp小部件上方的第一个小部件中初始化AssetDevicesPageBloc。
例如在MyApp窗口小部件中创建AssetDevicesPageBloc的实例。
AssetDevicesPageBloc assetDevicePageBloc = AssetDevicesPageBloc(
userRepository: userRepository,
dataBaseRepository: dataBaseRepository,
deviceRepository: deviceRepository)
);
然后将MaterialApp小部件与BlocProvider.value封装在一起,并提供这样创建的块:
BlocProvider.value(
value: assetDevicePageBloc,
child: MaterialApp(),
);
现在,您可以使用:
在任何屏幕内的任何位置访问块。BlocProvider.of< AssetDevicesPageBloc >(context)
但是请记住,如果初始化了块,则应在初始化它的小部件的dispose方法中关闭其实例。所以打电话
assetDevicePageBloc?.close();
在初始化assetDevicePageBloc的小部件的dispose方法中。
有关参考,请参见official documentation