Flutter: Future.then () никогда не вызывается - PullRequest
0 голосов
/ 06 января 2020

Я сейчас играю с фьючерсами во флаттере. У меня есть некоторые функции asyn c, которые возвращают объект Future. Я регистрирую Listener для объекта Future с помощью then (), чтобы я мог обновлять пользовательский интерфейс, как только значение приходит.
Но результат пуст, потому что then () возвращается до того, как все заметки будут загружены из файла система.

Future<List<Note>> loadNotes() async { 
 NoteService().findAll().then((result) { 

  result.forEach((note) => print(note.title)); //not printing -> result is emtpty... 

 });
}


//NoteService class
Future<List<Note>> findAll() async {
  return noteRepository.findAll();
}


//NoteRepository class
@override
Future<List<Note>> findAll() async {

  final Directory dir = await directory;

  dir.list().toList().then((List<FileSystemEntity> list) async {
    List<String> paths = List();
    list.forEach((entity) => paths.add(entity.path));

    List<File> _files = List();
    paths.forEach((path) => _files.add(File(path)));

    List<Note> notes = await _extractNotes(_files);
    return Future.value(notes);
 });

 return Future.value(List());    
}

Future<List<Note>> _extractNotes(List<File> _files) async {
List<Note> notes = List();
 _files.forEach((file) {
   String content = file.readAsStringSync();
   print('content: ' + content);   //this is getting printed correctly to the console
   Map<String, dynamic> a = jsonDecode(content);
   if(a.containsKey('codeSnippets')) {
     notes.add(SnippetNoteEntity.fromJson(jsonDecode(content)));
   } else {
     notes.add(MarkdownNoteEntity.fromJson(jsonDecode(content)));
   }
 });
 return Future.value(notes);

}

...