如何解决setState 不更新保存在变量中的小部件
class _OrdeRSState extends State<Orders> {
Map<String,List<Order>> queryResults = defaultResponse;
apiCall(){
setState(() {
queryResults = resultFromAPI;
});
}
Widget build(BuildContext context) {
Widget homePage = OrdersHome(
futureOrders: queryResults["futureOrders"] ?? [],newOrders: queryResults["newOrders"] ?? [],processingOrders: queryResults["processingOrders"] ?? [],readyOrders: queryResults["readyOrders"] ?? [],);
print(queryResults["futureOrders"]);
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,automaticallyImplyLeading: false,title: Header(navigatorKey: navigatorKey),),body: Navigator(
key: navigatorKey,initialRoute: curRoute,onGenerateInitialRoutes: (navigator,name) {
return [
MaterialPageRoute(builder: (context) {
return homePage;
})
];
},onGenerateRoute: (settings) {
if (routeName?.startsWith(RouteNames.ORDERS_PREFIX) ?? false) {
Widget page = homePage;
switch (routeName) {
case RouteNames.ORDERS_HOME:
page = homePage;
break;
// other routes
}
return MaterialPageRoute(builder: (context) {
return page;
});
} else {
print('route not found');
return MaterialPageRoute(builder: (context) {
return homePage;
});
}
},);
}
}
我在多个地方使用 OrdersHome() 以避免代码重复,我将其声明为变量并在 UI 中使用变量。但是当状态更新时,传入的变量不会更新。print 语句显示状态已更新并再次调用 build。如果我不使用该变量并在它可以工作的任何地方复制该代码。有什么解决办法吗?
解决方法
您需要将初始值放在 InitState 中。试试这个:
class _OrdersState extends State<Orders> {
late Map<String,List<Order>> queryResults;
@override
void initState() {
queryResults = defaultResponse;
super.initState();
}
apiCall(){
setState(() {
queryResults = resultFromAPI;
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。