Flutter 什么';使用令牌实现请求的最佳方式是什么?

Flutter 什么';使用令牌实现请求的最佳方式是什么?,flutter,Flutter,我有一个带有选项卡的屏幕,每个屏幕都实现了AutomaticEpaLiveClientMixin。当我导航到此屏幕(带有选项卡)时,initState中的每个选项卡都会从服务器获取数据,如下所示: fetchData()async{ final token = await getToken();//refresh if it is expired. return fetchData(token); } 我认为最好在一个请求中初始化所有选项卡的数据,因为我只能在一个位置捕获一个已过期的刷

我有一个带有选项卡的屏幕,每个屏幕都实现了AutomaticEpaLiveClientMixin。当我导航到此屏幕(带有选项卡)时,initState中的每个选项卡都会从服务器获取数据,如下所示:

fetchData()async{
  final token = await getToken();//refresh if it is expired.
  return fetchData(token);
}
我认为最好在一个请求中初始化所有选项卡的数据,因为我只能在一个位置捕获一个已过期的刷新令牌和套接字异常

fetchAllData()async{
  final token = await getToken();//refresh if it is expired.
  return fetchAllData(token);
}

您将如何为屏幕和类似的请求构建逻辑?我的方法与您使用的方法类似吗?

我建议您使用提供商()。通过订阅同一个提供者,您将能够重用曾经获取的数据。例如,我使用这种方法(在不同的地方)向我的应用程序提供当前用户:

class UserModel extends ChangeNotifier {
  User _currentUser;

  void setUser(User user) {
    _currentUser = user;
    notifyListeners();
  }

  Future<User> getUser(BuildContext context) async {
    if (_currentUser == null) {
      _currentUser = await getUserRequest(context, hasRedirect: false);
    }
    return _currentUser;
  }
}
class UserModel扩展了ChangeNotifier{
用户\u当前用户;
void setUser(用户){
_当前用户=用户;
notifyListeners();
}
未来getUser(BuildContext上下文)异步{
if(_currentUser==null){
_currentUser=await getUserRequest(上下文,hasRedirect:false);
}
返回当前用户;
}
}

希望它能满足您的需要

您可以将fetchAllData方法添加到包含所有选项卡式小部件的小部件的initState中。然后,您可以将相关数据传递给每个选项卡式小部件的构造函数。这不是最好的解决方案,但应该有效


我还是推荐你。国家管理体系不是包罗万象的,也不是排他性的。根据您的状态显示方式,您可以使用多个状态管理系统。嘿,bloc库已经包含了提供者库。

我使用bloc进行状态管理,在我的问题中,我想知道如何处理令牌请求。创建提供令牌的bloc?我认为这不是一个好的解决方案,但人们如何处理它仍然很有趣。就个人而言,我会选择一个街区,是的。与我的提供者类似,我可能会利用flatter_secure_存储插件()来保存这个令牌,以便在不总是获取令牌的情况下进行查询。只要我的API返回401,我就会重新进行提取。但我现在还没找到更好的方法