代码之家  ›  专栏  ›  技术社区  ›  Toni Joe

flutter中的runapp(new myapp())和runapp(new materialapp())有什么区别?

  •  1
  • Toni Joe  · 技术社区  · 8 年前

    在flutter中,我们可以通过一个无状态的小部件返回 MaterialApp 实例到 runApp() 功能如下:

    void main()=>runApp(new MyApp());
    
    class MyApp extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
            return new MaterialApp(
                ...
            );
        }
    }
    

    或者我们可以通过 材料聚丙烯 直接到 runapp()。 功能如下:

    void main()=>runApp(
        new MaterialApp(
           ...
        );
    );
    

    这些方法有什么区别?谢谢。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Rémi Rousselet    8 年前

    视觉行为没有区别。 改变的是热重新加载的行为。

    例如,如果您使用 runApp(MaterialApp()) ,更改自

    runApp(MaterialApp(title: 'Foo'))
    

    runApp(MaterialApp(title: 'Bar'))
    

    然后热重新加载不会考虑更改。

    如果你有以下课程:

    class MyApp {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Foo',
        );
      )
    }
    

    像这样使用:

    runApp(MyApp())
    

    然后改变 title 属于 MyApp 将正确热重新加载。

        2
  •  1
  •   Günter Zöchbauer    7 年前

    为了使热重新加载能够保持状态,它将应用代码更改并重新运行 build() 以便更新视图。如果重新启动整个应用程序,以前的状态将丢失。这是不需要的。如果你想用这个 热启动 相反。

    这也意味着只有重新启动整个应用程序时才会执行的代码更改不会应用于当前状态。

    有关热重新加载和限制的详细信息,请参阅 https://flutter.io/docs/development/tools/hot-reload

    在热重新加载方法时添加自定义行为 State<T>.reassemble 可以重写 https://docs.flutter.io/flutter/widgets/State/reassemble.html

        3
  •  0
  •   hobbs    8 年前

    在一种情况下,您有一个类,可以向其中添加更多方法,并使用它们。在一种情况下,你不会。