首页 > 解决方案 > 如何将 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))
                        ],
                      ),
  
    
  }

标签: flutterdart

解决方案


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];
}

推荐阅读