如何在Flutter中更新ListView

问题描述 投票:0回答:2

[很抱歉,我这个愚蠢的问题,我是flutter的新手,作为我的以下代码,当我将listview目录中的所有文件加载时,我想更新mandarin。我确定我已经将所有文件添加到tests中,但是我不知道我的代码有什么问题,为什么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),
        );
      }
    }
flutter
2个回答
0
投票

您不等待_buildSuggestions中的initTests,而且我也将此函数调用放在initState重写中。

  @override
  void initState() async {
  await initTests();
}

0
投票

尝试以完整状态调用它:

@override
void initState(){ 
 super.init();
 initTests();
}

&尝试打印列表tests的值

© www.soinside.com 2019 - 2024. All rights reserved.