Flutter:通过普通路由跳转页面并传递参数

171 阅读1分钟
  • 通过Navigator.of(context).push()跳转页面
  • push方法的参数中调用MaterialPageRoute()
  • MaterialPageRoute()的参数中有个一build参数 这个参数是一个函数 builder: (context)=>DetailContent("hello google") 这个函数返回一个组件对象
  • 在组件对象的构造函数中接受参数,完成参数的传递
  • 使用普通路由页面代码
    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"))
                    );
                  },
                ),
              ],
            ),
        );
      }
    }
    
  • 组件代码
    import 'package:flutter/material.dart';
    
    class DetailContent extends StatelessWidget {
      final String info;
      DetailContent(this.info);
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(this.info),
            centerTitle: true,
          ),
          body: Center(child: Text("这是详情页面内容区")),
        );
      }
    }