Как не дублировать Scaffold во flutter?

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

Для того чтобы избежать дублирования Scaffold, можно использовать возможность наследования и композиции в Flutter. Одним из подходов является создание базового класса (BaseScaffold), который содержит Scaffold и определяет общую структуру пользовательского интерфейса. Этот базовый класс может определять AppBar, body и bottomNavigationBar по умолчанию, которые могут быть переопределены в дочерних классах.

Вот пример реализации подхода с наследованием:

class BaseScaffold extends StatelessWidget {
  final Widget body;
  
  BaseScaffold({this.body});
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My App'),
      ),
      body: body,
      bottomNavigationBar: BottomNavigationBar(
        // опции нижней панели навигации
      ),
   );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BaseScaffold(
      body: Center(child: Text('Home')),
    );
  }
}

class ProfilePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BaseScaffold(
      body: Center(child: Text('Profile')),
    );
  }
}

В этом примере BaseScaffold определяет общую структуру пользовательского интерфейса, включая AppBar и bottomNavigationBar. Компонент body передается в BaseScaffold через конструктор и затем отображается.

В результате, вы можете использовать BaseScaffold в разных экранах без необходимости копирования кода Scaffold. Вы также можете легко настраивать каждый экран, переопределяя body или дополняя его дополнительными виджетами.

Таким образом, использование наследования и композиции в Flutter позволяет избежать дублирования кода Scaffold и обеспечивает повторное использование основных компонентов пользовательского интерфейса в приложении.