Permanent view with navigation bar in Flutter

前端 未结 1 936
谎友^
谎友^ 2020-12-05 11:45

I have a scenario where I have 2 views:

  • View 1
  • View 2

On a button press from View 1, Navigator.of(context).pushnamed(\'/view2\') is inv

相关标签:
1条回答
  • 2020-12-05 12:34

    You can use the same approach here. Parent widget can have two parts: Navigator and PermanentView. By pushing routes you will change only Navigator widget. Demo:

    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 讨论(0)
提交回复
热议问题