В чем разница между Scaffold и MaterialApp во Flutter?

#dart #flutter

#dart #flutter

Вопрос:

У меня есть два экрана, где
Первое: перечисление данных из Firebase
Второе: добавьте данные на этот экран, поэтому я хочу вернуться к первому экрану, все работает нормально, только когда я возвращаюсь, был черный экран. Теперь проблема исчезла, я искал, как это работает, но мне все еще не ясна моя концепция по этому поводу, Кто-нибудь может описать, как это работает?

Перед:

 return new MaterialApp(
      title: "AddEditNames ",
      home: new AddEditNameScreen(),
);
  

После: когда я заменил его на

  return new Scaffold(
      backgroundColor: Color.fromRGBO(30, 30, 30, 1.0),
      body: new AddEditNameScreen(),
      appBar: new AppBar(
        elevation: 0.0,
        backgroundColor: Colors.blueAccent,
        actions: <Widget>[
        ],
        title: new Text(
          "AddEditNames",
          style: new TextStyle(color: Colors.white),
        ),
        centerTitle: true,
      ),
 );
  

Ответ №1:

MaterialApp это отправная точка вашего приложения, она сообщает Flutter, что вы собираетесь использовать компоненты Material и следовать material design в своем приложении.

Scaffold используется под MaterialApp , оно предоставляет вам множество базовых функций, таких как AppBar , BottomNavigationBar Drawer , FloatingActionButton , и т.д.

Итак, вот с чего начинается типичное приложение.

 void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(),
      body: YourWidget(),
    ),
  ));
}
  

Комментарии:

1. В моем приложении flutter я использовал MaterialApp для всех экранов. так повлияет ли это на производительность? @CopsOnRoad

2. @BalajiRamadoss Для всего приложения должно быть только одно MaterialApp , если вы не собираетесь делать какие-то дурацкие вещи.

3. Если MaterialApp уже сообщает, что мы можем использовать компоненты Material, такие как AppBar и т.д., Тогда зачем использовать Scaffold? и наоборот.

Ответ №2:

MaterialApp это виджет, который представляет ряд виджетов ( Navigator , Theme ), необходимых для создания приложения Material design.

В то время как Scaffold позволяет реализовать стандартные виджеты приложения material, которые есть в большинстве приложений. Такие, как AppBar , BottomAppBar , FloatingActionButton BottomSheet , Drawer Snackbar ,,,,,,,,,,,,,.

Scaffold Разработан как единый контейнер верхнего уровня для MaterialApp, хотя нет необходимости вкладывать Scaffold .

Также ознакомьтесь с официальным документом Flutter для MaterialApp и Scaffold .

Комментарии:

1. когда я поместил Navigator.of (mContext).pushNamed (‘/ screen1’) в MaterialApp, он не работает должным образом, но когда я помещаю его в Scaffold, он работает так, как должен, поэтому я сомневаюсь в том, как он ведет себя в stack?

2. Imo » Scaffold Разработан как единый контейнер верхнего уровня для a, MaterialApp хотя нет необходимости вставлять Scaffold» звучит так, как будто MaterialApp обычно включает только один Scaffold . Что касается нескольких страниц и Navigator не тот случай.

Ответ №3:

Приложение Material является основным компонентом и предопределенным классом. Мы можем использовать приложение Material для создания виджетов для разработки приложений во Flutter. Приложение Material обладает несколькими свойствами. Некоторые из них — заголовок, главная страница, тема, цвет, маршруты и т.д.

Scaffold — это также другой класс, который можно использовать для разработки приложения. Он предоставляет нам API, такие как панели закусок, нижние листы, панель приложений, плавающая панель действий и т.д. Scaffold предоставляет нам фреймворк для реализации визуальной структуры макета приложения.