zoukankan      html  css  js  c++  java
  • Flutter 路由管理

    普通路由

    Navigator.push()Navigator.pop() 限制太多,不推荐使用

    路由表

    import 'package:flutter/material.dart';
    
    void main() => runApp(MaterialApp(
          routes: {
            "/": (context) => FirstWidget(),
            "second": (context) => SecondWidget()
          },
        ));
    
    class FirstWidget extends StatefulWidget {
      @override
      _FirstWidgetState createState() => _FirstWidgetState();
    }
    
    class _FirstWidgetState extends State<FirstWidget> {
      var _text = "0";
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("First"),
          ),
          body: Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Text(_text),
                RaisedButton(
                  child: Text("Click me"),
                  onPressed: () async {
                    var result = await Navigator.pushNamed(context, "second",
                        arguments: _text);
                    setState(() {
                      _text = result;
                    });
                  },
                )
              ],
            ),
          ),
        );
      }
    }
    
    class SecondWidget extends StatelessWidget {
      SecondWidget({Key key});
    
      @override
      Widget build(BuildContext context) {
        var _text = ModalRoute.of(context).settings.arguments;
        return Scaffold(
          appBar: AppBar(
            title: Text("Second"),
          ),
          body: Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Text(_text),
                RaisedButton(
                  child: Text("Click me"),
                  onPressed: () =>
                      Navigator.pop(context, (int.parse(_text) + 1).toString()),
                )
              ],
            ),
          ),
        );
      }
    }
    

    onGenerateRoute 路由钩子

    相比于命名路由,可以多做一些相关的拦截

    import 'package:flutter/material.dart';
    
    void main() => runApp(MaterialApp(
          debugShowCheckedModeBanner: false,
          onGenerateRoute: (settings) {
            var name = settings.name;
            var args = settings.arguments;
            // Do something here
            switch (name) {
              case '/':
                return MaterialPageRoute(builder: (context) => FirstWidget());
              case "second":
                return MaterialPageRoute(builder: (context) => SecondWidget(args));
              default:
                return MaterialPageRoute(builder: (context) => BlankWidget());
            }
          },
        ));
    
    class FirstWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
              child: RaisedButton(
            child: Text("Click me"),
            onPressed: () => Navigator.pushNamed(context, "second",
                arguments: DateTime.now().microsecondsSinceEpoch.toString()),
          )),
        );
      }
    }
    
    class SecondWidget extends StatelessWidget {
      final String _text;
    
      SecondWidget(this._text);
    
      @override
      Widget build(BuildContext context) {
        return Center(
          child: RaisedButton(
            child: Text(_text),
            onPressed: () => Navigator.pushNamed(context, "not_exists"),
          ),
        );
      }
    }
    
    class BlankWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container(
          color: Colors.red,
        );
      }
    }
    
    
  • 相关阅读:
    常用模板
    pascal 的字符串操作
    war2 洛谷模拟赛day2 t3 状压
    状压搜索 洛谷T47092 作业
    Milking Order
    洛谷九月月赛T1 思考
    C数列下标 牛客OI赛制测试赛2
    钓鱼 洛谷p1717
    机房人民大团结(DP)
    Spark的Straggler深入学习(2):思考Block和Partition的划分问题——以论文为参考
  • 原文地址:https://www.cnblogs.com/seliote/p/12833475.html
Copyright © 2011-2022 走看看