【问题标题】:Another exception was thrown: type 'MyApp' is not a subtype of type 'StatelessWidget'引发了另一个异常:“MyApp”类型不是“StatelessWidget”类型的子类型
【发布时间】:2018-12-22 09:48:07
【问题描述】:

我刚开始使用 Flutter,在运行我的代码时遇到了这个问题 “引发了另一个异常:'MyApp' 类型不是'StatelessWidget' 类型的子类型”。 有趣的是,我的代码中什至没有这个“StatelessWidget”。

   import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  List<String> _bars = ['Olivio bar'];
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text('Drinkzz'),
          ),
          body: Column(
            children: [
              Container(
                margin: EdgeInsets.all(10.0),
                child: RaisedButton(
                  onPressed: () {
                    _bars.add('Riviera Bar');
                  },
                  child: Text('Add new Bar!'),
                ),
              ),
              Column(
                children: _bars
                    .map((element) => Card(
                          child: Column(
                            children: <Widget>[
                              Image.asset('assets/olivio.jpg'),
                              Text(element)
                            ],
                          ),
                        ))
                    .toList(),
              )
            ],
          )),
    );
  }
}

我真的迷路了,希望能得到一些帮助!

谢谢,

【问题讨论】:

  • 如果你将 MyApp 从 StatelessWidget 更改为 StatefulWidget 则需要热重启,因为它是在 main 中调用的
  • 当我按下按钮时,问题发生了!!
  • 我错过了 setState() 函数!!谢谢
  • @Jonah Williams,这是正确答案,所以请将其作为答案发布,而不是作为评论发布

标签: flutter flutter-test


【解决方案1】:

由于在代码开头使用了 StatelessWidget 并且后来更改为 StatefulWidget 您需要热重启。如果您不重新启动它,它将继续出错,因为最初它是在 main 中调用的

【讨论】:

    【解决方案2】:

    如果您需要更改 MyApp,那么在重新加载应用程序后您无法获得结果。您必须重新启动您的应用程序,然后您才能检查您的编辑是否在应用程序上可用。

    【讨论】:

      【解决方案3】:

      您需要使用 R (shift + r) 进行热重载,因为您在应用运行时将 MyApp 类从 StatelessWidget 更改为 StatefulWidget。

      【讨论】:

        【解决方案4】:

        您需要重新启动您的应用才能使更改生效。热重载目前不起作用

        【讨论】:

          【解决方案5】:

          作为Jonah Williams said

          如果您将 MyAppStatelessWidget 更改为 StatefulWidget 您 需要热重启,因为它是在main中调用的

          这在实时编码会话中已多次解释,当您更改 initState() 等功能时,您必须重新启动应用程序。类似的情况也适用于您,当您更改 MyApp 小部件的状态相关属性时,您需要重新启动应用程序才能使这些更改生效。

          基本上,当你热重载应用程序时,它会调用build()函数,只有在你重新启动应用程序时才会调用initState(),以便应用程序重新启动包括@的widget在内的所有内容987654328@你改变的函数。

          【讨论】:

            猜你喜欢
            • 2020-11-17
            • 2020-12-20
            • 1970-01-01
            • 1970-01-01
            • 2020-08-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-14
            相关资源
            最近更新 更多