2017-08-04 64 views
1

導航欄常駐視圖我有一個場景,其中我有2次:與顫振

  • 視圖1
  • 視圖2

在按鈕按壓從視圖1,Navigator.of (上下文).pushnamed('/ view2')被調用,它將View 2推到屏幕上。在這種情況下,整個畫面從視圖1轉換爲視圖2.

是否有可能有從視圖1轉換到視圖時仍然會停留在屏幕上永久的看法?類似於Soundclould在底部播放控件時的操作方式。無論您導航到哪個屏幕,它總是永久顯示。此圖描繪了我想要實現: enter image description here

在iOS上,我能夠在一個視圖控制器一個ContainerView具有導航控制器來實現這一點,那麼有永久觀點佔據了屏幕的底部正下方的ContainerView

回答

3

你可以在這裏使用同樣的方法。父窗口小部件可以有兩部分:導航器和永久視圖。通過推送路線,您將只更改導航器小部件。 演示:

import 'package:flutter/material.dart'; 

class MyApp extends StatefulWidget { 
    @override 
    _MyAppState createState() => new _MyAppState(); 
} 

class _MyAppState extends State<MyApp> { 
    Route _onRoute(RouteSettings settings) { 
    final str = settings.name.split("/")[1]; 
    final index = int.parse(str, onError: (s) => 0); 

    return new MaterialPageRoute(
     builder: (BuildContext context) => new Home(index: index)); 
    } 

    @override 
    Widget build(BuildContext context) { 
    return new Column(
     children: <Widget>[ 
     new Expanded(
      child: new MaterialApp(
      title: 'Flutter Demo', 
      onGenerateRoute: _onRoute, 
     ), 
     ), 
     new Container(
      height: 44.0, 
      color: Colors.blueAccent, 
      child: new Center(
      child: new Text("permanent view"), 
     ), 
     ) 
     ], 
    ); 
    } 
} 

class Home extends StatelessWidget { 
    Home({Key key, this.index}) : super(key: key); 
    final int index; 

    @override 
    Widget build(BuildContext context) => new Scaffold(
     appBar: new AppBar(
      title: new Text("View ${index}"), 
     ), 
     body: new Center(
      child: new Column(
      mainAxisSize: MainAxisSize.min, 
      children: <Widget>[ 
       new Text("View ${index}"), 
       new FlatButton(
        onPressed:() => 
         Navigator.of(context).pushNamed("/${index + 1}"), 
        child: new Text("Push")) 
      ], 
     ), 
     ), 
    ); 
} 

void main() { 
    runApp(
    new MyApp(), 
); 
} 
+0

太棒了!謝謝! – user3217522

+0

如果你已經有了一個'MaterialApp',但是你需要一個你想擁有自己的導航棧的特定頁面,這會怎麼做呢?將'MaterialApp'嵌套在對方中會產生一些時髦的結果... –

+0

您可以爲每個頁面創建新的導航器。作爲參考來看[試驗例](https://github.com/flutter/flutter/blob/c46347b6df27abdb91b8b7c63e90255fefc86a6e/packages/flutter/test/widgets/routes_test.dart#L193)或[標籤視圖插件](https://開頭github.com/flutter/flutter/blob/9909e773dc66608a866efa7388f39127509d0e1e/packages/flutter/lib/src/cupertino/tab_view.dart#L10) – Mogol