1. 程式人生 > >Flutter:解決首頁跳轉子頁面子頁面依然顯示BottomNavigationBar問題

Flutter:解決首頁跳轉子頁面子頁面依然顯示BottomNavigationBar問題

剛開始接觸flutter時,由於對Flutter的不熟悉,經常出現一些莫名其妙的問題,首頁跳轉子頁面子頁面依然顯示BottomNavigationBar問題就是其中之一。

  • 先來看看效果圖

在這裡插入圖片描述

在這裡插入圖片描述

會發現跳入子頁面後BottomNavigationBar依然顯示,

學過Flutter的同學基本都知道Flutter跳轉使用的是:

 Navigator.of(context).push(new MaterialPageRoute(
                            builder: (ctx) => new ConsultPage()));

但是,在跳轉的是要注意context問題,如果不是首頁,使用當前頁面的context跳轉當然是沒有問題的,但是如果是首頁並且帶有BottomNavigationBar時,就一定要注意context問題了!

如果要解決這個問題,這裡的context就不是當前頁面的context,他需要是當前頁面父類的上下文!

  • 父類傳遞context給當前頁面
_bodys = [new HomePage(context), new MapPage(context), new MemberPage(context),new MorePage(context)];

直接將context使用構造方法的形式傳入。

  • 接收context

//頁面入口(無狀態的部件)
class HomePage extends StatelessWidget {
  /**
   * 父類上下文
   */
  var parentContext;
  HomePage(this.parentContext);
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      theme: new ThemeData(primarySwatch: Colors.blue),
      debugShowCheckedModeBanner: false,
      home: new HomeWidget(this.parentContext),
    );
  }
}

//載入頁面(有狀態的部件)
class HomeWidget extends StatefulWidget {
   /**
   * 父類上下文
   */
  var parentContext;
  HomeWidget(this.parentContext);
  @override
  createState() => new HomeState();
}

在這裡插入圖片描述

這是就可以使用父類上下問了!

Navigator.of(widget.parentContext).push(new MaterialPageRoute(
                            builder: (ctx) => new ConsultPage()));

注意使用widget.parentContext就是父類上下文!!

這是這個問題就解決了!!!!!!

在這裡插入圖片描述