Правильно ли иметь вложенный Scaffold во Flutter?

У меня есть PageView на главной странице моего приложения, и я хочу:

  1. AppBar меняется в зависимости от страницы
  2. BottomAppBar исправлен

Я придумал два решения:

  1. Самый сложный: иметь один Scaffold с appBar, body и bottomNavigationBar; используйте PageView's PageController для анимации содержимого AppBar...
  2. Имейте 2 вложенных скаффолда: основной с body и bottomNavigationBar, а второй на каждой странице PageView с AppBar...

Так что мне было интересно, это работает, но "правильно ли" синтаксически иметь вложенный Scaffold?

Большое спасибо!

2 ответа

Решение

Перейдите сюда: https://api.flutter.dev/flutter/material/Scaffold-class.html

Есть раздел "Устранение неполадок", в котором вы найдете следующее:

Вложенные леса

Scaffold был разработан как единственный контейнер верхнего уровня для MaterialApp, и, как правило, нет необходимости вкладывать строительные леса. Например, в пользовательском интерфейсе с вкладками, где bottomNavigationBar - это TabBar, а тело - это TabBarView, у вас может возникнуть соблазн сделать так, чтобы каждая панель вкладок отображала основу с другим названием AppBar. Было бы лучше добавить слушателя к TabController, который обновляет AppBar.

Я думаю так. Scaffold похож на любой другой виджет imo. Он настолько удобен, что предоставляет вам панель приложения, тело и т. Д. Я обычно помещаю его как дочерний элемент виджета SafeArea, чтобы приложение учитывало выемки на современных смартфонах.

Другие вопросы по тегам