微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

setState 不更新保存在变量中的小部件

如何解决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 举报,一经查实,本站将立刻删除。