Flutter的教程:ListView
本文学习一下列表widget,是最常见的需求
在Flutter中,用ListView来显示列表项,支持垂直和水平方向展示,通过一个属性我们就可以控制其方向
1.水平的列表
2.垂直的列表
3.数据量非常大的列表
4.内置的ListTile(挺好用的)
4.内置的ListTile(挺好用的),先看下这个widget,在下面的listView中将直接使用
/**
* ListTile
*/
import 'package:flutter/material.dart'; void main() {
runApp(new MyApp());
} class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: "ListTile",
home: new Scaffold(
appBar: new AppBar(
title: new Text("ListTile"),
),
body: new MyCard(),
),
);
}
} class MyCard extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new MyCardState();
}
} class MyCardState extends State<MyCard> {
var _throwShotAway = false; @override
Widget build(BuildContext context) {
return new Card(
child: new ListTile(
title: new Text("duo_shine"),
subtitle: new Text("duo_shine@163.com"),
//之前显示icon
leading: new Icon(Icons.email, color: Colors.blueAccent),
//之后显示checkBox
trailing: new Checkbox(
value: _throwShotAway,
onChanged: (bool newValue) {
setState(() {
_throwShotAway = newValue;
});
})),
);
}
}
我们只关注ListTile即可,虽然组合了Card(Android的cardView)还有checkBox等widget,包括列表的点击事件等(ps:ListTile中有点击的监听onTap),这些后续我们将单独学习,当前我们在学习列表项展示
运行:
2.垂直的列表
import 'package:flutter/material.dart';
import 'package:meta/meta.dart'; void main() {
runApp(new MyApp());
} /**
* 垂直listView
*/
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = 'list';
return new MaterialApp(
title: title,
home: new Scaffold(
appBar: new AppBar(
title: new Text(title),
),
body: new Center(
child: new ListView(
//控制方向 默认是垂直的
// scrollDirection: Axis.horizontal,
children: <Widget>[
_getContainer('Maps', Icons.map),
_getContainer('phone', Icons.phone),
_getContainer('Maps', Icons.map),
],
),
),
),
);
} /**
* 抽取item项
*/
Widget _getContainer(String test, IconData icon) {
return new Container(
width: 160.0,
// ListTile
child: new ListTile(
// 显示在title之前
leading: new Icon(icon),
// 显示在title之后
trailing: new Icon(icon),
title: new Text(test),
subtitle:new Text("我是subtitle") ,
),
);
}
}
运行:
1.水平的列表
void main() {
runApp(new MyApp());
}
/**
* 垂直listView
*/
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = 'list';
return new MaterialApp(
title: title,
home: new Scaffold(
appBar: new AppBar(
title: new Text(title),
),
body: new Center(
child: new ListView(
//控制方向 默认是垂直的
scrollDirection: Axis.horizontal,
children: <Widget>[
_getContainer('Maps', Icons.map),
_getContainer('phone', Icons.phone),
_getContainer('Maps', Icons.map),
],
),
),
),
);
}
/**
* 抽取item项
*/
Widget _getContainer(String test, IconData icon) {
return new Container(
width: 160.0,
// ListTile
child: new ListTile(
// 显示在title之前
leading: new Icon(icon),
title: new Text(test),
),
);
}
}
运行:
3.数据量非常大的列表
import 'package:flutter/material.dart';
import 'package:meta/meta.dart'; void main() {
runApp(new MyApp( items: new List<String>.generate(, (i) => "Item $i"),));
} /**
*大量的item 比如上万个
*/
class MyApp extends StatelessWidget {
final List<String> items; MyApp({Key key, @required this.items}) : super(key: key); @override
Widget build(BuildContext context) {
final title = 'Long List'; return new MaterialApp(
title: title,
home: new Scaffold(
appBar: new AppBar(
title: new Text(title),
),
body: new ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return new ListTile(
title: new Text('${items[index]}'),
);
},
),
),
);
}
}

