Как я могу обновить изображение после нескольких секунд в флаттере? - PullRequest
0 голосов
/ 13 апреля 2020

Я создаю приложение флаттера, которое требует изменения изображения через определенный промежуток времени. Я думал, что использование l oop с методом сна внутри может решить проблему. Но это не так, изображение меняется только после окончания l oop. Пользовательский интерфейс приложения также зависает.

Требуемый вывод: изображение следует менять через каждые 10 секунд.

Image When I clicked On Start BUtton To start The LoopImage After Loop Ends

Изображение и текст кнопки равно не обновляется Когда L oop работает , пожалуйста, помогите мне получить желаемый результат.


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();
          },
        )
      ],
    );
  }
}

1 Ответ

2 голосов
/ 13 апреля 2020

вы не должны использовать sleep в setState попробуйте заменить функцию inc на:

void inc() async {
    while(imgnumber<10)
      {
        print(imgnumber);
        await Future.delayed(const Duration(seconds: 10));
        setState(() {
          imgnumber++;
        });
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...