Edward Sams
Edward Sams

Reputation: 17

Flutter repeating a Flutter method

I am wanting to repeat the handleImages() method every five seconds but having an issue getting this to work.

import 'package:flutter/material.dart';

class CameraImageWidget extends StatefulWidget {
  const CameraImageWidget({
    Key key,
  }) : super(key: key);

  @override
  _CameraImageWidgetState createState() => _CameraImageWidgetState();
}

class _CameraImageWidgetState extends State<CameraImageWidget> {
  String handleImages() {
    List<String> cameraImages = [
      'assets/images/imageUpload.gif',
      'assets/images/imageUploadGreen.gif',
    ];
    String randomImage = (cameraImages..shuffle()).first;
    return randomImage;
  }

  @override
  Widget build(BuildContext context) {
    return Image.asset(handleImages(), height: 450.0);
  }
}

Upvotes: 2

Views: 463

Answers (3)

William Terrill
William Terrill

Reputation: 3744

I made a dartpad.dev of the following code so that you can run it yourself. (however, instead of images, I am just showing the "asset text" every 5 seconds since it's on dartpad. You would just have to insert the text into the Image.asset using Image.asset(randomImage, height: 450.0);

Here's the dartpad: http://dartpad.dev/2af9c2d7c4b3436dfa55348bb4fb9dca

and here's the code:

import 'package:flutter/material.dart';
import 'dart:async';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CameraImageWidget(),
    );
  }
}

class CameraImageWidget extends StatefulWidget {
  const CameraImageWidget({
    Key key,
  }) : super(key: key);

  @override
  _CameraImageWidgetState createState() => _CameraImageWidgetState();
}

class _CameraImageWidgetState extends State<CameraImageWidget> {
  static List<String> cameraImages = [
    'assets/images/imageUpload.gif',
    'assets/images/imageUploadGreen.gif',
  ];
  String randomImage = (cameraImages..shuffle()).first;
  int count = 0;

  @override
  initState() {
    handleImages();
  }

  handleImages() {
    Timer.periodic(Duration(seconds: 5), (timer) {
      setState(() {
        randomImage = (cameraImages..shuffle()).first;
        print(randomImage);
        count++;
        print(count);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
//     return Image.asset(handleImages(), height: 450.0);
    return Text(randomImage); //
  }
}

Upvotes: 0

Edward Sams
Edward Sams

Reputation: 17

import 'dart:async';

import 'package:flutter/material.dart';

class CameraImageWidget extends StatefulWidget {
  const CameraImageWidget({
    Key key,
  }) : super(key: key);

  @override
  _CameraImageWidgetState createState() => _CameraImageWidgetState();
}

class _CameraImageWidgetState extends State<CameraImageWidget> {
  String handleImages() {
    String chosenImage;
    List<String> cameraImages = [
      'assets/images/imageUpload.gif',
      'assets/images/imageUploadGreen.gif',
    ];
    Timer.periodic(Duration(seconds: 10), (timer) {
      setState(
        () {
          chosenImage = (cameraImages..shuffle()).first;
        },
      );
    });
    return chosenImage;
  }

  @override
  Widget build(BuildContext context) {
    return Image.asset(handleImages(), height: 400.0);
  }
}

Upvotes: 0

Thomas
Thomas

Reputation: 2560

This should do the trick. Have not tested it tho.

class _CameraImageWidgetState extends State<CameraImageWidget> {
  String _image;

  @override
  initState(){
      handleImages();
  }
  void handleImages() async{
    List<String> cameraImages = [
      'assets/images/imageUpload.gif',
      'assets/images/imageUploadGreen.gif',
    ];
    setState(() {
       _image = (cameraImages..shuffle()).first;      
    });

    //Wait 5 seconds
    await new Future.delayed(const Duration(seconds:5));
    handleImages();
  }

  @override
  Widget build(BuildContext context) {
    return Image.asset(_image, height: 450.0);
  }
}

Upvotes: 1

Related Questions