首页 > 解决方案 > Flutter - 是否有必要使用预定义的根小部件之一启动每个应用程序?

问题描述

这可能是个愚蠢的问题,但我是 Flutter 的新手,我正在使用 Flutter 玩 macOS 的桌面应用程序。我不想遵循任何设计规则,我只是在玩基本的布局。

我的问题:是否有必要使用预定义的根小部件之一启动每个应用程序?

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。

标签: flutterflutter-layoutflutter-desktop

解决方案


img 迪尔

来自didierboelens 博客

当我们使用 Dart 编写 Flutter 应用程序时,我们仍处于 Flutter Framework 的级别(绿色)。

Flutter 框架通过一个名为 Window 的抽象层与 Flutter Engine(蓝色)进行交互。该抽象层公开了一系列 API 以与设备进行间接通信。

这也是通过这个抽象层,Flutter Engine 在以下情况下通知 Flutter 框架:

  • 感兴趣的事件发生在设备级别(方向更改、设置更改、内存问题、应用程序运行状态……)
  • 一些事件发生在玻璃层面(=手势)
  • 平台通道发送一些数据
  • 但也主要是,当 Flutter 引擎准备好渲染新帧时

推荐阅读