Как решить будущее в дротике? - PullRequest
2 голосов
/ 28 мая 2020

Мне нужно читать и записывать файлы на Flutter.

Запись работает, но не читается, или я думаю, что нет, потому что вывод терминала flutter: Instance of 'Future<String>'.

Что это значит означает?

Это код:

Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}

Future<File> get _localFile async {
final path = await _localPath;
return File('$path/hello.txt');
}

Future<File> writeHello() async {
final file = await _localFile;

// Write the file.
return file.writeAsString('HelloWorld');
}

Future<String> readHello() async {
try {
final file = await _localFile;

// Read the file.
return await file.readAsString();

} catch (e) {
// If encountering an error, return 0.
return "Can't read";
  }
}
.
.
.
writeHello();
print(readHello());

Ответы [ 2 ]

5 голосов
/ 28 мая 2020

Future <<strong> String > относится к типу Future, поэтому вам нужно разрешить будущее. Вы можете либо await перед печатью, либо использовать .then() для разрешения Future.

Использование await

String data = await readHello();
print(data);

Использование .then ()

readHello().then((data){ //resolve the future and then print data
  print(data); 
});

Примечание: здесь нет необходимости добавлять дополнительное «ожидание» строка 2, поскольку вы уже ожидаете в строке 1:

Future<String> readHello() async {
try {
final file = await _localFile; //Line 1
// Read the file.
return await file.readAsString(); //Line 2
} catch (e) {
// If encountering an error, return 0.
return "Can't read";
  }
}
1 голос
/ 28 мая 2020

Теперь я понял, я понял, что вы сказали мне спасибо!

Я создал новую функцию, которая смешивает write и read. Проблема в том, что я вызвал async функции в теле моей программы, где я не могу использовать await, я должен вызывать их в других async функциях, чтобы обрабатывать их правильным образом.

Решил вот так:

void _RWHello(String text) async {
writeHello();
print(await readHello());
}
.
.
.
 _RWHello("HelloWorld");
...