我正在构建一个应用程序,通知用户祈祷时间。我正在使用 adhan 包来计算时间并将其保存在共享首选项中。由于祈祷时间每 24 小时变化一次,因此我使用 Workmanager 获取该特定时间的祈祷时间,并每 20 小时将其保存在共享偏好中。但我面临这个问题,有没有其他或更好的方法可以实现这一目标。
\nLaunching lib/main.dart on ASUS X00T in debug mode...\n\xe2\x9c\x93 Built build/app/outputs/flutter-apk/app-debug.apk.\nConnecting to VM Service at ws://127.0.0.1:44753/d5gE32RyvC4=/ws\nI/.example.notif(14281): Waiting for a blocking GC ProfileSaver\nE/flutter (14281): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Invalid argument(s) (input): Must not be null\n[38;5;244mE/flutter (14281): #0 _RegExp.firstMatch (dart:core-patch/regexp_patch.dart:221:24)[39;49m\n[38;5;244mE/flutter (14281): #1 DateTime.parse (dart:core/date_time.dart:266:23)[39;49m\n[38;5;248mE/flutter (14281): #2 PrayerTime.getFajr[39;49m\nE/flutter (14281): <asynchronous suspension>\n[38;5;248mE/flutter (14281): #3 _GetPrayersPageState.loalData[39;49m\nE/flutter (14281): <asynchronous suspension>\nE/flutter (14281):\nE/cutils-trace(14281): Error opening trace file: No such file or directory (2)\nI/flutter (14281): getAndSavePrayerscallbackDispatcher\nI/flutter (14281): 2021-03-25 13:07:32.419749+0530\nI/flutter (14281): 2021-03-25 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 ios 配置设置为文档\n https://github.com/fluttercommunity/flutter_workmanager/blob/main/IOS_SETUP.md \n此设置有什么问题\n 有此错误:
\nUnhandled Exception: PlatformException(bgTaskSchedulingFailed(Error \nDomain=BGTaskSchedulerErrorDomain Code=3 "(null)") error, Scheduling the task using \nBGTaskScheduler has failed.\n\nThis may be due to too many tasks being scheduled but not run.\n\nSee the error details: Error Domain=BGTaskSchedulerErrorDomain Code=3 "(null)"., null, null)\n#0 StandardMethodCodec.decodeEnvelope \n(package:flutter/src/services/message_codecs.dart:647:7)\n#1 MethodChannel._invokeMethod \n(package:flutter/src/services/platform_channel.dart:294:18)\n<asynchronous suspension>\n#2 Workmanager.registerOneOffTask (package:workmanager/src/workmanager.dart:187:7)\nRun Code Online (Sandbox Code Playgroud)\n这是我的代码\n main\n//本地通知函数如何\nvoid callbackDispatcher() async {\nfinal now = DateTime.now();\nWorkmanager().executeTask((task, inputData) async {\nprefs =等待 SharedPreferences.getInstance();\nif (prefs.getString(\'randomTime\') != null) {\nfinal checkouttime = DateTime.parse(prefs.getString(\'randomTime\')!);\nif (checkouttime .isBefore(now)) {\nNotificationApi.showNotification(\nbody: "\xd9\x85\xd9\x86 \xd9\x81\xd8\xb6\xd9\x84\xd9\x83 \xd9\x82\xd9\x85 \xd8 \xa8\xd8\xaa\xd8\xa7\xd9\x83\xd9\x8a\xd8\xaf \xd8\xaa\xd8\xb3\xd8\xac\xd9\x8a\xd9\x84\xd9\x83",\n标题: "我的应用",\nid: …
我的问题是 flutter Hive 无法从多个隔离区打开。因此,我希望将 workmananger 任务中获取的数据发送到打开配置单元框的主隔离区,并在那里对其进行修改以避免损坏它。我应该考虑应用程序何时处于活动状态以及何时不存在 => 例如,当应用程序不处于活动状态时,我直接编辑配置单元文件,因为它只会在 workmanager 隔离中打开,而如果应用程序不处于活动状态,我会直接编辑配置单元文件将数据发送到主隔离并编辑配置单元文件。我的问题是,我不知道如何跟踪工作管理器任务中的生命周期,也不知道如何将数据发送到主隔离。该问题有任何解决方法或解决方案,或者如何对上述内容进行编码?
我需要通过 flutter workmanager 运行后台任务,但仅在应用程序关闭时运行。如何实现这样的行为。代码示例会很好。提前致谢
也许有人可以分享一些代码示例或解释一下。我使用 WorkManger Flutter 插件。这个想法是制作更新设备上的sqlite db的后台任务。插件工作它正在执行任务,但在 DB 中没有更新,如果我运行直接与 DB 一起工作的方法,它们会工作,所以方法没有问题。看起来我错过了什么。WorkManager 只是不想使用 DB
我在 Android 构建的 MainActivity 类中注册了一个方法通道,当从前台应用程序调用时该方法可以正常工作。
我想从 Workmanager 在后台运行的任务中调用此方法通道,但每次都会收到 MissingPluginException。
我猜这不起作用,因为后台任务不会初始化 MainActivity,但我似乎找不到有关如何在工作管理器可以调用它们的地方注册通道的任何信息。
我的(简化的)设置如下:lib/main.dart:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
Workmanager().registerPeriodicTask('uniquename', 'taskName',
frequency: const Duration(minutes: 15),
constraints: Constraints(networkType: NetworkType.connected));
runApp(const MyApp());
}
void callbackDispatcher() {
Workmanager().executeTask((taskName, inputData) async {
bool result = await DeviceInfoModel().getDeviceInfo();
return Future.value(result);
});
}
Run Code Online (Sandbox Code Playgroud)
lib/device_info.dart:
class DeviceInfoModel extends ChangeNotifier {
static const platform = MethodChannel('deviceInfo');
Future<void> getDeviceInfo() async {
final int result = await platform.invokeMethod('getBatteryLevel');
// And other similar calls to other methods
}
}
Run Code Online (Sandbox Code Playgroud)
android/app/src/main/kotlin/nl/myapp/MainActivity.kt: …
我在 StateFull Widget 中有一个名为 control 的函数。我想每 15 分钟使用 WorkManager 运行一次此函数。
如何从callbackDispatcher函数中调用控制函数?我静态地将 Stream 添加到 Statefull 小部件中,然后监听它,但它不起作用。
HomeScreen.dart 文件
import 'package:flutter/material.dart';
import 'package:workmanager/workmanager.dart';
const taskKontrol = "control";
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Container();
}
@override
void initState() {
super.initState();
setupWorkManager();
}
void control() async
{
//... my code control is here
}
}
void setupWorkManager() async {
await Workmanager.initialize(callbackDispatcher, isInDebugMode: true);
Workmanager.registerPeriodicTask(taskKontrol, taskKontrol,
frequency: Duration(seconds: …Run Code Online (Sandbox Code Playgroud) 我正在使用 Flutter 构建 IOS 和 Android 应用程序。我的应用程序需要在应用程序关闭时运行一个后台任务(假设大约每 15 分钟运行一次)。然后显示通知。我正在关注这篇文章,https://www.geeksforgeeks.org/background-local-notifications-in-flutter/ ?fbclid=IwAR0sKCVATW068AxuRIyDO693vcqwU0VTPVl1bgVkM3J3EGCHExv8P13dvz4 。所以,我正在使用这个库,https://pub.dev/packages/workmanager。它适用于 Android,但不适用于 IOS。
这是我的代码。
void main() {
// needed if you intend to initialize in the `main` function
WidgetsFlutterBinding.ensureInitialized();
Workmanager().initialize(
// The top level function, aka callbackDispatcher
callbackDispatcher,
// If enabled it will post a notification whenever
// the task is running. Handy for debugging tasks
isInDebugMode: true
);
// Periodic task registration
Workmanager().registerPeriodicTask(
"2",
//This is the value that will be
// returned in the callbackDispatcher …Run Code Online (Sandbox Code Playgroud)