您可以在注册周期任务时,将仓库和块的实例作为输入数据传递,然后在回调Dispatcher方法中进行访问:
final Repository _repository = Repository();
final Bloc _bloc = Bloc();
void main() async {
Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
Workmanager().registerPeriodicTask('uniqueName', 'taskName',
inputData: {'repository': _repository, 'bloc': _bloc},
constraints: Constraints(
networkType: NetworkType.connected,
requiresBatteryNotLow: true,
),
frequency: const Duration(minutes: 5));
runApp(MyApp());
}
@pragma('vm:entry-point')
void callbackDispatcher() {
Workmanager().executeTask((taskName, inputData) {
final Repository repository = inputData['repository'];
final Bloc bloc = inputData['bloc'];
// Use repository and bloc as needed
return Future.value(true);
});
}
您还可以对存储库和阻塞类使用单例模式:
class Repository {
static final Repository _singleton = Repository._internal();
factory Repository() {
return _singleton;
}
Repository._internal();
// Repository methods
}
class Bloc {
static final Bloc _singleton = Bloc._internal();
factory Bloc() {
return _singleton;
}
Bloc._internal();
// Bloc methods
}
void main() async {
Repository();
Bloc();
Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
Workmanager().registerPeriodicTask('uniqueName', 'taskName',
constraints: Constraints(
networkType: NetworkType.connected,
requiresBatteryNotLow: true,
),
frequency: const Duration(minutes: 5));
runApp(MyApp());
}
@pragma('vm:entry-point')
void callbackDispatcher() {
Workmanager().executeTask((taskName, inputData) {
final Repository repository = Repository();
final Bloc bloc = Bloc();
// Use repository and bloc as needed
return Future.value(true);
});
}