假设我有一个singleChildScrollView,它的内容是从文件中读取的:
new singleChildScrollView(
padding: new EdgeInsets.all(8.0),
child: new Text(
getTextFromFile(), //<---read from file
style: new TextStyle(
fontWeight: FontWeight.bold,
fontSize: 19.0,
),
));
Future<String> getFileData(String path) async {
return await rootBundle.loadString(path);
}
Future<String> getTextFromFile() async {
return getFileData("test.txt");
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
参数类型'Future'不能分配给参数类型'String'.
如何解决这个问题?
小智 22
使用FutureBuilder应该可以解决您的问题.我修改了你的代码,你可以看到如何使用它.initialData不需要.
@override
Widget build(BuildContext context) {
return new FutureBuilder(
future: getTextFromFile(),
initialData: "Loading text..",
builder: (BuildContext context, AsyncSnapshot<String> text) {
return new SingleChildScrollView(
padding: new EdgeInsets.all(8.0),
child: new Text(
text.data,
style: new TextStyle(
fontWeight: FontWeight.bold,
fontSize: 19.0,
),
));
});
}
Future<String> getFileData(String path) async {
return await new Future(() => "test text");
}
Future<String> getTextFromFile() async {
return getFileData("test.txt");
}
}
Run Code Online (Sandbox Code Playgroud)
Ani*_*753 15
StatefullWidget可以用于此目的.声明成员变量String _textFromFile = ""; 在您的State类中,并使用setState()方法更新其未来解析的值.
我getTextFromFile()从构造函数中调用了您的方法,但您可以从任何地方调用它.
运行代码:
import 'package:flutter/material.dart';
import 'dart:async';
class StatefullWidgetDemo extends StatefulWidget {
@override
_StatefulWidgetDemoState createState() {
return new _StatefulWidgetDemoState();
}
}
class _StatefulWidgetDemoState extends State<StatefullWidgetDemo> {
String _textFromFile = "";
_StatefulWidgetDemoState() {
getTextFromFile().then((val) => setState(() {
_textFromFile = val;
}));
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Stateful Demo'),
),
body: new SingleChildScrollView(
padding: new EdgeInsets.all(8.0),
child: new Text(
_textFromFile,
style: new TextStyle(
fontWeight: FontWeight.bold,
fontSize: 19.0,
),
),
),
);
}
Future<String> getFileData(String path) async {
return "your data from file";
}
Future<String> getTextFromFile() async {
return await getFileData("test.txt");
}
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*sal 12
简单回答=>
调用该函数的类:
@override
Widget build(BuildContext context) {
return new Scaffold(
child: FutureBuilder(
future: function(),
builder: (BuildContext context, AsyncSnapshot<String> text) {
return new Text(text.data);
});
)}
Run Code Online (Sandbox Code Playgroud)
和功能:
Future<String> function() async {
return 'abc';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14248 次 |
| 最近记录: |