Как получить доступ к свойствам родительского класса виджета в дочернем классе виджета с помощью флаттера?

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

Я пытался это сделать, но не могу получить доступ к свойствам виджета родительского класса в дочернем классе. Например, виджет столбца имеет дочерние свойства, которые на самом деле являются списком виджетов. Теперь я хочу заполнить список множеством виджетов. Я хочу заполнить этот список, используя класс 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 ответ

  1. Использовать build-in Column widgetи создайте его как аналогичные виджеты: Column(), Text()и т. д., вместо расширения класса. Пожалуйста, обратитесь к официальной документации dart здесь, чтобы узнать, как правильно использовать ключевое слово extends.

  2. Вы не можете просто добавить несколько виджетов в Scaffold. body, с тех пор expects a single widget(например, столбец, текст или контейнер).

  3. Вы можете использовать пользовательский виджет 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);}
      ),
    );
  }
}
Другие вопросы по тегам