如何在 Flutter 中更改另一个页面上的块的状态?

Max*_*bko 0 dart flutter

我有两个使用相同的小部件BLoC VehiclesCubit。当我更改一个小部件中的数据时,我需要刷新页面以便更新另一个小部件中的数据。但是如何做到当一个小部件中的数据发生变化时,第二个小部件会自动为使用相同部件的人更新BLoC

Mos*_*man 6

好吧,让我们简单点,当
VehiclesCubit调用时,这个肘节就被启动了

BlocProvider<VehiclesCubit>(
   create: (context) => VehiclesCubit()
)
Run Code Online (Sandbox Code Playgroud)

你已经并且在其中Widget1创建了 the ,这意味着 the包含其中的上下文。VehiclesCubitwidget1VehiclesCubit

现在,您已经Widget2并且想要收听 中发生的更改 VehiclesCubit,这意味着Widget2应该包含 VehiclesCubit 上下文

那么如何才能做到这一点呢?通过将值注入VehiclesCubitwidget2withBlocProvider.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)