我使用Provider 结合Workmanager。
Workmanager特别适用于定期运行任务,例如定期获取远程数据。
我使用Workmanager在后台接收通知。
但是,当我收到通知时,需要调用Provider中的函数,但我没有上下文。
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) {
-->//// Code to get Notification from MY web get newNotificationData
Provider.of<Auth>(context, listen: false).update_notification(newNotificationData);
return Future.value(true);
});
}
void main() {
Workmanager().initialize(
callbackDispatcher, // The top level function, aka callbackDispatcher
isInDebugMode: true // If enabled it will post a notification whenever the task is running. Handy for debugging tasks
);
Workmanager().registerOneOffTask("1", "simpleTask"); //Android only (see below)
runApp(MyApp());
}
更新 我需要更新当前用户 认证
class Auth extends ChangeNotifier {
bool _isLoggedIn = false;
User? _user;
void update_notification(newNotificationData){
this._user!.notification.add(newNotificationData);
}
void Login(username,password){
//// Code to login and get UserData
this._isLoggedIn = true;
this._user = User.fromJson(data);
}
}
用户模型
class User {
User(
{required this.id,
required this.username,
required this.fullName,
required this.email,
required this.notification});
User.fromJson(Map<String, dynamic> json)
: id = json['id'],
username = json['username'],
fullName = json['fullName'],
email = json['email'],
notification = json['notification'];
final int id;
final String username;
final String fullName;
final String email;
List<dynamic> notification;
Map<String, dynamic> toJson() => {
'id': id,
'username': username,
'fullName': fullName,
'email': email,
'notification': notification,
};
}