Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to resolve future in dart?

Tags:

flutter

dart

I need to read and write files on Flutter.

Write works, but read not or I think it doesn't because the terminal output is flutter: Instance of 'Future<String>'.

What does it means?

This is the code :

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());
like image 843
Micheal Ross Avatar asked Oct 25 '25 01:10

Micheal Ross


2 Answers

Future<String> is of type Future hence you need to resolve the future, You can either await before printing or use .then() to resolve the Future.

Using await

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

Using .then()

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

Note: There is no need to add extra "await" here on line 2 as you already are awaiting at line 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";
  }
}
like image 115
Yudhishthir Singh Avatar answered Oct 26 '25 19:10

Yudhishthir Singh


Now I got it, I understood what you said me thank you!

I created a new function that mix write and read. The problem is that I called async functions in my program body where I can't use await , I should call them in other async functions to handle them in the right way.

I solved with this :

void _RWHello(String text) async {
writeHello();
print(await readHello());
}
.
.
.
 _RWHello("HelloWorld");
like image 39
Micheal Ross Avatar answered Oct 26 '25 20:10

Micheal Ross



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!