gpt4 book ai didi

dart - 如何从目录中获取文件列表并将其传递给 ListView?

转载 作者:行者123 更新时间:2023-12-01 00:23:06 25 4
gpt4 key购买 nike

我从用户的文件夹中获取文件列表。我传输到 ListView.builder 的文件的名称。这是工作,但我认为,这是糟糕的架构。

一个方法 _getFilesFromDir() 调用频率很高。

如何进行正确的列表生成,以免在不改变文件列表的情况下更新界面?

class CharacteristList extends StatefulWidget {
@override
_CharacteristListState createState() => new _CharacteristListState();
}
class _CharacteristListState extends State<CharacteristList> {
List<String> filesList = new List<String>();
List<String> filesL = new List<String>();
@override
void initState() {
super.initState();
filesList = [];
}
Future<List<String>> _getFilesFromDir() async{
filesL = await FilesInDirectory().getFilesFromDir();
setState(() {
filesList = filesL;
});
return filesList;
}
_getFilesCount(){
_getFilesFromDir();
int count = filesList.length;
return count;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: const Text('Список документов'),
),
body: new Column(
children: <Widget>[
new Expanded(
child: new ListView.builder(
//TODO не успевает сформировать список файлов
itemCount: _getFilesCount(),
itemBuilder: (context, index){
return new CharacteristListItem(filesList[index]);
},
),
),
],
),
floatingActionButton: new FloatingActionButton(
onPressed: () {
Navigator.push(context,
new MaterialPageRoute(builder: (context)
=> new StartScreen()),
);},
child: new Icon(Icons.add),
),
);
}
}

最佳答案

不要在 _getFilesCount() 中调用 build()build() 可以非常频繁地调用。在 initState() 中调用它并存储结果而不是一遍又一遍地重新读取。

关于dart - 如何从目录中获取文件列表并将其传递给 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50521274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com