flutter中的runApp(new MyApp())和runApp(new MaterialApp())有什么区别?

时间:2018-07-12 19:08:51

标签: flutter

在混乱中,我们可以传递一个无状态小部件,该小部件将git -c core.quotepath=false -c log.showSignature=false rm --cached -f -- src/main/java/com/lealceldeiro/valuedemo/MyFile.java实例返回到MaterialApp函数,如下所示:

runApp()

或者我们可以像这样将void main()=>runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( ... ); } } 的实例直接传递给MaterialApp函数:

runApp()

这些方式之间有什么区别?谢谢。

3 个答案:

答案 0 :(得分:3)

视觉行为没有差异。 变化的是热重装的行为方式。

例如,如果您使用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将被正确地热加载。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为了使热重装能够保持状态,它会应用代码更改并重新运行build(),以便更新视图。如果将重新启动整个应用程序,则先前的状态将丢失。这是不希望的。如果您要使用此方法,请使用热重启

这也意味着,修改代码被重新启动整个应用程序时,其仅执行时,将不被应用到当前状态。

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

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