Flutter:命名路由及传参

763 阅读1分钟
  • 和普通路由相比,命名路由可以对路由进行统一管理
  • 命名路由需要定义在根组件里面 MaterialApp提供了一个routes参数,可以在这个参数里面进行路由配置
    import 'package:flutter/material.dart';
    import 'views/detail.dart';
    import 'views/search.dart';
    
    main(List<String> args) {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
          title:"hello flutter",
          home: MyStackPage(),
          theme: ThemeData(
            primaryColor: Color(0xffbadc58),
            highlightColor: Colors.transparent,
            splashColor: Colors.transparent,
          ),
          routes: {
            '/detail':(context)=>DetailContent('123'),
            '/search':(context)=>SearchPage(),
          },
          // debugShowCheckedModeBanner: false,
        );
      }
    }
    
  • routes参数接受map类型的数据
  • 在button组件的点击事件函数中增加路由跳转的代码
    	import 'package:flutter/material.dart';
        import 'package:douban_demo/views/holiday/holiday.dart';
        import '../detail.dart';
        class Home extends StatelessWidget {
          @override
          Widget build(BuildContext context) {
            return Scaffold(
              appBar: AppBar(
                title: Text("首页"),
                centerTitle: true,
              ),
                body: HomeBody()
            );
          }
        }
    
        class HomeBody extends StatelessWidget {
          @override
          Widget build(BuildContext context) {
            return Container(
                alignment: Alignment.center,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
    
                  children: [
                    RaisedButton(
                      child: Text("普通路由跳转到其他页面"),
                      onPressed: (){
                        Navigator.of(context).push(
                          MaterialPageRoute(builder: (BuildContext context){
                            return Holiday();
                          })
                        );
                      },
                    ),
                    SizedBox(height: 20,),
                    RaisedButton(
                      child: Text("通过普通路由跳转到Detail页面并传递参数"),
                      onPressed: (){
                        Navigator.of(context).push(
                          MaterialPageRoute(builder: (context)=>DetailContent("hello google"))
                        );
                      },
                    ),
                    RaisedButton(
                      child: Text("通过命名路由跳转到Search页面"),
                      onPressed: (){
                        Navigator.pushNamed(context, '/search');
                      },
                    )
                  ],
                ),
            );
          }
        }
    
  • 跳转页面的代码如下
    import 'package:flutter/material.dart';
    
    class SearchPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            centerTitle: true,
            title: Text("我是Searh页面"),
          ),
          body: Center(
            child: Text("我是Search页面"),
          ),
        );
      }
    }