Flutter 之 ListView 控件

ListTile

ListView 控件为我们提供了一个常用的布局 ListTile ,它的样式固定,使用如下:

class _MyHomePageState extends State<MyHomePage>{

  List<String> items = <String>[
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1',
    'https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1'] ;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: null,
        automaticallyImplyLeading : false,
        title: Text(widget.title),
      ),
      body:new ListView(
        children: ListTile.divideTiles(context: context,tiles: items.map((String item){
          return new ListTile(
            leading: new CircleAvatar(backgroundImage: NetworkImage(item)),
            title: new Text('我是标题'),
            subtitle: new Text('我是内容'),
            trailing: new Icon(Icons.arrow_right,color: Colors.green),
            isThreeLine: false,//subtitle 未到第三行的时候,第三行是否占空间
            dense: false,//true间距更加密集
            contentPadding:EdgeInsets.only(top: 20),//子控件上下左右间距
            enabled:false,
            onTap:(){

            },
            onLongPress:(){

            },
            selected:false,
          );
        })).toList(),//添加ListView控件
      ),
    );
  }
}

效果如下 :

效果图.png

自定义样式

当然也可以不使用 ListTile 样式,也可以把上面的改成自己的样式。如

class _MyHomePageState extends State<MyHomePage> {
  List<String> items = <String>[
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
    'https://s3.ifanr.com/wp-content/uploads/2019/08/versiones-android.jpg!720',
  ];

  Widget newsListTile(BuildContext context, String item, String img) {
    return new Column(
      children: <Widget>[
        new Container(
          child: Text(
            item,
            style: new TextStyle(
              color: Colors.black,
              fontSize: 18,
            ),
          ),
          margin: EdgeInsets.only(left: 20, top: 10, right: 20, bottom: 10),
        ),
        new Container(
          child: Image.network(img),
          margin: EdgeInsets.only(left: 20, top: 10, right: 20, bottom: 20),
        )
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          leading: null,
          automaticallyImplyLeading: false,
          title: Text(widget.title),
        ),
        body: new ListView(
          children: ListTile.divideTiles(
              context: context,
              tiles: items.map((String item) {
                return newsListTile(
                    context, 'Android Q 本来叫【女王蛋糕】,加速手势导航是被迫', item);
              })).toList(),
        ));
  }
}

效果图为:

效果图.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我老是三心二意的做事情,却一心一意的在喜欢你。 看你两秒,喜欢上你一分钟,三天跟你说喜欢。当初想着喜欢你多不过一周...
    三水奚阅读 1,274评论 0 0
  • 此刻的我呢,正听着yy,蒸着脸,没有天生丽质的皮肤,脸上的皮肤很不好,所以一周两次的深度护肤开始了 最近在看人性的...
    NeverAn阅读 1,111评论 0 0