Flutter 中的 statefulWidget 中的屏幕未更新
Posted
技术标签:
【中文标题】Flutter 中的 statefulWidget 中的屏幕未更新【英文标题】:Screen not updating in a statefulWidget in Flutter 【发布时间】:2020-12-23 05:14:03 【问题描述】:我在 Flutter 中有一个 statefulWidget
,如下所示:
class GameScreen extends StatefulWidget
@override
GameScreenState createState() => GameScreenState();
class GameScreenState extends State<GameScreen>
List<String> selectedWord = ['h', 'e', 'l', 'l', 'o'];
Widget _letterInput()
return Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
for (var letter in selectedWord) LetterInput(letter: letter)
],
),
);
@override
Widget build(BuildContext context)
return Scaffold(
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
_letterInput(),
],
)),
);
class LetterInput extends StatelessWidget
LetterInput(this.letter);
final String letter;
@override
Widget build(BuildContext context)
return Container(
padding: EdgeInsets.fromLTRB(5, 0, 5, 0),
decoration: BoxDecoration(
border: BorderDirectional(
bottom: BorderSide(width: 6.0, color: Colors.green))),
child: Text(letter,
textAlign: TextAlign.center,
style:
GoogleFonts.acme(fontSize: 28.0, fontWeight: FontWeight.w400)));
问题是当我第一次使用这个小部件启动应用程序时,我可以在屏幕上看到hello
,但如果我继续将selectedWord
中的hello
更改为hellos
,则不会更新即使打开了热重载,屏幕仍然显示hello
。我必须去重新启动应用程序,以便它显示hellos
。我该如何解决这个问题?
【问题讨论】:
【参考方案1】:根据我的经验,热重载会保持状态。试试热重启?
参考您的评论,如果您想继续使用热重载,我建议您将变量拉出到您的小部件本身(如果您可以选择的话),如下所示:
class GameScreen extends StatefulWidget
final List<String> selectedWord = ['h', 'e', 'l', 'l', 'o'];
@override
GameScreenState createState() => GameScreenState();
class GameScreenState extends State<GameScreen>
Widget _letterInput()
return Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
for (var letter in widget.selectedWord) LetterInput(letter: letter)
],
),
);
@override
Widget build(BuildContext context)
return Scaffold(
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
_letterInput(),
],
)),
);
【讨论】:
你的意思是当我们改变状态时热重载不会改变。因此,如果这是真的,我每次更改状态时都必须重新启动,这真的很令人沮丧,因为我的应用程序有多个屏幕,而这个屏幕是内部屏幕之一以上是关于Flutter 中的 statefulWidget 中的屏幕未更新的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 的 StatefulWidget 类中的 setState() 方法上停止小部件重新加载
Flutter中StatelessWidget调用StatefulWidget的函数
Flutter StatefulWidget 有状态组件页面上绑定数据改变页面数据