Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在颤振中更新ListView_Flutter - Fatal编程技术网

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();
              }
            },
          );
        );
      }
它将显示一个循环进度指示器,直到所有文件都已读取,然后在完成时显示它们