Как нарисовать круг по нажатию кнопки

Я прям совсем зеленый в flutter и не понимаю почему при нажатии кнопки не рисуется красный круг. Вот мой код:

import 'package:flutter/material.dart';

void main() {
  runApp(
      new MaterialApp(
          debugShowCheckedModeBanner: false,// скрываем надпись debug
          home: new Scaffold(
            body: new MyButton()
          )
      )
  );
}

class MyButton extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    Widget Circle = new Container(
      width: 300.0,
      height: 300.0,
      decoration: new BoxDecoration(
        color: Colors.red,
        shape: BoxShape.circle,
      ),
    );

    return new Container(padding: EdgeInsets.all(40),
        child: new Row (
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget> [
              new FlatButton(onPressed: (){print(Circle);}, child: Text('Красный круг') ,color: Colors.red, textColor: Colors.white),
            ]
        ));
  }
}

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

Автор решения: Sergey K.

функция print - это вывод текста в консоль. В вашем случае нужно сделать иначе. По факту ты не указываешь рисовать, а просто по условию либо вставляешь виджет в дерево виджетов, или не вставляешь.

во-первых, виджет изменяемый, значит, должен быть stateful.

во-вторых, нужна логическая переменная, которая будет знать, нужно ли рисовать круг на экране, или нет.

в-третьих, по нажатию кнопки менять состояние виджета и тогда будет отображаться ваш круг.

При этом, лучше виджеты выносить в отдельные классы, чем сохранять в локальную переменную.

А также, FlatButton уже устарел, следует использовать TextButton.

Примерно как-то так.

import 'package:flutter/material.dart';

class MyButton extends StatefulWidget {
  @override
  _MyButtonState createState() => _MyButtonState();
}

class _MyButtonState extends State<MyButton> {
  bool isVisibleCircle = false;

  @override
  Widget build(BuildContext context) {
    return new Column(children: [
      
      if (isVisibleCircle) new Circle(),
      
      TextButton(
          onPressed: () {
            setState(() {
              isVisibleCircle = true;
            });
          },
          child: Text('Красный круг')),
    ]);
  }
}

class Circle extends StatelessWidget {
  const Circle({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: 300.0,
      height: 300.0,
      decoration: new BoxDecoration(
        color: Colors.red,
        shape: BoxShape.circle,
      ),
    );
  }
}
→ Ссылка