【发布时间】:2022-01-13 06:34:07
【问题描述】:
我目前在我的 Flutter 项目中使用 Provider 来管理我的移动应用的身份验证状态。 AuthProvider 的模型如下:
lib/models/auth_provider.dart
class AuthProvider with ChangeNotifier {
// Some methods and properties are removed for simplicity.
// ...
bool loggedIn;
void allowAccess() {
loggedIn = true;
notifyListeners();
}
void revokeAccess() {
loggedIn = false;
notifyListeners();
}
}
应用程序使用其他类的一些服务来检查身份验证令牌的有效性。
如果令牌不再有效,则另一个类的服务中的方法将需要撤销访问权限:
lib/services/auth_services.dart
import 'package:exampleapp/shared/global_context.dart' as global_context;
class AuthService {
// Some methods and properties are removed for simplicity.
// ...
void checkValidity() {
// ...
if(notValid) {
// Use provider to revoke access
Provider.of<AuthProvider>(
global_context.GlobalContext.globalContext!, listen: false)
.revokeAccess();
}
}
}
为了实现这一点(因为在小部件树之外没有上下文),应用程序使用全局上下文来允许服务文件调用 Provider 方法: lib/shared/global_context.dart
import 'package:flutter/material.dart';
class GlobalContext {
static BuildContext? globalContext;
}
并在可能涉及身份验证状态更改的小部件的构建方法中添加以下行:
global_context.GlobalContext.globalContext = context;
我读到我们不建议在小部件树之外访问 Provider,我认为使用 GlobalContext 不是最佳做法。有没有其他方法可以通过使用 Provider 来做到这一点?
P/S:我还在学习 Flutter,如有需要请在下方评论。
【问题讨论】:
-
在这种情况下,您认为您需要提供者吗?你也可以看看pub.dev/packages/get_it
-
嗨 Ahmad,我很好奇我是否可以使用 Provider 来实现与 Flutter 推荐的 Provider 用于状态管理相同的结果。谢谢你的建议。
标签: flutter dart mobile-application flutter-provider state-management