Flutter 更改变量不会';不要在颤栗中改变观点
我有一个图像位置字符串数组。 在我的类中有一个名为displayImage的int,当我初始化该类的实例时,我将displayImage的值设置为0。所以我看到了与数组中第一个图像对应的图像。 然后我调用一个函数,在超时后,它将int的值从0更改为1,但我看不到相应的第二个图像。图像不会更新。当数组的索引displayImage更改时,如何使图像更改Flutter 更改变量不会';不要在颤栗中改变观点,flutter,dart,Flutter,Dart,我有一个图像位置字符串数组。 在我的类中有一个名为displayImage的int,当我初始化该类的实例时,我将displayImage的值设置为0。所以我看到了与数组中第一个图像对应的图像。 然后我调用一个函数,在超时后,它将int的值从0更改为1,但我看不到相应的第二个图像。图像不会更新。当数组的索引displayImage更改时,如何使图像更改 var images = ["amusement1.jpeg", "amusement2.jpg", &q
var images = ["amusement1.jpeg", "amusement2.jpg", "amusement3.png", "amusement4.jpeg",
"amusement5.jpeg", "amusement6.jpeg"];
class RandomWords extends StatefulWidget {
@override
_RandomWordsState createState() => _RandomWordsState(0);
}
class _RandomWordsState extends State<RandomWords> {
final _suggestions = <WordPair>[];
final _biggerFont = TextStyle(fontSize: 10.0);
int displayImage;
_RandomWordsState(firstImage) {
this.displayImage = firstImage;
}
Widget _buildRow(WordPair pair) {
return ListTile(
title: Text(
pair.asPascalCase,
style: _biggerFont,
)
);
}
final timeout = Duration(seconds: 3);
void handleTimeout() {
print(this.displayImage);
this.displayImage++;
print(this.displayImage);
}
switchImages () {
print("switching image");
const timeout = Duration(seconds: 3);
const ms = Duration(milliseconds: 1);
Timer startTimeout(milliseconds) {
var duration = milliseconds == null ? timeout : ms * milliseconds;
return Timer(duration, handleTimeout);
}
startTimeout(1000);
}
Widget _buildSuggestions() {
return ListView.builder(
padding: EdgeInsets.all(16.0),
itemBuilder: (context, i) {
if (i.isOdd) return Divider();
final index = i ~/ 2;
if (index >= _suggestions.length) {
_suggestions.addAll(generateWordPairs().take(10));
}
return _buildRow(_suggestions[index]);
});
}
@override
Widget build(BuildContext context) {
switchImages();
String imageUrl = "assets/amusement/" + images[displayImage];
final wordPair = WordPair.random();
return Image(image: AssetImage(imageUrl));
}
}
var images=[“娱乐1.jpeg”、“娱乐2.jpg”、“娱乐3.png”、“娱乐4.jpeg”,
“娱乐5.jpeg”、“娱乐6.jpeg”];
类RandomWords扩展了StatefulWidget{
@凌驾
_RandomWordsState createState()=>\u RandomWordsState(0);
}
类_RandomWordsState扩展状态{
最终建议=[];
最终_biggerFont=TextStyle(字体大小:10.0);
int显示图像;
_RandomWordsState(第一幅图像){
this.displayImage=firstImage;
}
小部件构建行(字对){
返回列表块(
标题:正文(
pair.asPascalCase,
风格:_biggerFont,
)
);
}
最终超时=持续时间(秒:3);
void handleTimeout(){
打印(此.displayImage);
这个.displayImage++;
打印(此.displayImage);
}
切换图像(){
打印(“切换图像”);
常数超时=持续时间(秒:3);
常数ms=持续时间(毫秒:1);
计时器开始超时(毫秒){
变量持续时间=毫秒==null?超时:毫秒*毫秒;
返回计时器(持续时间、handleTimeout);
}
startTimeout(1000);
}
小部件_buildSuggestions(){
返回ListView.builder(
填充:所有边缘设置(16.0),
itemBuilder:(上下文,i){
如果(i.isOdd)返回分隔符();
最终指数=i~/2;
如果(索引>=\u建议长度){
_建议.addAll(generateWordPairs().take(10));
}
返回_buildRow(_建议[索引]);
});
}
@凌驾
小部件构建(构建上下文){
切换图像();
字符串imageUrl=“资产/娱乐/”+图像[显示图像];
final wordPair=wordPair.random();
返回图像(图像:AssetImage(imageUrl));
}
}
尝试更新以下内容:
void handleTimeout() {
print(this.displayImage);
this.displayImage++;
print(this.displayImage);
}
为此:
void handleTimeout() {
print(this.displayImage);
setState((){
this.displayImage++;
});
print(this.displayImage);
}
要重建小部件,应使用setState
方法触发更改