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])),
));
}),
);
}
}
Результат
