Flutter学习第2章 ListView Widget 列表组件的动态生成(3)

1,537 阅读1分钟

使用场景
一般列表里面的数据都是动态创建的


1、基本结构

import 'package:flutter/material.dart';

void main() => runApp(MyApp(
    //要调用MyApp需要传入一个list集合
    
    //使用自动生成完成传入,相当与我们已经接收到了1000条记录
    items : new List<String>.generate(1000,(i) => "item $i")
));

class MyApp extends StatelessWidget{
    //接收父类传入的1000条数据
    final List<String> items;
    MyApp({key,@required this.items}) : super(key:key);
    
    @override
    Widget bulid(BuildContext context){
        return MaterialApp(
            title:'组件学习',
            home:Scafold(
                appBar:new AppBar(
                    title:new Text('组件学习')
                ),
                body:new ListView.bulid(
                //拿到参数长度
                    itemCount:items.length,
                //动态生成列表
                itemBuilder:(context,index){
                  return new ListTitle(
                        title:new Text('${items[index]}')
                  )
                };
                
                )
            ),
        );
    }
}


2、List集合类型

List是Dart的集合类型之一,其实你可以把它简单理解为数组(反正我是这么认为的),其他语言也都有这个类型。它的声明有几种方式:

  • var myList = List(): 非固定长度的声明。

  • var myList = List(2): 固定长度的声明。

  • var myList= List():固定类型的声明方式。

  • var myList = [1,2,3]: 对List直接赋值。


1、 接收参数在main方法里面
        void main () => runApp(MyApp(
        //generate第一个参数是次数,第二个是方法
            items: new List<String>.generate(1000, (i)=> "Item $i")
        ));
2、接收父类的参数
final List<String> items;
 MyApp({Key key, @required this.items}):super(key:key);

这是一个构造函数,除了Key,我们增加了一个必传参数,这里的@required意思就必传。:super如果父类没有无名无参数的默认构造函数,则子类必须手动调用一个父类构造函数。

这样我们就可以接收一个传递过来的参数了,当然我们要事先进行声明。


3、动态列表
          ListView.builder()

3、效果展示