Invalid context for 'super' invocation

import 'package:flutter/material.dart';
import 'package:flutter_application_1/pages/home.dart';

void main() => runApp(MaterialApp(
    theme: ThemeData(primaryColor: Colors.amber),
    home: Home(),
));

home.dart

import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/material.dart';

class Home extends StatefulWidget {
  const Home({super.key});

  @override
  State<Home> createState() => _HomeState();
}

List todoList = [];

@override
void initState() {
  super.initState();
  
  todoList.addAll(['Buy milk', 'Wash dishes', 'купить картошку']);
}

class _HomeState extends State<Home> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[600],
      appBar: AppBar(
        title: Text('Список делишек'),
        backgroundColor: Colors.black54,
      ),
      body: ListView.builder(
          itemCount: todoList.length,
          itemBuilder: (BuildContext context, int index) {
            return Dismissible(
                key: Key(todoList[index]),
                child: Card(
                  child: ListTile(title: Text(todoList[index])),
                ));
          }),
    );
  }
}

Сделал этот код, выдает ошибку:

Invalid context for 'super' invocation.

В этой части кода

@override
void initState() {
  super.initState();
  
  todoList.addAll(['Buy milk', 'Wash dishes', 'купить картошку']);
}

Не нравится слово super Подскажите, пожалуйста, как можно пофиксить


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

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

Ваша ошибка гласит:

Invalid context for 'super' invocation

Или по русски: Неверный контекст для обращения к super

super - это обращение к родительскому классу.
В данном случае подразумевается, что тот метод initState(), который вы написали, должен быть переопределением родительского метода внутри дочернего класса.
Вы же попытались поместить данный метод прямиком в main.dart без контекста какого бы-то ни было класса...Тем более что в данном случае любой класс не подойдет.

Метод initState() вызывается при добавлении виджета в дерево для инициализации состояния компонента. Данный метод принадлежит классу State.

Документация:
https://api.flutter.dev/flutter/widgets/State/initState.html

Соответственно, в вашем случае нужно данный метод(вместе с предшевствующим определением списка) поместить в класс, который наследуется от State. И в Вашем случае это _HomeState

Все что Вам нужно это переместить данный метод и список в него

class _HomeState extends State<Home> {

  List todoList = [];

  @override
  void initState() {
    super.initState();
    todoList.addAll(['Buy milk', 'Wash dishes', 'купить картошку']);
  }
  // ...
  // Далее Ваш код
  // ...
}

Это все!

Итого:

flutter_application_1/pages/home.dart

import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/material.dart';

class Home extends StatefulWidget {
  const Home({super.key});

  @override
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  List todoList = [];

  @override
  void initState() {
    super.initState();
    todoList.addAll(['Buy milk', 'Wash dishes', 'купить картошку']);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[600],
      appBar: AppBar(
        title: Text('Список делишек'),
        backgroundColor: Colors.black54,
      ),
      body: ListView.builder(
          itemCount: todoList.length,
          itemBuilder: (BuildContext context, int index) {
            return Dismissible(
                key: Key(todoList[index]),
                child: Card(
                  child: ListTile(title: Text(todoList[index])),
                ));
          }),
    );
  }
}

Результат

введите сюда описание изображения

→ Ссылка