В чем ошибка в Flutter приложении?

Пишу на Flutter. В классе TextButton почему-то возникает ошибка "error: Invalid constant value. (invalid_constant at [untitled2] lib\main.dart:15)", и я не понимаю почему ошибка возникает в строчке TextButton(onPressed: () {print("Ckliked");}, child: Text("push")), в месте () {print("Ckliked");}.

Кто может объяснить, почему? И кто может еще подсказать, где еще не совсем правильно написано, просто у меня много чего подчеркивается как не совсем правильное, но у человека, по курсу которого я пишу, ничего подобного нет. Если что, пишу по курсу с сайта itProger.

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(primarySwatch: Colors.red,),
      home: Scaffold(
        appBar: AppBar(
          title: const Text("First App"),
        ),
        body: const Center(
          child: TextButton(onPressed: () {print("Ckliked");}, child: Text("push")),
          // Icon(Icons.settings, size: 45, color: Colors.red,),
        ),
        floatingActionButton: FloatingActionButton(
          child: Text("Push"),
          backgroundColor: Colors.red,
          onPressed: () {
            print("Ckliked");
          },
        ),
      ),
    );
  }
}

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

Автор решения: Михаил Ребров

В чем ошибка?

В тексте ошибке сказано что у Вас невалидное значение для константы.

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

В Вашем же случае Вы объявили виджет Center как константу
внутри которого вы положили:

  • изменяемый виджет "Кнопка",
    внутри которой:
    • виджет Текст

которые в свою очередь константами не являются.

const Center(   // <-- это константа
    child: TextButton(  // <-- а это уже НЕ КОНСТАНТА
        onPressed: () {
            print("Ckliked");
        },
        child: Text("push") // <-- и это НЕ КОНСТАНТА
   ),
),

Что делать?

Соответственно, Вы либо убираете const перед Center

Center(   
    child: const TextButton(  
        onPressed: () => print("Ckliked"),
        child: const Text("push") 
   ),
),

Либо делаете дочерние элементы также неизменяемыми

const Center(   
    child: const TextButton(  
        onPressed: () => print("Ckliked"),
        child: const Text("push") 
   ),
),
→ Ссылка