• flutter-一般页面导航和返回(传递和接收参数)


    Navigator.push 和 Navigator.pop

    • Navigator.push:是跳转到下一个页面,它要接受两个参数一个是上下文context,另一个是要跳转的函数。

    • Navigator.pop:是返回到上一个页面,使用时传递一个context(上下文)参数,使用时要注意的是,你必须是有上级页面的,也就是说上级页面使用了Navigator.push

    import 'package:flutter/material.dart';
    
    void main (){
      runApp(
        MaterialApp(
          title:'导航演示1',
          home:new FirstScreen()
        )
      );
    }
    
    class FirstScreen extends StatelessWidget{
      @override
      Widget build(BuildContext context){
        return new Scaffold(
          appBar: AppBar(
            title: Text('导航演示'),
          ),
          body: Center(
            child: RaisedButton(
              child: Text('详细页面',
                    style: TextStyle(
                      color: Colors.black
                    )
              ),
              onPressed: (){
                Navigator.push(
                  context,
                  new MaterialPageRoute(
                    builder:(context)=>new SecondScreen()
                  )
                );
              },
            )
          ),
        );
      }
    }
    
    class SecondScreen extends StatelessWidget{
      @override
      Widget build(BuildContext  context){
        return new Scaffold(
          appBar: AppBar(title: Text('详细页面'),),
          body: Center(child: RaisedButton(child: Text('返回'),
              onPressed: (){
                Navigator.pop(context);
              },
          ),),
        );
      }
    }

    传递参数

    import 'package:flutter/material.dart';
    
    //申明一个参数
    class Product{
      final String title; //商品标题
      final String decription; //商品描述
      Product(this.title,this.decription);
    }
    
    void main(){
      runApp(
        MaterialApp(
          title: "商品导航",
          home: ProductList(
            products:List.generate(
              30,
              (i)=>Product("商品 $i","这是个商品详情,编号为:$i")
            )
          )
        )
      );
    }
    
    class ProductList extends StatelessWidget {
      //接收参数
      final List<Product> products;
      ProductList({Key key,@required this.products}):super(key:key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('商品列表'),
          ),
          body: ListView.builder(
            itemCount: products.length,
            itemBuilder: (context,index){
              return ListTile(
                title:Text(products[index].title),
                onTap: (){
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context)=>ProductDetail(product:products[index])
                    )
                  );
                },
              );
            },
          ),
        );
      }
    }
    
    class ProductDetail extends StatelessWidget {
      final Product product;
      ProductDetail({Key key,@required this.product}):super(key:key);
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("${product.title}"),
          ),
          body: Center(
            child: Text(product.decription),
          ),
        );
      }
    }
  • 相关阅读:
    log4net项目中如何配置,以下详解
    对sql进行分页处理(Oracle版)
    Xcode 默认 字体
    iOS tableView seperator 消失问题
    iOS 解决自定义TabBar使用popToRootViewControllerAnimated重叠问题
    Xcode 代码块
    iOS绘制虚线
    iOS 使用系统相册获取选取图片的名称
    iOS 设置导航栏和状态栏为透明黑色
    iOS textfield设置字符间距
  • 原文地址:https://www.cnblogs.com/lxz-blogs/p/13228804.html
Copyright © 2020-2023  润新知