본문 바로가기
Flutter/Flutter FAQ

Flutter 다른 예외가 발생했습니다: 'MyApp' 타입은 'StatelessWidget' 타입의 하위 타입이 아닙니다., Another exception was thrown: type 'MyApp' is not a subtype of type 'StatelessWidget'

by 베타코드 2023. 9. 22.
반응형

질문


나는 방금 Flutter를 사용하기 시작했고 코드를 실행하는 동안이 문제가 발생했습니다. "Another exception was thrown: type 'MyApp' is not a subtype of type '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(),
              )
            ],
          )),
    );
  }
}

나는 정말로 헤매고 있으며 도움을 받을 수 있으면 감사하겠습니다!

감사합니다,


답변


Jonah Williams 가 말한대로,

MyAppStatelessWidget 에서 StatefulWidget 로 변경했다면, main에서 호출되므로 핫 리스타트해야합니다.

이것은 라이브 코딩 세션에서 여러 번 설명되었습니다. initState()와 같은 함수에서 변경 사항을 만들 때 앱을 다시 시작해야합니다. MyApp 위젯의 상태 관련 속성을 변경한 경우 해당 변경 사항이 적용되려면 앱을 다시 시작해야합니다.

기본적으로, 앱을 핫 리로드하면 build() 함수를 호출하며, initState()는 앱을 다시 시작할 때만 호출되므로 initState() 함수를 변경한 위젯을 포함하여 모든 것을 다시 초기화합니다.

반응형

댓글