Flutter 如何在颤振中更新ListView
我是Flutter 如何在颤振中更新ListView,flutter,Flutter,我是flatter的初学者,我想在加载mandarin目录中的所有文件时更新我的listview。我确信我已经获得了所有文件并将它们添加到测试中,但我不知道我的代码有什么问题,为什么listview没有显示任何内容。有什么想法吗 class _TeachersState extends State<TeachersList> { final _biggerFont = const TextStyle(fontSize: 18.0); List tests =
flatter
的初学者,我想在加载mandarin
目录中的所有文件时更新我的listview
。我确信我已经获得了所有文件并将它们添加到测试中,但我不知道我的代码有什么问题,为什么listview
没有显示任何内容。有什么想法吗
class _TeachersState extends State<TeachersList> {
final _biggerFont = const TextStyle(fontSize: 18.0);
List tests = List();
Widget _buildSuggestions(BuildContext context) {
initTests();
return ListView.builder(
itemCount: tests.length,
padding: const EdgeInsets.all(16.0),
itemBuilder: (context, i) {
if (i.isOdd) return Divider();
return _buildRow(tests[i]);
});
}
void gotoTest(String title) {
Navigator.push(
context, MaterialPageRoute(builder: (context) => TestList(title)));
}
Widget _buildRow(String pair) {
return ListTile(
onTap: () => gotoTest(pair),
title: Text(
pair,
style: _biggerFont,
),
);
}
void initTests() async {
List t = List();
String baseDir = await ExtStorage.getExternalStorageDirectory();
String waDir = "$baseDir/mandarin";
Directory dir = new Directory(waDir);
dir.list().forEach((element) {
t.add(element.path);
});
setState(() {
tests.addAll(t);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("请选择老师")),
body: _buildSuggestions(context),
);
}
}
class\u教师状态扩展状态{
final _biggerFont=const TextStyle(字体大小:18.0);
列表测试=列表();
小部件构建建议(构建上下文){
初始化测试();
返回ListView.builder(
itemCount:tests.length,
填充:常数边集全部(16.0),
itemBuilder:(上下文,i){
如果(i.isOdd)返回分隔符();
返回(测试[i]);
});
}
void gotoTest(字符串标题){
导航器。推(
context,materialpage(builder:(context)=>TestList(title));
}
小部件构建行(字符串对){
返回列表块(
onTap:()=>gotoTest(成对),
标题:正文(
一对
风格:_biggerFont,
),
);
}
void initTests()异步{
List t=List();
String baseDir=await ExtStorage.getExternalStorageDirectory();
字符串waDir=“$baseDir/mandarn”;
Directory dir=新目录(waDir);
dir.list().forEach((元素){
t、 添加(element.path);
});
设置状态(){
测试。添加所有(t);
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“请选择老师")),
正文:(上下文),
);
}
}
您是否尝试过使用FutureBuilder
小部件
检查以下代码:
将快照传递给buildSuggestion方法
Widget _buildSuggestions(BuildContext context, AsyncSnapShot snapshot) {
initTests();
return ListView.builder(
itemCount: snapshot.data.length,
padding: const EdgeInsets.all(16.0),
itemBuilder: (context, i) {
if (i.isOdd) return Divider();
return _buildRow(snapshot.data[i]);
});
}
更改函数返回类型
Future initTests() async {
List t = List();
String baseDir = await ExtStorage.getExternalStorageDirectory();
String waDir = "$baseDir/mandarin";
Directory dir = new Directory(waDir);
dir.list().forEach((element) {
t.add(element.path);
});
setState(() {
tests.addAll(t);
});
return tests;
}
在身体中使用future builder小部件:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("请选择老师")),
body: FutureBuilder(
future: initTests(),
builder: (context, snapshot){
if (snapshot.hasData){
return _buildSuggestions(context, snapshot);
} else {
return CircularProgressIndicator();
}
},
);
);
}
它将显示一个循环进度指示器,直到所有文件都已读取,然后在完成时显示它们