Flutter提供的一个通用列表条目结构,为左中右结构。相应位置可插入组件,可以很方便地应对特定的条目。

相关组件

ListView

ListTile的基本表现如下

【leading】: 左侧组件 【Widget】
【title】: 中间上组件 【Widget】
【subtitle】: 中间下组件 【Widget】
【trailing】: 尾组件 【Widget】
【contentPadding】: 内边距 【EdgeInsetsGeometry】
【onLongPress】: 点击事件 【Function()】
27.gif

  1. import 'package:flutter/material.dart';
  2. class CustomListTile extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Container(
  6. margin: EdgeInsets.all(10),
  7. color: Colors.grey.withAlpha(22),
  8. child: ListTile(
  9. leading: Image.asset("assets/images/icon_head.png"),
  10. title: Text("以梦为马"),
  11. subtitle: Text("海子"),
  12. contentPadding: EdgeInsets.all(5),
  13. trailing: Icon(Icons.more_vert),
  14. onLongPress: () => Navigator.of(context).pushNamed('AboutMePage'),
  15. ),
  16. );
  17. }
  18. }

ListTile选中效果和长按事件

【selected】: 是否选中 【bool】
【onTap】: 点击事件 【Function()】
28.gif

import 'package:flutter/material.dart';
class SelectListTile extends StatefulWidget {
  @override
  _SelectListTileState createState() => _SelectListTileState();
}

class _SelectListTileState extends State<SelectListTile> {
  bool _selected = false;

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(10),
      color: Colors.grey.withAlpha(22),
      child: ListTile(
        leading: Image.asset("assets/images/icon_head.png"),
        selected: _selected,
        title: Text("以梦为马"),
        subtitle: Text("海子"),
        contentPadding: EdgeInsets.all(5),
        trailing: Icon(Icons.more_vert),
        onTap: () => setState(() => _selected = !_selected),
      ),
    );
  }
}

ListTile的密排属性

【dense】: 是否密排 【bool】
29.gif

import 'package:flutter/material.dart';
class DenseListTile extends StatefulWidget {
  @override
  _DenseListTileState createState() => _DenseListTileState();
}

class _DenseListTileState extends State<DenseListTile> {
  bool _dense = false;

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(10),
      color: Colors.grey.withAlpha(22),
      child: ListTile(
        leading: Image.asset("assets/images/icon_head.png"),
        title: Text("以梦为马"),
        subtitle: Text("海子"),
        selected: false,
        contentPadding: EdgeInsets.all(5),
        trailing: Icon(Icons.more_vert),
        dense: _dense,
        onTap: () => setState(() => _dense = !_dense),
      ),
    );
  }
}