首页 > 解决方案 > Flutter Bloc 库

问题描述

在一个应用程序中,我试图实现购物车功能。ItemDetailsS​​creen 有 addItemBtn,添加项目后返回 null。这个函数工作正常,但问题是当我去cartScreen并清除购物车,然后再回到ItemDetailsS​​creen时,addItemBtn仍然返回null。要返回添加状态,我必须使用热重载。看起来状态没有更新!?那么如何解决这个问题呢?

addItemBtn:

   BlocBuilder<CartFunctionsCubit, CartFunctionsState>(
      builder: (context, state) {
        return state.map(
          initial: (_) => Container(),
          cartLoaded: (state) => FlatButton(
            onPressed: state.userCart.items.contains(item)
                ? null
                : () {
                    context.read<CartFunctionsCubit>().addToCart(item);
                    context.read<CartFunctionsCubit>().startApp();
                  },
            child: state.userCart.items.contains(item)
                ? Text('Added')
                : Text('Add'),
          ),
        );
      },
    );

肘:

 Future<void> startApp() async {
    final userCart = await cartFacade.getUserCart();

    emit(CartFunctionsState.cartLoaded(userCart: userCart));
  }

  Future<void> addToCart(Item item) async {
    cartFacade.addToCart(item);
  }

导航到我正在使用的购物车屏幕

 Navigator.of(context).pushNamed('/cart');

标签: flutterdartflutter-bloc

解决方案


您可以等待推送功能,然后调用 context.read<CartFunctionsCubit>().startApp();

await Navigator.of(context).pushNamed('/cart');
 context.read<CartFunctionsCubit>().startApp();

当您从购物车页面返回时,它将刷新数据

如果您想在更改购物车页面中的某些内容时更改数据。输入布尔值Navigator.pop()

在购物车页面

 bool needToRefresh = false/// when there is a change set needToRefresh = true
    Navigator.pop(context,needToRefresh );/// and pass the value here

在项目详细信息屏幕中

bool needToRefresh = await Navigator.of(context).pushNamed('/cart');
if(needToRefresh !=null && needToRefresh)
   context.read<CartFunctionsCubit>().startApp();

只有当needToRefreshtrue时才会刷新数据;


推荐阅读