0

我是新来的,我想做下面的例子,但我得到了空值!!!

在有状态小部件和脚手架内部,我有一个按钮,其中有一个事件,例如:

onPressed: () {
                 Object json = {'xxx': xxx,};
                 Server_queries sq = Server_queries();
                 print(sq.post('register/', json).toString());

                 String holder = Server_queries().post('register/', json);
                 print(holder.toString());

                 ////Both of them shows 'Null'
              },

这是我的另一堂课:

import 'dart:convert';
import 'package:http/http.dart' as http;


const String server_address = 'xxxx';

class Server_queries {
  String res;

  String post(String link, Object json) {
    var url = server_address + link;
    var body = jsonEncode(json);
    http
        .post(url, headers: {"Content-Type": "application/json"}, body: body)
        .then((http.Response response) {
      if (response.statusCode == 201 || response.statusCode == 200) {
        res = jsonDecode(response.body).toString();
      } else {
        res = response.statusCode.toString();
      }
    });
    return res;
  }

在 post 函数中打印 res 会显示响应,但问题存在于其他类中!!

4

1 回答 1

0

将您的功能更改为异步将解决您的问题。例如

Future<String> post(String link, Object json) async {
  var url = server_address + link;
  var body = jsonEncode(json);
  http.Response response = await http
    .post(url, headers: {"Content-Type": "application/json"}, body: body);
  if (response.statusCode == 201 || response.statusCode == 200) {
    res = jsonDecode(response.body).toString();
  } else {
    res = response.statusCode.toString();
  }
  return res;
}

在 onPressed 事件中使用它就像

onPressed: () async {
             Object json = {'xxx': xxx,};
             Server_queries sq = Server_queries();
             print(await sq.post('register/', json).toString());

             String holder = await Server_queries().post('register/', json);
             print(holder.toString());

             ////Both of them shows 'Null'
          },
于 2020-12-08T13:50:36.707 回答