我的屏幕上有3个标签。所有人都有不同的观点。当用户来到屏幕时,我必须点击API并更新所有3个选项卡的视图。我无法更新视图中的选项卡。获取API响应后,无法更新不同页签的状态。
错误
Error-> NoSuchMethodError: The method 'updateInfo' was called on null.
I/flutter ( 7515): Receiver: null
I/flutter ( 7515): Tried calling: updateInfo(Instance of 'OwnerInfo')屏幕视图如下:

DetailItem
class DetailItem extends StatefulWidget {
PropertyItem _propertyObj;
OwnerInfo _ownerInfo;
Review _reviewInfo;
@override
_DetailItemState createState() => _DetailItemState();
}
class _DetailItemState extends State with TickerProviderStateMixin {
ScrollController _scrollController = new ScrollController();
double _appBarHeight = 0.0;
TabController _tabController;
final GlobalKey key =
new GlobalKey();
//Tabs used in Detail Screen
DetailViewTab _detailViewTab;
AddressViewTab _addressViewTab;
ReviewTab _reviewTab;
@override
void initState() {
_tabController = TabController(length: 3, vsync: this, initialIndex: 0); // initialize tab controller
//Initialize Tabs
_detailViewTab = DetailViewTab(widget._propertyObj);
_addressViewTab = AddressViewTab(key: key, propertyDetailModel: widget._ownerInfo);
_reviewTab = ReviewTab(widget._propertyObj);
_hitDetailAPI(); //init state Hit API
super.initState();
}
//Detail API
void _hitDetailAPI() async {
Future obj = APIHandler()
.getPropertyDetail(widget._propertyObj.getRoomId.toString());
obj.then((response) {
if (!mounted) {
return;
}
//update data in set state
setState(() {
if (response != null && response.getPropertyItem != null) {
widget._propertyObj = response.getPropertyItem; // update data to property object the 1st tab(Detail)
widget._ownerInfo = response.getOwnerInfo; // update data to owner info object the second tab (Address)
key.currentState.updateInfo(widget._ownerInfo); // Tried to update the address tab view by calling through key current state.
}
});
}).catchError((error) {
print("Error-> " + error.toString());
});
}AddressViewTab
class AddressViewTab extends StatefulWidget {
OwnerInfo ownerInfo = OwnerInfo();
AddressViewTab({ Key key , @required this.ownerInfo}) : super(key: key);
@override
AddressViewTabState createState() => AddressViewTabState();
}
class AddressViewTabState extends State{
updateInfo(OwnerInfo ownerInfo){
print("Update method called");
if (!mounted) {
return;
}
setState(() {
widget.ownerInfo=ownerInfo; // update state
});
}
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: ListView(
children: [
getOwnerInfoCard(widget.ownerInfo),
],
),
);
}
}任何帮助都将不胜感激。提前谢谢。
发布于 2018-09-07 18:08:45
您可以使用Redux的flutter实现来实现以下内容https://pub.dartlang.org/packages/flutter_redux
简而言之,这可以使 "任何 "小组件在某些数据发生变化时自我更新。
发布于 2020-09-10 22:58:24
我已经在这里回答了这个问题https://stackoverflow.com/a/63832366/13439617
您可以使用回调来完成此工作
发布于 2021-03-01 01:05:45
来自推送stateFul widget:
GestureDetector(
onTap: () async {
dynamic result = await Navigator.of(context).push(MaterialPageRoute(
builder: (context) => CreateUser(
usersObj: usersObj,
)));
if (result != null) {
setState(() {
usersObj = result;
});
}
},来自pop stateFul小部件:
Navigator.pop(context,usersObj);https://stackoverflow.com/questions/52220156
复制相似问题