Flutter 在颤振中几秒钟后如何更新图像?

Flutter 在颤振中几秒钟后如何更新图像?,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我正在构建一个颤振应用程序,它需要在一段时间后更改图像。我认为使用while循环和内部的sleep方法可以解决这个问题。但事实并非如此,图像只有在循环结束后才会改变。应用程序UI也会冻结 所需输出:图像应每10秒更改一次 循环运行时,图像和按钮文本未更新,请帮助我获取所需输出 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWid

我正在构建一个颤振应用程序,它需要在一段时间后更改图像。我认为使用while循环和内部的sleep方法可以解决这个问题。但事实并非如此,图像只有在循环结束后才会改变。应用程序UI也会冻结

所需输出:图像应每10秒更改一次

循环运行时,图像和按钮文本未更新,请帮助我获取所需输出


import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
  return MaterialApp(
    home: Scaffold(
      body: Center(
        child: Test(
        ),
      ),
    )
  );
  }}
class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  int imgnumber=1;
  int varToCheckButtonPress = 0;
  String BtnTxt = "START";
  void inc(){
    while(imgnumber<10)
      {
        print(imgnumber);
        setState(() {
          sleep(Duration(seconds:5));
          imgnumber++;
        });
      }
  }
  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        Expanded(flex: 1,
          child: Container(
            child: Image.asset('images/'+imgnumber.toString()+'.png'),
            height: 500,
            width:500,
            color: Colors.green,
          ),
        ),
        FlatButton(
          child: Text(BtnTxt),
          onPressed: (){
            if (varToCheckButtonPress == 0) {
              setState(() {
                BtnTxt = 'PAUSE';
                varToCheckButtonPress = 1;
              });
            } else if (varToCheckButtonPress == 1) {
              setState(() {
                BtnTxt = 'RESUME';
                varToCheckButtonPress = 0;
              });
            }
            inc();
          },
        )
      ],
    );
  }
}

进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:中(
孩子:测试(
),
),
)
);
}}
类测试扩展了StatefulWidget{
@凌驾
_TestState createState();
}
类_TestState扩展状态{
int imgnumber=1;
int varToCheckButtonPress=0;
字符串BtnTxt=“开始”;
void公司(){

(imgnumber您不应该在
setState
中使用sleep,请尝试用以下内容替换
inc
功能:

void inc() async {
    while(imgnumber<10)
      {
        print(imgnumber);
        await Future.delayed(const Duration(seconds: 10));
        setState(() {
          imgnumber++;
        });
      }
  }
void inc()异步{

(imgnumber您不应该在
setState
中使用sleep,请尝试用以下内容替换
inc
功能:

void inc() async {
    while(imgnumber<10)
      {
        print(imgnumber);
        await Future.delayed(const Duration(seconds: 10));
        setState(() {
          imgnumber++;
        });
      }
  }
void inc()异步{

while(imgnumber)如果没有异步,我们如何实现?因为我希望我的用户暂停并恢复此方法。@Creator这会更复杂,我建议您将延迟更改为1秒,并在更改图像编号之前运行10次,每次运行时长检查布尔变量是否为真(比如isPused)。变量将在开始时设置为false(initState)当用户单击puase/resume按钮时,将更改。如果没有异步,我们如何实现?因为我希望我的用户暂停并恢复此方法。@如果更复杂,我建议您将延迟更改为1秒,并在更改图像编号之前运行10次,每次运行持续时间检查如果一个布尔变量为true(比如isPused),该变量将在开始时设置为false(initState),并在用户单击puase/resume按钮时更改