flutter - 如何在使用 providerListener 的消费者中打开状态通知器时获取数据列表。扑
问题描述
titleColor: Colors.black,
resizeToAvoidBottomInset: false,
backgroundColor: Colors.white,
body: ProviderListener(
provider: addressNotifierProvider.state,
onChange: (context, state) {
if (state is AddressInitial) {
print("hello");
context
.read(addressNotifierProvider)
.fetchUserAddress(widget.addressIds);
}
},
child: Consumer(
builder: (context, watch, child) {
final state = watch(addressNotifierProvider.state);
print(state);
if(state is AddressInitial){
context
.read(addressNotifierProvider)
.fetchUserAddress(widget.addressIds);
}
if (state is AddressFetchedDetails) {
return SingleChildScrollView(
child: Container(
color: Colors.white,
padding: EdgeInsets.only(
一旦页面打开,这就会给我错误 Unhandled Exception: setState() or markNeedsBuild() 在构建期间调用。如何解决这个问题。
解决方案
该fetchUserAddress
操作改变了小部件的状态(我猜是因为手表)。状态更改会触发重建。但是正如错误所解释的那样,您不能在构建操作期间触发重建。
要解决这个问题,您应该重新考虑您的状态管理架构。
但是,作为一种解决方法,您可以将所有状态更改调用包装在渲染后帧回调中。
WidgetsBinding.instance
.addPostFrameCallback((_) => context
.read(addressNotifierProvider)
.fetchUserAddress(widget.addressIds) );
推荐阅读
- django - 在Django模板中将两个表关联在一起并计算条目数
- swift - 将 UIBezierPath 变成蒙版?
- r - R:从值列表和变量名称列表创建数据框
- react-native - 错误:无效的 Json RPC 响应:“无法连接 127.0.0.1:7545”| Web3js |反应原生| 移动的
- c++ - 部分方法专业化
- r - 将数据框中的 1 行从数字更改为因子
- apache-kafka - filebeat 到 kafka:无法连接到代理
- javascript - 单击另一个组合框的边缘或组合框外部时出现 Vuetify 组合框问题
- java - -source 1.6 [ERROR] 不支持 lambda 表达式(使用 -source 8 或更高版本来启用 lambda 表达式)
- php - PHP 使用 Unicode 文件名列出目录中的所有文件