Flutter的教程:ListView的更多相关文章
- Flutter入门教程(四)第一个flutter项目解析
一.创建一个Flutter工程 1.1 命令行创建 首先我们找一个空目录用来专门存放flutter项目,然后在路径中直接输入cmd: 使用 flutter create <projectname ...
- flutter安装教程(win7)
本文是在安装flutter的时候,所遇到的问题参考的各个文档整理集合.此次是在win7上安装的问题记录.因为当初安装的时候针对win7的文档比较少,而且各个文档的解释比较散,本人遇到问题也是找了很久才 ...
- flutter中的listview的使用
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends Statele ...
- flutter Dialog里ListView的问题
showDialog( context: context, builder: (ctx) { return // Dialog( // child: Container( // padding: Ed ...
- Flutter安装教程
前言 自Flutter beta版发布, 经过几个月的发展, 它已成为了github社区开源项目活跃度的Top50.加上近日Google的Flutter Live 2018全球同步直播宣传,与 Flu ...
- flutter简易教程
跟Java等很多语言不同的是,Dart没有public protected private等关键字,如果某个变量以下划线 _ 开头,代表这个变量在库中是私有的.Dart中变量可以以字母或下划线开头,后 ...
- 【Flutter 3-5】Flutter进阶教程——在Flutter中使用Lottie动画
作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) Lottie动画 在移动开发中总是需要展示一些动画特效,作为程序员的我们并不是很擅长用代码做动画,即便是有些动画可以实现,在跨平台的过 ...
- Flutter入门教程(一)Flutter简介
这是Flutter系列第一篇文章,后续会持续更新Flutter相关知识,本篇就主要对于Flutter技术做一个简单的入门介绍 一.Flutter简介 Flutter是谷歌的移动UI框架,可以快速在iO ...
- Flutter入门教程(二)开发环境搭建
学习Flutter,首先需要搭建好Flutter的开发环境,下面我将一步步带领大家搭建开发环境并且成功运行flutter项目. Flutter环境配置主要有这几点: 系统配置要求 Java环境 Flu ...
随机推荐
- 【UOJ#435】【集训队作业2018】Simple Tree 分块+树链剖分
题目大意: 有一棵有根树,根为 1 ,点有点权.现在有 m 次操作,操作有 3 种:1 x y w ,将 x 到 y 的路径上的点点权加上 w (其中 w=±1w=±1 ):2 x y ,询问在 x ...
- WebDriverAPI(6)
在指定元素上方进行鼠标悬浮 测试网址 http://www.baidu.com Java语言版本实例 @Test public void roverOnElement() { driver.manag ...
- Scrapy框架--cookie的获取/传递/本地保存
环境:Python3.6 + Scrapy1.4 我要实现的东西:1. 完成模拟登陆 2. 登陆成功后提取出cookie,然后保存到本地cookie.txt文件中 3. ...
- 原生JavaScript的DOM操作方法总结
什么是DOM? DOM即文档对象模型,Document Object Model. 是HTML和XML文档的编程接口.它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从 ...
- EJB3 EntityBean中EntityManager的管理类型
EJB中EntityManager的管理方式有两种:Container-managed EntityManager和Application-managed EntityManager 即容器管理的En ...
- Linq基础知识之延迟执行
Linq中的绝大多数查询运算符都有延迟执行的特性,查询并不是在查询创建的时候执行,而是在遍历的时候执行,也就是在enumerator的MoveNext()方法被调用的时候执行,大说数Linq查询操作实 ...
- ActiveMQ学习--001--ActiveMQ和消息中间件
一.ActiveMQ简介 1,ActiveMQ是什么 ActiveMQ是Apache推出的开源的,完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现的消息中间件(MOM) 2, ...
- Elasticsearch Aggregation 多个字段分组统计 Java API实现
现有索引数据: index:school type:student --------------------------------------------------- {"grade&q ...
- 【链表】Partition List
题目: Given a linked list and a value x, partition it such that all nodes less than x come before node ...
- SPSS学习系列之SPSS Modeler怎么修改默认的内存大小(图文详解)
不多说,直接上干货! 问题来源: 如果你的电脑内存配置比较低的话,会随着数据量增加(尤其是大数据),带不起的情况很有可能发生,会出现一些内存报错... ... 解决办法: 打开“工具”,在modele ...