vendredi 6 août 2021

Flutter random Image.asset changes on hovering Button?

I want to show a random picture everytime the user enters the page. I also have a Button (the red container with hovering) on this page, and when the user is hovering it, a new random picture shows, but it shouldn't change since the page was loaded. I think it has something to do with the setState(), but I don't know what to do. Code:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'dart:core';
import 'dart:math';


class Home2 extends StatefulWidget {
  const Home2({Key? key}) : super(key: key);

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

class _Home2State extends State<Home2> {
  dynamic listCinematicImages = [
    "assets/cinematic/1.jpg",
    "assets/cinematic/2.jpg",
    "assets/cinematic/3.jpg",
    "assets/cinematic/4.jpg",
    "assets/cinematic/5.jpg",
    "assets/cinematic/6.jpg",
    "assets/cinematic/7.jpg",
  ];
  late Random rnd;

  @override
  
  bool isHoveringButton = false;
  
  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return Scaffold(
      backgroundColor: Colors.black,
      body: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Container(
            height: double.infinity,
            width: size.width * 0.5,
            alignment: Alignment.center,
            child: InkWell(
              onTap: () {

              },
              onHover: (hovering) {
                setState(() => isHoveringButton = hovering);
              },
              child: Container(
                height: 50,
                width: 50,
                color: Colors.red,
              ),
            ),
          ),
          Container(
            height: double.infinity,
            width: size.width * 0.5,
            child: img(),
          ),
        ],
      ),
    );
  }

  Image img() {
    int min = 0;
    int max = listCinematicImages.length-1;
    rnd = new Random();
    int r = min + rnd.nextInt(max - min);
    String image_name  = listCinematicImages[r].toString();
    return Image.asset(image_name, fit: BoxFit.cover,);
  }
}

I dont know if this helps but this is some error given out:

Error: Expected a value of type 'Map<String, dynamic>', but got one of type 'Null'
    at Object.throw_ [as throw] (http://localhost:60569/dart_sdk.js:5054:11)
    at Object.castError (http://localhost:60569/dart_sdk.js:5013:15)
    at Object.cast [as as] (http://localhost:60569/dart_sdk.js:5336:17)
    at Function.as_C [as as] (http://localhost:60569/dart_sdk.js:4959:19)



Aucun commentaire:

Enregistrer un commentaire