Flutter flatter setState()只调用一次
这是我的密码:Flutter flatter setState()只调用一次,flutter,dart,Flutter,Dart,这是我的密码: import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget{ @override State createState() => Comeback(); } class Comeback extends State<MyApp>{ Widget hello(BuildContext con
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget{
@override
State createState() => Comeback();
}
class Comeback extends State<MyApp>{
Widget hello(BuildContext context){
var listInsults = ['no you', 'but this applies to you more than me', 'that insult was horrible'];
var finalVar = listInsults.toList()..shuffle();
return Column(
children: <Widget>[
Row(
children: <Widget>[
CircleAvatar(
child: Text(
"XD"
)
),
Text(
finalVar[0]
)
]
)
],
);
}
Widget build(BuildContext context){
var listy = 0;
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text(
"hi"
)
),
body: Column(
children: <Widget>[
Expanded(
child: ListView.builder(
itemBuilder: (BuildContext context, int index) => hello(context),
itemCount: listy
),
),
Row(
children: <Widget>[
Expanded(
child: TextFormField(
decoration: InputDecoration(
hintText: "Insult me plz!"
)
),
),
RaisedButton(
onPressed: () {
setState(() {
listy++;
//where program is being printed
print(listy);
});
},
child: Icon(Icons.add_circle_outline),
highlightColor: Colors.amber[600]),
],
)
],
)
)
);
}
}
在上面查看时,您可以看到程序显然没有更新变量listy。如果是的话,打印的数字会增加一个。我曾经尝试过从一个类似的项目中复制和粘贴代码,并通过更改变量和删除不必要的代码对其进行了修改
以下是我复制并粘贴的代码:
onPressed: () {
if(!products.contains(myController.text.toLowerCase()) && !products.contains(myController.text.toUpperCase()) && !products.contains(myController.text)) {
setState(() {
products.add(myController.text);
_save();
_read();
});
}
},
下面是我如何修改它的:
setState(() {
listy++;
print(listy);
});
修改后,程序仍然有相同的错误
我的程序有什么问题?
为什么程序错了?
我如何解决这个问题,避免将来出现类似的错误和不一致
请记住,我是颤振的初学者,而且我很容易出错。这是因为每次刷新小部件时,都会调用方法
build
,然后变量listy又被指定为0
Widget build(BuildContext context){
var listy = 0;
要解决问题,只需将声明移到build
方法之外,如下所示:
var listy = 0;
Widget build(BuildContext context){
...
var listy = 0;
Widget build(BuildContext context){
...