簡體   English   中英

MaterialApp 中的導航器 - Flutter

[英]Navigator in MaterialApp - Flutter

我寫了一個簡單的應用程序,當我想在我的build()使用onPressed ,它會拋出這種類型的錯誤:

Navigator operation requested with a context that does not include a Navigator.

誰能告訴我為什么我不能在onPressed()使用導航器?

我該如何解決?

   @override
  Widget build(BuildContext context) {
    // double width = MediaQuery.of(context).size.width;
    return MaterialApp(
      home:Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(50.0),
        child: AppBar(
          title: Image(
            alignment: Alignment.center,
            image: AssetImage('assets/images/logo.png'),
            height: 70.0,
          ),
          centerTitle: true,
          iconTheme: IconThemeData(color: Color.fromRGBO(9, 133, 46, 100)),
            backgroundColor: Colors.white,
            actions: <Widget>[
              IconButton(
                icon: Icon(
                  Icons.person,
                  color: Color.fromRGBO(9, 133, 46, 100),
                  size: 30.0,       
                ),
                onPressed: () {

//HERE

                  Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => LoginScreen()));
                },
              ),
              IconButton(
                icon: Icon(
                  Icons.shopping_cart,
                  color: Color.fromRGBO(9, 133, 46, 100),
                  size: 30.0,
                ),
                onPressed: (){
                  //AND HERE :(
                },
              ),
            ],
        ),
      ),
      body: Builder(

              ...

            ),
          ),
        ),
        floatingActionButton: RawMaterialButton(
            ...
              ),
        drawer: MyDrawer(), 

      ), 
    );
  }
onPressed: _navigate

void _navigate() {
Navigator.push(
    context, MaterialPageRoute(builder: (context) => HomeScreen()));
}

我通過創建新類來修復它

class UserIcon extends StatelessWidget{
  @override
  Widget build(BuildContext context){
    return IconButton(
      icon: Icon(
        Icons.person,
        color: Color.fromRGBO(9, 133, 46, 100),
        size: 30.0,  
      ),
      onPressed: () {
        Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => UserPage()));
      },
    );
  }
}

嘗試創建一個名為 Home 的類並將其用作 MaterialApp 中的 home,而不是直接創建一個 Scaffold。 像這樣,

return: MaterialApp(
home: Home(),
);

進而,

class Home extends StatefulWidget {

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(50.0),
        child: AppBar(
          title: Image(
            alignment: Alignment.center,
            image: AssetImage('assets/images/logo.png'),
            height: 70.0,
          ),
          centerTitle: true,
          iconTheme: IconThemeData(color: Color.fromRGBO(9, 133, 46, 100)),
            backgroundColor: Colors.white,
            actions: <Widget>[
              IconButton(
                icon: Icon(
                  Icons.person,
                  color: Color.fromRGBO(9, 133, 46, 100),
                  size: 30.0,       
                ),
                onPressed: () {

//TRY MY ANSWER

                  Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => LoginScreen()));
                },
              ),
              IconButton(
                icon: Icon(
                  Icons.shopping_cart,
                  color: Color.fromRGBO(9, 133, 46, 100),
                  size: 30.0,
                ),
                onPressed: (){
                  //HOPEFULL IT WORKS :)
                },
              ),
            ],
        ),
      ),
      body: Builder(

              ...

            ),
          ),
        ),
        floatingActionButton: RawMaterialButton(
            ...
              ),
        drawer: MyDrawer(), 

      ), 
    );
  }
}

您收到此錯誤是因為MaterialApp實際上是MyApp的子項。 所以當我們使用“上下文”來構建另一個頁面時, MyAppBuildContext不能使用MaterialApp作為父級。 因此,使用新類通常可以解決此問題!

請告訴它是否不起作用!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM