Изучение виджетов во Flutter: подробное руководство с примерами

Flutter, разработанный Google, – это популярный набор инструментов пользовательского интерфейса с открытым исходным кодом, предназначенный для создания скомпилированных в собственном коде приложений для мобильных устройств, Интернета и настольных компьютеров из единой базы кода. Во Flutter виджет — это фундаментальный строительный блок, используемый для создания пользовательского интерфейса (UI) приложения. В этой статье мы углубимся в концепцию виджетов во Flutter и рассмотрим различные методы с примерами кода, чтобы понять их использование.

Понимание виджетов.
Во Flutter все является виджетами, включая само приложение. Виджет может быть простым, как кнопка, или сложным, как целый экран. Виджеты легкие и пригодны для многократного использования, что позволяет разработчикам создавать сложные макеты пользовательского интерфейса, комбинируя меньшие автономные виджеты.

Типы виджетов:

  1. StatelessWidget:
    StatelessWidget — это неизменяемый виджет, который не меняет свое состояние после создания. Он подходит для представления статических элементов пользовательского интерфейса. Вот пример StatelessWidget:
class MyButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        // Handle button press
      },
      child: Text('Click Me'),
    );
  }
}
  1. StatefulWidget:
    StatefulWidget — это изменяемый виджет, который может изменять свое состояние с течением времени. Он используется, когда пользовательский интерфейс должен динамически обновляться в зависимости от взаимодействия с пользователем или других факторов. Вот пример StatefulWidget:
class Counter extends StatefulWidget {
  @override
  _CounterState createState() => _CounterState();
}
class _CounterState extends State<Counter> {
  int _count = 0;
  void _incrementCounter() {
    setState(() {
      _count++;
    });
  }
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('Count: $_count'),
        ElevatedButton(
          onPressed: _incrementCounter,
          child: Text('Increment'),
        ),
      ],
    );
  }
}
  1. InheritedWidget:
    InheritedWidget — это виджет, используемый для эффективного обмена данными по дереву виджетов с его потомками. Это помогает избежать сверления винта. Примером InheritedWidget является виджет «Тема», который может распространять данные темы по всему приложению.
class MyTheme extends InheritedWidget {
  final ThemeData themeData;
  MyTheme({required this.themeData, required Widget child})
      : super(child: child);
  static MyTheme of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<MyTheme>()!;
  }
  @override
  bool updateShouldNotify(MyTheme oldWidget) {
    return themeData != oldWidget.themeData;
  }
}

Виджеты — это строительные блоки пользовательского интерфейса приложения Flutter. В этой статье мы рассмотрели три типа виджетов: StatelessWidget, StatefulWidget и InheritedWidget. StatelessWidget используется для статических элементов пользовательского интерфейса, StatefulWidget обрабатывает динамические обновления пользовательского интерфейса, а InheritedWidget обеспечивает эффективный обмен данными. Используя эти типы виджетов, разработчики могут создавать красивые и интерактивные пользовательские интерфейсы во Flutter.