【问题标题】:Getting data to appBar - Flutter获取数据到 appBar - Flutter
【发布时间】:2020-10-11 20:26:47
【问题描述】:

我正在尝试将数据提取到 Appbar 的 api,但坚持等待/异步

我想做什么:

getUserName(id) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();

  String token;
  token = prefs.get('Token');
  String url = "https://apiurl";
  http.post(
    url,
    headers: {'authorization': 'bearer' + token},
    body: {'thread': id.toString()},
  ).then((response) {
    print("Response body: ${response.body}");
    return response.body;
  });
}

我在尝试构建时调用它:

appBar: AppBar(
        title: Text(getUserInfo(widget.id)),    
        ....

但是我最终得到: 未来动态的实例

据我所知,我应该以某种方式等待结果。但是如果我尝试,将不接受等待:

await getUserInfo(widget.id);

【问题讨论】:

  • 我认为你应该在从 post 方法获取值后调用 setState()。
  • 完全不知所措我应该在哪里做?如果有任何机会你可以分享更多的光给它..谢谢:)
  • 字符串标识; value = await getUserInfo(widget.id).then(setState(id = value))
  • @darkness 我不能使用 await ..then 似乎对我也没有帮助,正如我在下面的回复中解释的那样。

标签: flutter dart


【解决方案1】:

首先等待您致电http.post

Future<String> getUserName(id) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();

  String token;
  token = prefs.get('Token');
  String url = "https://apiurl";
  var response = await http.post(
    url,
    headers: {'authorization': 'bearer' + token},
    body: {'thread': id.toString()},
  );

  return response.body
}

然后可以使用这样的东西

// Declare _userInfo at state class level and run this on build or initState
if (_userInfo == null) {
  getUserInfo(id).then((userInfo) => setState(() => _userInfo = userInfo));
}

然后

appBar: AppBar(
    title: Text(_userInfo),

【讨论】:

  • 感谢您的回复。不幸的是,即使在 setState userInfo 中也是空的。尝试将其打印出来而不是设置_userInfo。我在状态类的开头声明 _userInfo 并尝试在构建或 initState 中运行,但都没有帮助。如果我打印出一些信息,似乎没有等待响应。如果我在构建中设置它会导致无限循环,_userInfo 永远不会被设置。 Api 当然会给出正确的响应,getUserInfo() 也是如此
  • 我想念你打电话给http.post的方式。更新了我的答案
  • 谢谢!确实做到了。总的来说,从这个答案中学到了很多东西。再次感谢:)
猜你喜欢
  • 2018-10-09
  • 2020-08-08
  • 2022-12-01
  • 2021-12-18
  • 2018-10-06
  • 1970-01-01
  • 2023-02-05
  • 2021-07-27
  • 2019-05-08
相关资源
最近更新 更多