Я настоятельно рекомендую вам прочитать о FutureBuilder
.
Вам не хватает точки od FutureBuilder
, потому что это виджет для размещения в дереве виджетов того, что вы сделали помещается в функцию, которая возвращает пустую строку.
Вместо этого вы можете сделать это так:
Future<Widget> _readAndBuildBioWidget(){
return FutureBuilder<String>(
future: _read(),
builder: (context, snapshot){
if (snapshot.hasData) {
bio=snapshot.data.toString(); //this isn't done
return Text(bio ?? "");
}
else {
return Text("Error occured");
}
}
);
return "";
}
@override
void build() {
return Scaffold(
child: _readAndBuildBioWidget(),
);
}
Или вы можете сделать как показано ниже,
class _HomeScreenState extends State<HomeScreen> {
var bio = "";
Future<String> _read() async {
try {
final file = await _localBio;
String body = await file.readAsString();
return body;
} catch (e) {
return "Can't read";
}
}
@override
void initState() {
_read().then((onValue) => bio = onValue);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child: Text(bio ?? "")),
);
}
}
Обратите внимание на фрагмент кода, который я не тестировал. Я просто хотел дать общее представление.