При клике в любом месте экрана цвет фона должен меняться на рандомный

Пишу на Dart c Flutter в Android Studio Мне нужно чтобы при клике в любом месте экрана цвет фона менялся на рандомный. Dart я не знаю вообще, на нем пишу только 1 день, в программирование новичок, если будете писать объяснение к моей проблеме напишите пожалуйста попроще, хочется разобраться. Пока я добился того, что при каждом новом запуске эмулятора у меня рандомный фон. Если знаете статейку на эту тему или что-то для новичков, то прикрепите плиз))) P.S если сможете не сильно менять код то будет супер, в заранее спасибо.

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

void main() {
  runApp(MyApp());
}

var x = Random();
var xx = Color((Random().nextDouble() * 0xFFFFFF).toInt() << 0).withOpacity(1.0);

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext txt) {
    return Container(
      alignment: Alignment.center,
        color: xx,
      child: const Text(
        "Hey there!!!",
        style: TextStyle(fontSize: 50, color: Colors.black),
        textDirection: TextDirection.ltr,
      ),
    );
  }
}

Ответы (1 шт):

Автор решения: dinario

Вы пытаетесь управлять состоянием, значит сразу думаем о StatefulWidget (ссылка по теме). Для удобства генерацию цвета перенесли в функцию generateColor.

class MyApp extends StatefulWidget {
  @override
  _ MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  Color _color;

  void generateColor(){
    setState(() {
      _color = Color((Random().nextDouble() * 0xFFFFFF).toInt() << 0).withOpacity(1.0);
    });
  }

  @override
  void initState() {
    generateColor();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => generateColor(),
      child: Container(
        alignment: Alignment.center,
        color: _color,
        child: const Text(
          "Hey there!!!",
          style: TextStyle(fontSize: 50, color: Colors.black),
          textDirection: TextDirection.ltr,
        ),
      ),
    );
  }
}
→ Ссылка