Flutter学习笔记(四):Listview组件

针对开发中涉及到列表展示数据,flutter提供了listview组件来完整列表展示的功能;

 @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(alignment: Alignment.center, child:ListView(
      children: [
      ],
    ));
  }

从上编代码可以看出listview接受的参数是一个widget的数组,即在此数组中所包含的元素必须为组件(Container,Text,Image,ListTile等等)

  • 静态数据展示

简单数据列表的展示,实现简单文本信息的:

/**
   * listview组件为简单的组件
   * 例如:
   * container,text,image
   */
  ListView _getNormalListView() {
    return ListView(
      children: [
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
      ],
    );
  }

定义简单方法,返回值为ListView,在代码中Widget数组中班汉多个简单的组件(Text);如果在列表中想实现简单的提问混排,则使用ListTile就可以实现:

/**
   * listview组件元素为ListTile
   * ListTile:可以实现图文混排的效果
   */
  ListView _getListTileListView() {
    return ListView(
      children: [
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        ),
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        ),
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        ),
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        ),
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        ),
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        ),
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        ),
        ListTile(
          title: Text("组件为ListTile"),
          subtitle: Text("ListTile"),
          leading: Icon(Icons.home),
          trailing: Icon(Icons.school),
        )
      ],
    );
  }

介于列表的数据比较多,手动的去拼接是一件比较费时间,精力的事情,我们这里可以使用循环的方式来实现数据的构造:

  /**
   * 利用for循环进行展示数据的拼接->静态数据
   */
  List _getStaticWidgets() {
    List list = new List();
    for (var i = 0; i < 20; i++) {
      list.add(ListTile(
        title: Text("这是循环得到的标题$i"),
        subtitle: Text("这是循环得到的自标题$i"),
      ));
    }
    return list;
  }

通过for循环我们就可以迅速的完成多条数据的生成,并且将数据赋值到组件上在Listview
上进行展示;

  • 动态数据展示

以上的数据展示都是简单的静态的数据,接下来我们模拟服务其请求数据,展示在列表伤的操作,在项目根目录创建模拟数据:

List listData = [
  {"title": "《西游记》", "author": "吴承恩"},
  {"title": "《水浒传》", "author": "施耐庵"},
  {"title": "《三国演义》", "author": "罗贯中"},
  {"title": "《红楼梦》", "author": "曹雪芹"},
  {"title": "《大学》", "author": "曾参"},
  {"title": "《中庸》", "author": "子思"},
  {"title": "《论语》", "author": "孔子"},
  {"title": "《孟子》", "author": "孟子"},
];

我们可以讲上述的数据展示在ListView列表上:
1.常规方法展示

  /**
   * 利用for循环进行展示数据的拼接->动态数据
   */
  List _getDynamicWidget() {
    var tempList = listData.map((value) {
      return ListTile(
        title: Text(value["title"]),
        subtitle: Text(value["author"]),
        leading: Icon(Icons.home),
        trailing: Icon(Icons.school),
      );
    });
    return tempList.toList();
  }

我们将listData数据迭代遍历,并且在遍历过程中将数据赋值给组件ListTile上;
2.通过 ListView.builder()的方式来

  /**
   * listview.builder()操作展示数据
   */

  ListView _getListViewByBuilder(BuildContext context) {
    return ListView.builder(
        itemCount: this.list.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(list[index]["title"]),
            subtitle: Text(list[index]["author"]),
          );
        });
  }
  • itemCount 数组的长度
  • itemBuilder 每一个listview条目赋值的操作
    1.context: 重写父类方法是build()的入参;
    2.index : 是遍历集合的角标值
    这里itemBuilder: (context, index)为什么这么写,还是有疑问的,初学带问号,先记着,待以后解决!至此listview垂直方向展示数据已完成,而水平方向列表只需在ListView如参数中添加参数scrollDirection: Axis.horizontal就可以实现水平方向的列表!

你可能感兴趣的:(Flutter学习笔记(四):Listview组件)