如何使用标题和ListTile制作ListView?

时间:2019-10-02 19:52:01

标签: listview indexing flutter header

我有ListView,需要在当前位置(索引)插入几个标题。 但是,如果我使用来自涛涛的方法,但我的索引不正确,那么我将从列表中丢失第一名和最后一名...

如果我添加itemCount:_list.length + 1,后一个索引-= 1;我的第一部分正确,但不适用于下一个标题。

---
title: "Report"
date: "`r format(Sys.time(), '%d %B, %Y')`"
always_allow_html: yes
output: 
  pdf_document:
    fig_caption: yes
    keep_tex: yes
    toc: true
    toc_depth: 2
params:
  Text1: 'NULL'
  Image1: 'NULL'

---
(1) `r params$Text1`  

`r params$Image1`  


那么如何纠正索引数字并显示带有插入标题的列表中的所有项目。

1 个答案:

答案 0 :(得分:0)

您可以使用this方法...

创建代表不同项目类型(HeaderItemMessageItem)的类,然后将_list映射到项目列表(您需要在{{1}中包含标头值) }!-例如,您可以做_list,最后使用_list.insert(18, "Part 2:...")

完整示例:

ListView.builder

带有复选框的示例:

import 'package:flutter/material.dart'; void main() { final _list = List<String>.generate(100, (index) => "$index"); _list.insert(0, "Part 1:..."); _list.insert(18, "Part 2:..."); _list.insert(49, "Part 3:..."); final List<ListItem> items = _list.map((value) { final index = _list.indexOf(value); if ([0, 18, 49].contains(index)) { return HeaderItem(value); } else { return MessageItem(value); } }).toList(); runApp( MaterialApp( home: App(items: items), ), ); } class App extends StatelessWidget { final List<ListItem> items; const App({Key key, this.items}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: ListView.builder( itemCount: items.length, itemBuilder: (context, index) { final item = items[index]; if (item is HeaderItem) { return Column( children: <Widget>[ Text( item.heading, ), Divider(), ], ); } else if (item is MessageItem) { return ListTile( leading: Text('$index'), title: Text( item.title, style: TextStyle(fontSize: 18), ), ); } }, ), ); } } abstract class ListItem {} class HeaderItem implements ListItem { final String heading; HeaderItem(this.heading); } class MessageItem implements ListItem { final String title; MessageItem(this.title); } 现在为AppStatefulWidget具有MessageItem属性。

checked