Idesh
Idesh

Reputation: 373

How Can I Update Image after few seconds in flutter?

I'm Building An Flutter Application which requires image changes after a period of time. I thought using while loop with a sleep method inside may solve the problem. But It didn't, Image is only getting change after the loop ends. Application UI also gets froze.

Desired Output: Image should be changed after every 10 seconds.

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

Image and Button text is not Updating When Loop is running, please help me to get the desired output.


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

Upvotes: 0

Views: 2116

Answers (1)

Zvi Karp
Zvi Karp

Reputation: 3904

you shouldn't use sleep in the setState try replacing the inc function with this:

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

Upvotes: 2

Related Questions