簡體   English   中英

在flutter中僅導航一個子小部件

[英]Navigating only one child widget in flutter

我有一個應用程序頁眉和頁腳,我想保持不變,定義為:

我希望它如何在中間小部件之間交換

class MainPage extends StatelessWidget {
    @override
    Widget build(BuildContext context){
        return Column(
        children: [
        Container(child: Header()),
        Container(child: Page1()),
        Container(child: Footer()),
        ]);
    }
}

第 1 頁:

class Page1 extends StatelessWidget {
    @override
    Widget build(BuildContext context){
        return Center(
           child: GestureDetector( 
               child: Text("String"),
               onTap: () => Navigator.of(context)
            .push(MaterialPageRoute(builder: (BuildContext context) =>Page2())))),
    }
}

我希望能夠使用 Navigator 推送或彈出小部件。 以前,我會使用 switch case 和自定義按鈕在頁面之間導航,但要求是在 android 上使用后退按鈕/手勢,所以我必須使用導航器。 但是當我使用導航器時,整個頁面都會更改為 Page2,並且我丟失了頁眉和頁腳。

您可以讓 MainPage 小部件采用子參數

class MainPage extends StatelessWidget {
final Widget child;

MainPage({this.child});

    @override
    Widget build(BuildContext context){
        return Column(
        children: [
        Container(child: Header()),
        Container(child: child),
        Container(child: Footer()),
        ]);
    }
}
class Page1 extends StatelessWidget {
    @override
    Widget build(BuildContext context){
        return Center(
           child: GestureDetector( 
               child: Text("String"),
               onTap: () => Navigator.of(context)
            .push(MaterialPageRoute(
            builder: (BuildContext context) => 
             MainPage(child: Page2()))))),
    }
}

這樣您就可以傳入要顯示的當前頁面。 這是最簡單的方法,但它無法避免不必要的頁眉和頁腳重建。

另一種選擇是使用 ValueListenableBuilder 或 Provider 和 ChangeNotifierProvider 之類的東西來僅重建中間區域,具體取決於您願意去的復雜程度。

暫無
暫無

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

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