В 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 и обеспечивает повторное использование основных компонентов пользовательского интерфейса в приложении.