flutter 抛出了另一个异常:类型“MyApp”不是类型“StatelessWidget”的子类型

2mbi3lxu  于 2023-01-09  发布在  Flutter
关注(0)|答案(8)|浏览(157)

我刚开始使用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(),
              )
            ],
          )),
    );
  }
}

我真的迷路了,需要帮助!
谢谢你,

dohp0rv5

dohp0rv51#

正如约拿·威廉姆斯所说,
如果您将MyAppStatelessWidget更改为StatefulWidget,则需要热重启,因为它是在main中调用的
这一点在实时编码会话中已经解释过多次,当您更改initState()等函数时,必须重新启动应用。类似的情况也适用于您,当您更改MyApp小部件的状态相关属性时,需要重新启动应用才能使这些更改生效。

基本上,当您热重新加载应用时,它会调用build()函数,initState()仅在您重新启动应用时调用,以便应用重新启动所有内容,包括您更改了其initState()函数的小工具。

lyfkaqu1

lyfkaqu12#

您需要重新启动应用才能使更改生效。此时热重新加载不起作用

ioekq8ef

ioekq8ef3#

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

tgabmvqs

tgabmvqs4#

在Flutter如果你需要改变MyApp,那么你不能得到结果后,应用程序重新加载。你必须重新启动你的应用程序,然后你可以检查你的编辑在应用程序上可用。

db2dz4w8

db2dz4w85#

由于StatelessWidget在代码开始时使用,后来更改为StatefulWidget,因此需要热重启。如果不重启它,它将给予,因为最初它是在main中调用的

lmyy7pcs

lmyy7pcs6#

Windows快速修复:要修复此问题,您需要按Ctrl+F2停止main.dart,然后按Shift+F10重新运行它。

基本上,您需要重新启动应用程序。

zf9nrax1

zf9nrax17#

有一个简单的方法可以解决这个问题
在“MyApp”类之上创建一个类,并将其命名为您喜欢的任何名称,例如“RealApp”,但它是无状态的,并将“MyApp”有状态小部件放入其中,如下所示:

class RealApp extends StatelessWidget{
Widget build(Buildcontexr context){
@override
return MyApp();
}

关键是,您不能在runApp函数中运行有状态小部件,但要解决这个问题,请将有状态小部件放到无状态小部件中,这样问题就解决了。

t1rydlwq

t1rydlwq8#

重新启动guys. o( ̄▽ ̄)†如果你将无状态改为有状态

相关问题