Flutter 如何从其他StatefulWidget更新StatefulWidget?

Flutter 如何从其他StatefulWidget更新StatefulWidget?,flutter,flutter-layout,dart-2,Flutter,Flutter Layout,Dart 2,我有3个标签的屏幕。大家都有不同的看法。当用户来到屏幕时,我必须点击API并更新所有3个选项卡的视图。我无法更新选项卡内的视图。 获取API响应后无法更新不同选项卡的状态 错误 屏幕视图如下所示: 详细项目 class DetailItem扩展StatefulWidget{ 物业项目(物业项目);; 所有者信息(OwnerInfo);; 回顾(reviewInfo);; @凌驾 _DetailItemState createState()=>\u DetailItemState(); } 类_

我有3个标签的屏幕。大家都有不同的看法。当用户来到屏幕时,我必须点击API并更新所有3个选项卡的视图。我无法更新选项卡内的视图。 获取API响应后无法更新不同选项卡的状态

错误

屏幕视图如下所示:

详细项目

class DetailItem扩展StatefulWidget{
物业项目(物业项目);;
所有者信息(OwnerInfo);;
回顾(reviewInfo);;
@凌驾
_DetailItemState createState()=>\u DetailItemState();
}
类_DetailItemState使用TickerProviderStateMixin扩展状态{
ScrollController_ScrollController=新的ScrollController();
double _appBarHeight=0.0;
TabController\u TabController;
最终全局键=
新GlobalKey();
//详细信息屏幕中使用的选项卡
DetailViewTab\u DetailViewTab;
AddressViewTab\u AddressViewTab;
评审委员会(评审委员会);;
@凌驾
void initState(){
_tabController=tabController(长度:3,vsync:this,初始索引:0);//初始化tab控制器
//初始化选项卡
_detailViewTab=detailViewTab(widget.\u propertyObj);
_addressViewTab=addressViewTab(键:键,propertyDetailModel:widget.\u所有者信息);
_reviewTab=reviewTab(小部件属性);
_hitDetailAPI();//初始化状态命中API
super.initState();
}
//详细API
void\u hitDetailAPI()异步{
Future obj=apichandler()
.getPropertyDetail(小部件._propertyObj.getRoomId.toString());
对象然后((响应){
如果(!已安装){
返回;
}
//在设置状态下更新数据
设置状态(){
if(response!=null&&response.getPropertyItem!=null){
widget.\u propertyObj=response.getPropertyItem;//将数据更新到属性对象的第一个选项卡(详细信息)
widget.\u ownerInfo=response.getOwnerInfo;//将数据更新到第二个选项卡(地址)的所有者信息对象
key.currentState.updateInfo(widget.\u ownerInfo);//试图通过调用key current state来更新地址选项卡视图。
}
});
}).catchError((错误){
打印(“错误->”+错误.toString());
});
}
地址视图选项卡

class AddressViewTab扩展StatefulWidget{
OwnerInfo OwnerInfo=OwnerInfo();
AddressViewTab({Key-Key,@required this.ownerInfo}):超级(Key:Key);
@凌驾
AddressViewTabState createState()=>AddressViewTabState();
}
类AddressViewTabState扩展状态{
更新信息(所有者信息所有者信息){
打印(“更新方法调用”);
如果(!已安装){
返回;
}
设置状态(){
widget.ownerInfo=ownerInfo;//更新状态
});
}
@凌驾
小部件构建(构建上下文){
返回容器(
对齐:对齐.center,
子:ListView(
儿童:[
getOwnerInfoCard(widget.ownerInfo),
],
),
);
}
}

任何帮助都将不胜感激。提前感谢。

您可以使用Redux的颤振实现来实现类似的功能


简而言之,当某些数据发生变化时,这可以使“任意”小部件自我更新。

我已经在这里回答了这个问题


您可以通过推送有状态小部件使用回调来完成此任务

GestureDetector(
            onTap: () async {
             dynamic result = await Navigator.of(context).push(MaterialPageRoute(
                  builder: (context) => CreateUser(
                    usersObj: usersObj,
                  )));
             if (result != null) {
               setState(() {
                 usersObj = result;
               });
             }
            },
    Navigator.pop(context,usersObj);
从pop状态窗口小部件:

GestureDetector(
            onTap: () async {
             dynamic result = await Navigator.of(context).push(MaterialPageRoute(
                  builder: (context) => CreateUser(
                    usersObj: usersObj,
                  )));
             if (result != null) {
               setState(() {
                 usersObj = result;
               });
             }
            },
    Navigator.pop(context,usersObj);

检查此答案可能有助于解决您的问题此ans可能有帮助-谢谢,但我在这里发布问题后才得到答案。我使用了dart中的ValueNotifier类。当我得到响应时,我只更新通知程序中的值,并在initState中将值从ValueNotifier传递到本地对象。它起到了什么作用绝对不推荐你这样做。你必须将你的状态提升到下一个常见的状态。我同意@boformer。你必须将你的状态提升一个级别,所有选项卡都将从那里获取数据。
    Navigator.pop(context,usersObj);