flutter - Flutter Bloc 库
问题描述
在一个应用程序中,我试图实现购物车功能。ItemDetailsScreen 有 addItemBtn,添加项目后返回 null。这个函数工作正常,但问题是当我去cartScreen并清除购物车,然后再回到ItemDetailsScreen时,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');
解决方案
您可以等待推送功能,然后调用 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();
只有当needToRefresh为true时才会刷新数据;
推荐阅读
- javascript - HighCharts - tickInterval 和 tickAmount 的问题
- c++ - 使用未初始化的局部变量,即使它在一开始就已初始化
- apache-spark - pyspark 中 col() 函数的使用
- html - 列表的最小高度以使用纯 CSS 至少适合 n 个列表项
- java - 单击按钮后如何将一个小程序表单调用到另一个表单
- java - 获取firebase数据的id
- mongodb - 如何在 mLab 中将集合从一个数据库复制到另一个数据库?
- xamarin.forms - System.Net.WebException:错误:TrustFailure(身份验证失败,请参阅内部异常。)
- java - 像 xsd 一样读取和创建 xml
- python - Django自行删除表数据