Flutter - необходимо ли запускать каждое приложение с одним из предопределенных корневых виджетов?

это может быть глупый вопрос, но я совершенно новичок в flutter, я играю с настольным приложением для macOS, используя Flutter. Я не хочу следовать никаким правилам дизайна и просто играю с базовым макетом.

Мой вопрос: нужно ли запускать каждое приложение с одним из предопределенных корневых виджетов?

MaterialApp()
WidgetApp()
CupertinoApp()

Может ли наше приложение начинаться с Container (), как в моем коде ниже?

void main() {
  runApp(
    new Directionality(textDirection: TextDirection.ltr, child: MyApp())
    );
}
// Root of App
class MyApp extends StatelessWidget {
 
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {  
    
    var mainGrey = parseColor('#282828');
    var dddColor = parseColor('#3e3e3e');
    
    var rootWidget = Container(
      decoration: BoxDecoration(gradient: 
      LinearGradient(begin: Alignment.topLeft,
                     end: Alignment.bottomRight,
                     colors: [mainGrey, dddColor], stops: [0.5, 1.0] )
                  ),
      //color: parseColor('#282828'),
      //color:Color.fromRGBO(50, 50, 50, 0.5),
        child: Column(        
          children: [
            Expanded(child:
            Container(child:
              Row(
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: [
                Flexible(
                  flex:1,
                  child: Container(
                      padding: const EdgeInsets.all(7),
                      decoration: BoxDecoration( border: Border.all(width: 1.0, color: Colors.blue[100])),
                      width: 200,
                      child: _myListMenu(context)
                      ),
                  
                ),
                Expanded(
                  flex:3,
                  child: Center(child: MainView() )
                ),],),
            )),
            Container(//Bottom bar
              height:30,
              color:Colors.blue,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children:[Text('App Footer', textAlign: TextAlign.end,), ])
              ,)
            ]
        ),
      );
    return rootWidget;
  }
}

Это совсем плохой дизайн? Или мы можем вот так использовать флаттер? Конечно, я встретил несколько проблем. Отсутствует направленность текста, и я не могу получить доступ к MediaQuery.


person TomRavn    schedule 13.08.2020    source источник
comment
Это зависит от того, что вы подразумеваете под плохим дизайном. Вы можете использовать Flutter SDK для любых целей. Если вы не хотите использовать какие-либо шаблоны кода / проектирования и хотите использовать свои собственные структуры, вы можете это сделать. Если у вас все в порядке с проблемами, о которых вы уже упоминали, с теми, которые вы еще не нашли, и зная, что вы, скорее всего, не найдете много помощи с проблемами Flutter, если не будете следовать другим рекомендациям. стандартные выкройки.   -  person João Soares    schedule 13.08.2020
comment
Да, что я имею в виду под плохим дизайном - хороший вопрос. Я не уверен. Я читал, что WidgetApp предназначен для тех из нас, кто не хочет следовать никаким правилам дизайна. Я хотел начать без тех причудливых вещей, которые есть внутри MaterialApp и т. Д. Но знаю, что я вижу, что есть маршрутизаторы, MediaQuery, направление текста. Интересно, смогу ли я воссоздать некоторые из этих вещей самостоятельно, или мне лучше перестать биться о стену в этом случае и следовать стандартным правилам.   -  person TomRavn    schedule 13.08.2020


Ответы (1)


img ddier

из блога didierboelens

Когда мы пишем приложение Flutter, используя Dart, мы остаемся на уровне Flutter Framework (выделено зеленым цветом).

Flutter Framework взаимодействует с Flutter Engine (синим цветом) через слой абстракции, называемый Window. Этот уровень абстракции предоставляет ряд API для косвенного взаимодействия с устройством.

Это также через этот уровень абстракции, который Flutter Engine уведомляет Flutter Framework, когда, среди прочего:

  • интересующее событие происходит на уровне устройства (изменение ориентации, изменение настроек, проблема с памятью, состояние работы приложения…)
  • какое-то событие происходит на уровне стекла (= жест)
  • канал платформы отправляет некоторые данные
  • но также и в основном, когда Flutter Engine готов рендерить новый кадр
person griffins    schedule 13.08.2020