Flutter Bloc 库
Flutter Bloc Library
在我尝试实现购物车功能的应用程序中。 ItemDetailsScreen 有addItemBtn,添加项目后return为null。此函数工作正常,但问题是当我转到 cartScreen 并清除购物车,然后返回到 ItemDetailsScreen 时,addItemBtn 仍然 return 为 null。要 return 添加状态,我必须使用热重载。看起来状态没有更新!?那么如何解决呢?
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;
时才会刷新数据
在我尝试实现购物车功能的应用程序中。 ItemDetailsScreen 有addItemBtn,添加项目后return为null。此函数工作正常,但问题是当我转到 cartScreen 并清除购物车,然后返回到 ItemDetailsScreen 时,addItemBtn 仍然 return 为 null。要 return 添加状态,我必须使用热重载。看起来状态没有更新!?那么如何解决呢?
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;
时才会刷新数据