• 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组件创建的页面。

  • 相关阅读:
    设计模式的原则
    命令模式
    访问者模式
    策略模式
    外观模式
    组合模式
    原型模式
    合并有序数组
    判断二叉树是否对称
    中序遍历二叉树
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072654.html
Copyright © 2020-2023  润新知