列表布局是我们项目开发中最常用的一种布局方式。Flutter 中我们可以通过 ListView 来定义列表项,支持垂直和水平方向展示。通过一个属性就可以控制列表的显示方向。列表有以下分类: 
  • 垂直列表
  • 垂直图文列表
  • 水平列表
  • 动态列表
  • 矩阵式列表

列表参数

在flutter中,类别组件 ListView 包含以下可选参数:

  • scrollDirection:Axis.horizontal 水平列表Axis.vertical 垂直列表
  • padding:内边距
  • resolve:组件反向排序
  • children :列表元素

基本列表

import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('FlutterDemo')),body: HomeContent(),));}
}
class HomeContent extends StatelessWidget {@overrideWidget build(BuildContext context) {// TODO: implement buildreturn ListView(padding: EdgeInsets.all(10),children: <Widget>[Image.network("http://pic18.nipic.com/20120204/8339340_144203764154_2.jpg"),Container(child: Text('我是一个标题',textAlign: TextAlign.center, style: TextStyle(fontSize: 28,),            ),height: 60,padding:EdgeInsets.fromLTRB(0, 10, 0, 10),),Image.network("http://pic1.nipic.com/2009-02-17/200921701719614_2.jpg"),Container(child: Text('我是一个标题',textAlign: TextAlign.center, style: TextStyle(fontSize: 28,),            ),height: 60,padding:EdgeInsets.fromLTRB(0, 10, 0, 10),),Image.network("http://pic9.nipic.com/20100923/2531170_140325352643_2.jpg"),Container(child: Text('我是一个标题',textAlign: TextAlign.center, style: TextStyle(fontSize: 28,),            ),height: 60,padding:EdgeInsets.fromLTRB(0, 10, 0, 10),),Image.network("http://pic37.nipic.com/20140110/17563091_221827492154_2.jpg"),Container(child: Text('我是一个标题',textAlign: TextAlign.center, style: TextStyle(fontSize: 28,),            ),height: 60,padding:EdgeInsets.fromLTRB(0, 10, 0, 10),),],);}
}

在ListView组件中,可以放Container、Text、Image等很多组件,但是通常展示列表的时候,使用的是ListTile组件,这个组件中可以配置标题、二级标题、图片等等。

class HomeContent extends StatelessWidget {@overrideWidget build(BuildContext context) {return ListView(padding: EdgeInsets.all(10),children: <Widget>[ListTile(title: Text('华北黄淮高温持续 南方强降雨今起强势登场',style: TextStyle(fontSize: 24),),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),),ListTile(title: Text('中国13家运营波音737MAX航空公司均已提出索赔场',style: TextStyle(fontSize: 24),),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),),ListTile(title: Text('华中国13家运营波音737MAX航空公司均已提出索赔登场'),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),),ListTile(title: Text('华北黄淮高温雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),),ListTile(title: Text('华北黄淮高温持续 势登场'),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),),ListTile(title: Text('华北黄淮高温起强势登场'),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),),ListTile(title: Text('华北黄淮高雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),),ListTile(title: Text('华北黄淮高温持续 南方强降雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),)],);}
}

还可以在上面的列表中添加图标,文字前面添加图标使用leading,后面添加图标使用trailing

class HomeContent extends StatelessWidget {@overrideWidget build(BuildContext context) {return ListView(padding: EdgeInsets.all(10),children: <Widget>[ListTile(leading:Icon(Icons.settings,size:40),title: Text('华北黄淮高温雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),),ListTile(              title: Text('华北黄淮高温雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),trailing:Icon(Icons.home),),ListTile(leading:Icon(Icons.pages),title: Text('华北黄淮高温雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),),ListTile(leading:Icon(Icons.settings),title: Text('华北黄淮高温雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),),ListTile(leading:Icon(Icons.home,color: Colors.yellow,),title: Text('华北黄淮高温雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),),ListTile(leading:Icon(Icons.pages),title: Text('华北黄淮高温雨今起强势登场'),subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),)],);}
}

除了添加自定义的图标,也可以添加本地和远程图片:

水平列表

在ListView中,可以使用scrollDirection 来控制是水平列表还是垂直列表,默认为垂直列表,当要展示水平列表的时候,需要添加scrollDirection: Axis.horizontal

class HomeContent extends StatelessWidget {@overrideWidget build(BuildContext context) {return Container(height: 180,child: ListView(scrollDirection: Axis.horizontal,children: <Widget>[Container(width: 180.0,           color: Colors.red,),Container(width: 180.0,            color: Colors.orange,child: ListView(children: <Widget>[Image.network("http://pic25.nipic.com/20121205/10197997_003647426000_2.jpg"),Text('我是一个文本')],),),Container(          width: 180.0,color: Colors.blue,),Container(           width: 180.0,color: Colors.deepOrange,),Container(           width: 180.0,color: Colors.deepPurpleAccent,),],),);}
}

需要注意的是,在水平列表中,列表项的高度是等于ListView组件的高度的,也就是说,为ListView组件里面的列表项添加高度是没有用的,所以,如果要控制水平列表的高度,需要在ListView组件的父组件里面设置高度,上面Container里面设置的高度就是用来控制水平列表的高度,垂直列表的宽度同理。

转载于:https://www.cnblogs.com/yuyujuan/p/10963001.html

flutter中的列表组件相关推荐

  1. 在Flutter中嵌入Native组件的正确姿势

    引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择.本文希望向大家介绍AndroidView的使用方式 ...

  2. Flutter中的Scaffold组件

    概述 在开始说明Scaffold组件之前,先大致讲述一下Material Design风格.Material Design也成为纸墨设计风格,是由Google退出的全新的设计语言,这种设计语言旨在为手 ...

  3. Flutter 中的 Image 组件 如何加载网络图片和本地图片

    如下,直接上代码说明: mian(){ runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build( ...

  4. Flutter中Stack层叠组件以及与Align、Positioned组件实现定位布局

    1. Stack 组件 Stack 表示堆的意思,用此组件修饰的子组件会"堆"在一起. 常见属性: 1. alignment  对齐方式: 2. children 子组件: 代码示 ...

  5. Flutter中常用的组件-Expanded

    //将 Row 子部件包装在 Expanded 对象中有助于它水平扩展空间并占用其余的 Row 空间.new Row(children: [//Expanded 是一个小部件,有助于根据主轴扩展 Ro ...

  6. Flutter ListView (动态)列表组件、水平列表组件、图标组件详解

    Flutter ListView (动态)列表组件.水平列表组件.图标组件 Flutter ListView 基础列表组件.水平列表组件.图标组件 列表常见的几种情况: 垂直列表 垂直图文列表 横向列 ...

  7. Flutter 中的常见的按钮组件 以及自 定义按钮组件、FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮

    文章目录 一. Flutter 中的按钮组件介绍 二. Flutter 按钮组件中的一些属性 三. Flutter FloatingActionButton 介绍 四. FloatingActionB ...

  8. 【Flutter 问题系列第 22 篇】在 Flutter 中如何截取屏幕并显示到页面中,以及如何将截图保存到相册

    这是[Flutter 问题系列第 22 篇],如果觉得有用的话,欢迎关注专栏. 关于在 Flutter 中如何截取屏幕,以及如何将截图保存到相册的文章少之又少,即使有,也是错误一大片,有的甚至运行后都 ...

  9. Flutter 中的基本路由

    Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航,并提供了管理堆栈的方法.如:Navigator.push 和 Navigator.pop ...

  10. 【Flutter 问题系列第 71 篇】Flutter 中 Uint8List 和 Image 之间的相互转换

    这是[Flutter 问题系列第 71 篇],如果觉得有用的话,欢迎关注专栏. Flutter 版本:2.5.0,Dart 版本:2.14 因为最近一直在处理照相机.裁剪图片和 OCR 图片识别的功能 ...

最新文章

  1. 2021年高考模拟考成绩查询,2021年湖北省普通高考模拟考试成绩查询
  2. 尚硅谷学习:createElement 方法笔记
  3. python输入任意多个成绩-Python 实现输入任意多个数,并计算其平均值的例子
  4. 2018 SaaS应用大会 掀起SaaS应用新浪潮
  5. 【渝粤题库】陕西师范大学210014幼儿园科学教育作业(高起专)
  6. 计算机安全评估研究综合,计算机网络信息系统安全评价方法研究
  7. PL/SQL NOCOPY限制模式
  8. (26)ESLint一JS代码格式校验
  9. 18 个惊人的 GitHub 仓库
  10. 游戏迷看过来 年末促销买个华为平板 M3可畅玩
  11. LINGO如何使用教育邮箱免费激活
  12. 最新emoji表情代码大全_微信表情包大全 百度输入法让你斗图斗到爽
  13. 计算机机械硬盘容量怎么看,win10系统硬盘容量怎么看?一招查看win10硬盘容量的方法...
  14. kali安装navicat
  15. 内边距怎么设置html,如何设置内边距
  16. nls_lang环境变量linux设置,设置NLS_LANG环境变量
  17. 7月App Store下架逾万款游戏,再度加大版号审核力度
  18. Loongson_2F/ 3A【tftp+u盘】方式安装系统(开机不认u盘)
  19. [征询意见]关于博客园与出版社合作出书
  20. 有什么免费软件可以替代几何画板?

热门文章

  1. JAVA使用反射的方法,参数是数组怎么办?
  2. 头目一天不来,就公然上班睡觉,主管怎么当得
  3. 编程基本功:知识、经历可以获得,能力不可能提升
  4. Freeswitch视频会议终于成功,及提供解决办法
  5. undefined reference to `crypto_get_random'
  6. 回答工作做好了,可能有三种情形
  7. ImportError: No module named tensorrt
  8. 对因果报应和轮回的态度
  9. Adapter(适配)
  10. python中的计时器timeit_python中的计时器:timeit