카테고리 없음

[에러 해결][Flutter] Navigator operation requested with a context that does not include a Navigator.

내만 2022. 7. 5. 16:23
728x90
반응형

 

 

 

 

🙆‍♂️오류


플러터를 사용하다보면 이렇게 Navigator 에러가 나옵니다.

그 이유는 현재 받아온 context에서 ScreenA를 찾을 수 없기 때문입니다.

 

 

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  const MyApp({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Center(
        child: ElevatedButton(
          child: Text("Go to ScreenA"),
          onPressed: () {
            Navigator.push(context, MaterialPageRoute(
            builder: (context) => ScreenA()
          ));
          }
        ),
      ),
    );
  }
}

class ScreenA extends StatelessWidget {
  const ScreenA({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text("Hi, there!"),
      ),
    );
  }
}

오류가 난 코드는 이렇습니다. MyApp에서 바로 ScreenA를 불러오려고 하니 에러가 났습니다.

 

 

🙋‍♂️해결


import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  const MyApp({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FirstPage(),
    );
  }
}

class FirstPage extends StatelessWidget {
  const FirstPage({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Center(
        child: ElevatedButton(
          child: Text("Go to ScreenA"),
          onPressed: () {
            Navigator.push(context, MaterialPageRoute(
            builder: (context) => ScreenA()
          ));
          }
        ),
      ),
    );
  }
}

class ScreenA extends StatelessWidget {
  const ScreenA({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text("Hi, there!"),
      ),
    );
  }
}

이렇게 위처럼 FirstPage라는 위젯을 하나 더 만들어줘서 접근 하면

오류없이 위젯을 잘 보여줍니다.

 

이렇게 MaterialApp에서 보여줘야하는데 MaterialApp 밑에 FirstPage와 ScreenA동등한 위치에 있게 해주어야 하나봅니다.

아까는 FirstPage가 MaterialApp에 있었기 때문에 오류가 난 것

728x90
반응형