Flutter学习之导航与数据的传输

import 'package:flutter/material.dart';

void main(){
  runApp(MaterialApp(
    title: "导航的数据传输",
    home: ProductList(
      products: List.generate(100, (i)=>Product("ayang的商品 $i","商品详情页面,编号 $i"))
    )
));
}

class  Product {
  final String title;
  final String description;
  Product(this.title,this.description); //使用Product("xx","xx")就会为实例化的对象中的title 和description属性赋值
}

//stlss

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("商品列表"),
        backgroundColor: Colors.pinkAccent,
      ),
      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])));
            },
          );
        }
      ),
    );
  }
}

//stlss
class ProductDetail extends StatelessWidget {
  final Product product;
  ProductDetail({Key key, this.product}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("${product.title}"), backgroundColor: Colors.pinkAccent),
      body: Center(
        child: Text("${product.description}"),
      ),
    );
  }
}

没理解dart语法的类的构造与参数传递的时候理解这个还是有点复杂的,接下来一点一点解析,

void main(){
  runApp(MaterialApp(
    title: "导航的数据传输",
    home: ProductList(
      products: List.generate(100, (i)=>Product("ayang的商品 $i","商品详情页面,编号 $i"))
    )
));
}

这里是一个主函数,他返回了一个MaterialApp,并在home中使用了接下来自己定义的ProductList组件,并且向ProductList的product参数传入了一个通过迭代函数产生的100项的数组,数组的每一项都是个一个创建的Product类(组件),

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("商品列表"),
        backgroundColor: Colors.pinkAccent,
      ),
      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])));
            },
          );
        }
      ),
    );
  }
}

这段代码是继承得到的一个ProductList类,首先定义接收参数的入口

  final List<Product> products;
  ProductList({Key key,@required this.products}):super(key:key);

定义了一个名为products的数组,数组里的的内容必须为Product组件,然后接收参数。

 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])));
            },
          );
        }
      ),

然后使用ListView.build这个创建动态列表的方法,使用itemCount确定列表长度,
itemBuilder: (context,index){return ListTile()}返回列表的项,
使用onTap(){}方法处理点击事件——使用Navigator导航组件

Navigator.push(context, MaterialPageRoute(builder: (context) = > ProductDetail(product: products[index])));

跳转到ProductDetail组件创建的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值