Как получить доступ к свойствам родительского класса виджета в дочернем классе виджета с помощью флаттера?
Привет, ребята, я новичок в флаттере и хочу создавать свои собственные настраиваемые виджеты. Я делаю это используя наследование
Я пытался это сделать, но не могу получить доступ к свойствам виджета родительского класса в дочернем классе. Например, виджет столбца имеет дочерние свойства, которые на самом деле являются списком виджетов. Теперь я хочу заполнить список множеством виджетов. Я хочу заполнить этот список, используя класс MyContainer, который наследует виджет-контейнер. Класс MyContainer работает нормально, а класс MyColumn - нет.
import 'package:flutter/material.dart';
void main(List<String> args) {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: Title(
color: const Color(0xFFFFFFFF),
child: const Text("Hello World App")),
),
body: MyColumn(),
),
);
}
}
class MyContainer extends Container {
late int numbr;
MyContainer(numbr) {
this.numbr = numbr;
}
@override
// TODO: implement color
Color? get color => Colors.blue;
@override
// TODO: implement child
Widget? get child => Center(
child: Text("Container $numbr",
style: TextStyle(
fontSize: 34, fontFamily: "Cursive", color: Colors.white)),
);
}
class MyColumn extends Column {
@override
// TODO: implement children
List<Widget> get children {
for (int i = 1; i < 11; i++) {
this.children.add(MyContainer(i));
}
return this.children;
}
}
Простите за плохой английский!!!
1 ответ
Использовать
build-in Column widget
и создайте его как аналогичные виджеты:Column()
,Text()
и т. д., вместо расширения класса. Пожалуйста, обратитесь к официальной документации dart здесь, чтобы узнать, как правильно использовать ключевое слово extends.Вы не можете просто добавить несколько виджетов в Scaffold.
body
, с тех порexpects a single widget
(например, столбец, текст или контейнер).Вы можете использовать пользовательский виджет
MyCustomColumn
для настройки столбца (см. код ниже), но вы также можете просто добавить столбец в тело и передатьList.generate
метод к его дочернему свойству.
Вот пример кода:
class MyCustomColumn extends StatelessWidget {
const MyCustomColumn ({ Key? key }) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(children: List.generate(11, (index) {
return MyContainer(i);}
),
);
}
}