我有两个使用相同的小部件BLoC VehiclesCubit。当我更改一个小部件中的数据时,我需要刷新页面以便更新另一个小部件中的数据。但是如何做到当一个小部件中的数据发生变化时,第二个小部件会自动为使用相同部件的人更新BLoC?
好吧,让我们简单点,当
你VehiclesCubit调用时,这个肘节就被启动了
BlocProvider<VehiclesCubit>(
create: (context) => VehiclesCubit()
)
Run Code Online (Sandbox Code Playgroud)
你已经并且在其中Widget1创建了 the ,这意味着 the包含其中的上下文。VehiclesCubitwidget1VehiclesCubit
现在,您已经Widget2并且想要收听 中发生的更改 VehiclesCubit,这意味着Widget2应该包含 VehiclesCubit 上下文
那么如何才能做到这一点呢?通过将值注入VehiclesCubit到widget2withBlocProvider.value并将其包装起来BlocConsumer<VehiclesCubit,VehiclesStates>
小部件一
class WidgetOneScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) => VehiclesCubit(),
child: BlocConsumer<VehiclesCubit, VehiclesStates>(
listener: (BuildContext context, VehiclesStates state) {},
builder: (BuildContext context, VehiclesStates state) {
final cubit = VehiclesCubit.get(context);
return GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BlocProvider.value(
value: cubit,
child: WidgetTwo(),
),
),
);
},
child: Item(),
);
},
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
小部件二
class WidgetTwoScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocConsumer<VehiclesCubit,VehiclesStates>(
listener: (BuildContext context, VehiclesStates state) {},
builder: (BuildContext context,VehiclesStates state) {
final cubit = VehiclesCubit.get(context);
return Item();
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |