Flutter中的状态更新

Flutter中的状态更新,第1张

概述我是Flutter的新手,我遇到了解国家如何运作的问题. 我在我的应用程序中设置了一个页面作为StatefulWidget,然后在该页面的状态内,其中一个主要组件是一个单独的StatefulWidget. 内部窗口小部件显示问题并允许用户输入答案. 我当时想做的是在同一页面上显示下一个答案. 输入答案后,我将内部窗口小部件回调到我的页面状态. 我试图用另一个副本替换我的内部窗口小部件,但状态未重置 我是Flutter的新手,我遇到了解国家如何运作的问题.
我在我的应用程序中设置了一个页面作为StatefulWidget,然后在该页面的状态内,其中一个主要组件是一个单独的StatefulWidget.

内部窗口小部件显示问题并允许用户输入答案.

我当时想做的是在同一页面上显示下一个答案.

输入答案后,我将内部窗口小部件回调到我的页面状态.

我试图用另一个副本替换我的内部窗口小部件,但状态未重置.这是一个未创建的新状态,并且永远不会再调用initState().

我应该使用特定的电话或方法来实现这一目标吗?

编辑:例如,如果我有以下内容

import 'package:Flutter/material.dart';voID main() => runApp(new MyApp());class MyApp extends StatelessWidget {  @overrIDe  Widget build(BuildContext context) {    return new MaterialApp(      Title: 'Flutter Demo',theme: new themeData(        primarySwatch: colors.blue,),home: new MyHomePage(Title: 'Flutter Demo Home Page'),);  }}class MyHomePage extends StatefulWidget {  MyHomePage({Key key,this.Title}) : super(key: key);  final String Title;  @overrIDe  _MyHomePageState createState() => new _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> {  @overrIDe  voID initState(){     changeContent();  }  Widget innerWidget;  voID changeContent(){     setState((){        innerWidget = new CustomStatefullWidget();     }  }  @overrIDe  Widget build(BuildContext context) {    return new Scaffold(      appbar: new Appbar(        Title: new Text(Widget.Title),body: new Center(        child: new Column(          mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[            innerWidget          ],);  }}

这里CustomStatefullWidget是我创建的一个类,它是页面中独立的交互式部分.对于此示例,实际内容无关紧要.

我所期望的是每当调用changeContent()时,innerWidget都会有一个新的状态,但事实并非如此.该状态已存储在树中,并且在创建窗口小部件的新实例时不会刷新.
如何强制扑动清除树的那一部分或者识别我想要重置状态?

解决方法 这是预期的行为.当父重建Flutter将新窗口小部件树与旧窗口小部件树进行比较时.

通过这种方式,Flutter能够知道哪些小部件被“更新”并且被添加/删除了哪些小部件.

对于添加的小部件,它将创建一个新状态.调用initState.对于更新的小部件; Flutter将重用旧的小部件并通过将旧的“小部件”部分作为参数作为参数传递来调用dIDUpdateWidget.至于删除的小部件,它将调用dispose.

在您的情况下,您希望再次调用initState.但实际上它得到了“更新”.

从这一点开始,您有两种重置状态的解决方案:

实现dIDUpdateWidget.哪会重置你的状态或做你想做的任何其他事情.
这是您应该考虑的最佳方法.因为您不一定要重置“new statefulWidget”的子项.

还有一个“懒惰”的解决方案,就是告诉人们“嘿,这是一个不同的小部件.不要重用旧的”.这是使用Key实现的.

关键用法here的更多信息

这就像将changeContent方法更改为以下内容一样简单:

Widget innerWidget;voID changeContent(){  setState((){      innerWidget = new CustomStatefullWidget(key: new UniqueKey());  }}
总结

以上是内存溢出为你收集整理的Flutter中的状态更新全部内容,希望文章能够帮你解决Flutter中的状态更新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1001886.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存