如何解决屏幕未在Flutter中的statefulWidget中更新
我在Flutter中有一个std::array<int,3> arr = {1,2,3};
std::array<int,3> *ptr = &arr; // arr is equivalent to an array of 1 element
int temp = ptr[0][2]; // same as (*ptr).operator[](2)
,如下所示:
.approvalContainer {
align-self: flex-end;
width: 24px;
height: 24px;
background-color: var(--color-background-success-dark);
vertical-align: flex-end;
}
.approvalIcon {
width: 100px;
height: 100px;
}
问题是,当我第一次使用此小部件启动应用程序时,我可以在屏幕上看到<div style=approvalContainer>
<svg style=approvalIcon/>
</div>
,但是如果我继续并将statefulWidget
更改为{{ 1}},即使打开了热重装功能,它也不会更新屏幕,并且仍然显示class GameScreen extends StatefulWidget {
@override
GameScreenState createState() => GameScreenState();
}
class GameScreenState extends State<GameScreen> {
List<String> selectedWord = ['h','e','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,children: <Widget>[
_letterinput(),],)),);
}
}
class LetterInput extends StatelessWidget {
LetterInput({this.letter});
final String letter;
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.fromLTRB(5,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
。我该如何解决?
解决方法
根据我的经验,热重装可以保持状态。尝试热重启吗?
关于您的评论,如果您想继续使用热重载,建议您将变量拉出到小部件本身(如果您可以选择的话),如下所示:
class GameScreen extends StatefulWidget {
final List<String> selectedWord = ['h','e','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,children: <Widget>[
_letterInput(),],)),);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。