Flutter 局部变量革新问题

打印 上一主题 下一主题

主题 1660|帖子 1660|积分 4980

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在Flutter中,当你调用setState时,它会触发Widget树的重新构建。这意味着任何依靠于状态的Widget都会重新构建,从而反映新的状态值。但是,具体的革新举动取决于dd是如何界说和使用的。
让我们来看看两种环境下setState的举动:
环境一:界说为局部变量
  1. var body = Column(
  2.   children: [Text(dd)],
  3. );
  4. return Navigator(
  5.   initialRoute: '/',
  6.   key: _globalKey,
  7.   onGenerateRoute: (RouteSettings settings) {
  8.     WidgetBuilder builder;
  9.     switch (settings.name) {
  10.       case '/':
  11.         builder = (context) => body;
  12.     }
  13.     return MaterialPageRoute(builder: builder, settings: settings);
  14.   },
  15. );
复制代码
在这种环境下,body是在onGenerateRoute方法外部界说的一个局部变量。假如你在某个StatefulWidget中调用setState来改变dd的值,那么除非body本身也在build方法中重新界说,否则body不会重新构建。因此,Text(dd)中的文本不会更新。
环境二:直接在builder中界说
  1. return Navigator(
  2.   initialRoute: '/',
  3.   key: _globalKey,
  4.   onGenerateRoute: (RouteSettings settings) {
  5.     WidgetBuilder builder;
  6.     switch (settings.name) {
  7.       case '/':
  8.         builder = (context) => Column(
  9.               children: [Text(dd)],
  10.             );
  11.     }
  12.     return MaterialPageRoute(builder: builder, settings: settings);
  13.   },
  14. );
复制代码
在这种环境下,Column和Text是在builder函数内部每次调用时重新创建的。因此,假如你在StatefulWidget中调用setState来改变dd的值,并且这个StatefulWidget是Navigator的一部分,那么当setState被调用时,整个Widget树会重新构建,从而更新Text(dd)中的文本。
总结
局部变量方式:假如body是一个局部变量,并且是在build方法之外界说的,那么调用setState来改变dd的值不会导致Text widget更新,除非整个Widget重新构建或body在build方法中重新界说。
直接界说方式:假如Column和Text是在builder函数内部界说的,那么调用setState来改变dd的值会导致Text widget更新,因为每次build方法被调用时都会重新创建这些Widgets。
为了确保dd的变化能够反映到UI上,你应该确保dd的改变会触发包含Text(dd)的Widget的重新构建。假如dd是在一个StatefulWidget的状态中管理的,那么在setState之后,build方法会被调用,从而更新UI。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表