【问题标题】:What's a good approach to handle API calls in Flutter?在 Flutter 中处理 API 调用的好方法是什么?
【发布时间】:2021-10-28 04:45:53
【问题描述】:

好吧,我正在使用 http 的颤振包来处理颤振中的 api 调用。由于我来自js/react/redux 背景,我尝试实施类似的方法。

我创建了一个名为 api 的函数,如下所示,它只是作为包装函数来管理 api 调用,


Future api({
  @required String url,
  @required String method,
  body,
  extra,
}) async {
  try {
    var headers = {
      'Content-Type': 'application/json',
      "Authorization": ' jwt token of user provider'
    };

    var request = http.Request(
        method, Uri.parse("$SERVER_URL${getUrl(url, method, extra)}"));
    if (isSomething(body)) {
      request.body = json.encode(body);
    }
    request.headers.addAll(headers);

    http.StreamedResponse response = await request.send();
    print(response.statusCode);
    var responseBody = await response.stream.bytesToString();
    print(responseBody);
    return responseBody;
  } catch (e) {
    throw e;
  }

但是访问UserProvider 的令牌对我来说似乎很复杂,就像我每次使用它时都必须从我使用api 函数的小部件传递提供程序对象一样。

我的UserProvider 现在看起来像这样:


class UserProvider extends ChangeNotifier {
  String id;
  String name;
  String email;
  String role;
  String jwt;

  void setUser(
      {String id, String name, String email, String role, String jwt}) {
    print("here is called");
    this.id = id;
    this.name = name;
    this.email = email;
    this.role = role;
    this.jwt = jwt;

    notifyListeners();
  }

  Map<String, dynamic> getUser() {
    return {
      "id": this.id,
      "name": this.name,
      "email": this.email,
      "role": this.role,
      "jwt": this.jwt
    };
  }
}

我不知道我是否正确地做这些事情,因为我是 Flutter 的新手。我的问题是:

  1. 如何在api函数中访问User provider的jwt?
  2. 这种方法好不好,如果不好,请提出更好的方法。

【问题讨论】:

  • 如果您从 API 获取数据,请参考我的回答 hereherehere,如果您将数据发布到 API,请参考我的回答 here 希望对您有所帮助

标签: flutter api http dart


【解决方案1】:

你需要在你的api方法中传递BuildContext,然后你可以像这样访问jwt

Provider.of&lt;UserProvider&gt;(context, listen: false).getUser()['jwt']

【讨论】:

  • 没有其他方法可以做到这一点吗?就像创建一个 API 类而不是 api 函数并直接从那里访问提供者。
  • 有几种方法可以实现这一点,您甚至可以创建一个User 类,而不仅仅是传递参数。您的问题是如何访问用户的 jwt。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2016-06-12
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
相关资源
最近更新 更多