Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 更改变量不会';不要在颤栗中改变观点_Flutter_Dart - Fatal编程技术网

Flutter 更改变量不会';不要在颤栗中改变观点

Flutter 更改变量不会';不要在颤栗中改变观点,flutter,dart,Flutter,Dart,我有一个图像位置字符串数组。 在我的类中有一个名为displayImage的int,当我初始化该类的实例时,我将displayImage的值设置为0。所以我看到了与数组中第一个图像对应的图像。 然后我调用一个函数,在超时后,它将int的值从0更改为1,但我看不到相应的第二个图像。图像不会更新。当数组的索引displayImage更改时,如何使图像更改 var images = ["amusement1.jpeg", "amusement2.jpg", &q

我有一个图像位置字符串数组。 在我的类中有一个名为displayImage的int,当我初始化该类的实例时,我将displayImage的值设置为0。所以我看到了与数组中第一个图像对应的图像。 然后我调用一个函数,在超时后,它将int的值从0更改为1,但我看不到相应的第二个图像。图像不会更新。当数组的索引displayImage更改时,如何使图像更改

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
方法触发更改