flutter - 如何将 Future 函数中的数据传递给有状态类?
问题描述
我试图在我的有状态类中使用 Future getName() async 中声明的变量 fullName 作为文本,因为我的页面加载该名称应该显示在屏幕上,而不是 Text 小部件 Patient 的值,但无法这样做。尝试了不同的选择,但还没有成功。
class PatientDashboard extends StatefulWidget {
@override
_PatientDashboardState createState() => _PatientDashboardState();
}
Future getName() async {
var id = "26";
var url = baseurl + patientData + id;
var data;
var rest;
print('Calling uri: $url');
// 4
http.Response response = await http.get(url);
// 5
if (response.statusCode == 200) {
data = response.body;
// rest = data['result'] as List;
// print(rest);
//print(data);
} else {
print(response.statusCode);
}
Map<String, dynamic> user = jsonDecode(data);
// var name = user['result']['name'];
String fullName = user['result'][0][0];
print("Name: ${fullName}");
}
class _PatientDashboardState extends State<PatientDashboard> {
@override
void initState() {
super.initState();
getName();
}
Widget build(BuildContext context) {
return
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Welcome',
style: TextStyle(color: Colors.blueAccent)),
Text("Patient",
//'${widget.patientId}',
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w700,
fontSize: 34.0))
],
),
}
解决方案
class PatientDashboard extends StatefulWidget {
@override
_PatientDashboardState createState() => _PatientDashboardState();
}
class _PatientDashboardState extends State<PatientDashboard> {
String fullName;
Future getName() async {
var id = "26";
var url = baseurl + patientData + id;
var data;
var rest;
print('Calling uri: $url');
// 4
http.Response response = await http.get(url);
// 5
if (response.statusCode == 200) {
data = response.body;
// rest = data['result'] as List;
// print(rest);
//print(data);
} else {
print(response.statusCode);
}
Map<String, dynamic> user = jsonDecode(data);
// var name = user['result']['name'];
setState({
fullName = user['result'][0][0];
});
print("Name: ${fullName}");
}
@override
void initState() {
super.initState();
getName();
}
Widget build(BuildContext context) {
return
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Welcome',
style: TextStyle(color: Colors.blueAccent)),
Text("Patient ${widget.patientId}",
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w700,
fontSize: 34.0))
],
),
}
否则你可以使用喜欢
Future<String> getName() async{
....
....
return user['result'][0][0];
}
推荐阅读
- python - 发现超速 - CodingBat
- java - 我想从 Activity 中获取编辑文本数据并在 Fragment 中显示,但它给了我错误
- flutter - 如何使用颤振在网页视图中打开pdf文档
- jquery - Jquery JSON.parse 数组键序列被更改
- autodesk-forge - 视图集合中可以有不同数量的对象吗?
- jquery - 使用 select2 和 ajax 的 Rails 自动完成不会弹出任何数据
- laravel - Laravel / Vue Passport (SPA) - 将令牌存储到 cookie
- sql - BI Publisher - BI Publisher 中带有参数的 SQL LIKE 语句
- javascript - vue.js 代码、模板和 css 在单独的文件中
- c# - 让外部库绘制到 WPF 面板上?