zoukankan      html  css  js  c++  java
  • 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组件创建的页面。

  • 相关阅读:
    hdu 4970 树状数组 “改段求段”
    hdu 2242 无向图/求用桥一分为二后使俩个bcc点权值和之差最小并输出 /缩点+2次新图dfs
    hdu3715 2-sat+二分
    hdu 3639 有向图缩点+建反向图+搜索
    hdu 3072 有向图缩点成最小树形图计算最小权
    hdu 3061 hdu 3996 最大权闭合图 最后一斩
    hdu 3879 hdu 3917 构造最大权闭合图 俩经典题
    hdu 4738 无向图缩点断桥 // 细节坑题
    hdu3452 无向树去掉最小的边集使任何叶子与根不连通 / 最小割
    hdu 3657 最小割的活用 / 奇偶方格取数类经典题 /最小割
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072654.html
Copyright © 2011-2022 走看看