background notifications
This commit is contained in:
@@ -35,6 +35,8 @@ android {
|
|||||||
// TODO: Add your own signing config for the release build.
|
// TODO: Add your own signing config for the release build.
|
||||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||||
signingConfig = signingConfigs.debug
|
signingConfig = signingConfigs.debug
|
||||||
|
minifyEnabled false
|
||||||
|
shrinkResources false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
|
||||||
<application
|
<application
|
||||||
android:label="ToDo"
|
android:label="ToDo"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
@@ -45,4 +44,6 @@
|
|||||||
<data android:mimeType="text/plain"/>
|
<data android:mimeType="text/plain"/>
|
||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
+37
-29
@@ -1,28 +1,25 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:todoapp/elems/filehandler.dart';
|
import 'package:todoapp/elems/filehandler.dart';
|
||||||
import 'package:todoapp/pages/Home.dart';
|
import 'package:todoapp/pages/Home.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:todoapp/providers/todoprovider.dart';
|
import 'package:todoapp/providers/todoprovider.dart';
|
||||||
import 'package:awesome_notifications/awesome_notifications.dart';
|
import 'package:awesome_notifications/awesome_notifications.dart';
|
||||||
import 'package:workmanager/workmanager.dart';
|
|
||||||
import 'package:disable_battery_optimization/disable_battery_optimization.dart';
|
import 'package:disable_battery_optimization/disable_battery_optimization.dart';
|
||||||
|
import 'package:flutter_background_service/flutter_background_service.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
@pragma('vm:entry-point')
|
@pragma('vm:entry-point')
|
||||||
void callbackDispatcher() {
|
void callbackDispatcher() async {
|
||||||
Workmanager().executeTask((task, inputData) async {
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
AwesomeNotifications().initialize(
|
SharedPreferences.getInstance();
|
||||||
null,
|
print("test1");
|
||||||
[
|
|
||||||
NotificationChannel(
|
|
||||||
channelKey: "reminder_channel",
|
|
||||||
channelName: "Reminders",
|
|
||||||
channelDescription: "Reminder for ToDo")
|
|
||||||
]);
|
|
||||||
|
|
||||||
Map content = await FileHandler.fileContent;
|
Map content = await FileHandler.fileContent;
|
||||||
for (String key in content.keys) {
|
for (String key in content.keys) {
|
||||||
Map list = content[key];
|
Map list = content[key];
|
||||||
for (String title in list.keys) {
|
for (String title in list.keys) {
|
||||||
|
print("test2");
|
||||||
Map current = list[title];
|
Map current = list[title];
|
||||||
DateTime dueTime = DateTime.parse(current["dueTime"]);
|
DateTime dueTime = DateTime.parse(current["dueTime"]);
|
||||||
bool checked = current["checked"];
|
bool checked = current["checked"];
|
||||||
@@ -36,37 +33,48 @@ void callbackDispatcher() {
|
|||||||
id: 10,
|
id: 10,
|
||||||
channelKey: "reminder_channel",
|
channelKey: "reminder_channel",
|
||||||
title: "Task due!",
|
title: "Task due!",
|
||||||
body: "Task $title due in $timeDiff minutes!"
|
body: "Task $title due in $timeDiff minutes!"));
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Future.value(true);
|
}
|
||||||
|
|
||||||
|
@pragma('vm:entry-point')
|
||||||
|
void onStart(ServiceInstance service) {
|
||||||
|
Timer.periodic(const Duration(seconds: 10), (timer) {
|
||||||
|
callbackDispatcher();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> initService() async {
|
||||||
|
final service = FlutterBackgroundService();
|
||||||
|
|
||||||
|
await service.configure(
|
||||||
|
iosConfiguration: IosConfiguration(),
|
||||||
|
androidConfiguration: AndroidConfiguration(
|
||||||
|
onStart: onStart,
|
||||||
|
isForegroundMode: false,
|
||||||
|
autoStart: true,
|
||||||
|
autoStartOnBoot: true
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
service.startService();
|
||||||
|
}
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
|
await AwesomeNotifications().initialize(null, [
|
||||||
AwesomeNotifications().initialize(
|
|
||||||
null,
|
|
||||||
[
|
|
||||||
NotificationChannel(
|
NotificationChannel(
|
||||||
channelKey: "reminder_channel",
|
channelKey: "reminder_channel",
|
||||||
channelName: "Reminders",
|
channelName: "Reminders",
|
||||||
channelDescription: "Reminder for ToDo")
|
channelDescription: "Reminder for ToDo",
|
||||||
|
importance: NotificationImportance.High,
|
||||||
|
)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Workmanager().initialize(
|
await initService();
|
||||||
callbackDispatcher,
|
|
||||||
isInDebugMode: true
|
|
||||||
);
|
|
||||||
|
|
||||||
Workmanager().registerPeriodicTask("check_nots", "nots_check", frequency: Duration(minutes: 15));
|
|
||||||
// Workmanager().registerOneOffTask("test", "test1");
|
|
||||||
|
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -6,7 +6,6 @@ import 'package:todoapp/modules/drawer.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:todoapp/providers/todoprovider.dart';
|
import 'package:todoapp/providers/todoprovider.dart';
|
||||||
import 'package:awesome_notifications/awesome_notifications.dart';
|
import 'package:awesome_notifications/awesome_notifications.dart';
|
||||||
import 'package:workmanager/workmanager.dart';
|
|
||||||
import 'package:disable_battery_optimization/disable_battery_optimization.dart';
|
import 'package:disable_battery_optimization/disable_battery_optimization.dart';
|
||||||
|
|
||||||
|
|
||||||
@@ -19,12 +18,12 @@ class Home extends StatefulWidget {
|
|||||||
|
|
||||||
class _HomeState extends State<Home> {
|
class _HomeState extends State<Home> {
|
||||||
void getPermissions() async {
|
void getPermissions() async {
|
||||||
await DisableBatteryOptimization.showEnableAutoStartSettings("Enable Auto Start", "Follow the steps and enable the auto start of this app");
|
await AwesomeNotifications().isNotificationAllowed().then((isAllowed) {
|
||||||
await DisableBatteryOptimization.showDisableBatteryOptimizationSettings();
|
|
||||||
|
|
||||||
AwesomeNotifications().isNotificationAllowed().then((isAllowed) {
|
|
||||||
AwesomeNotifications().requestPermissionToSendNotifications();
|
AwesomeNotifications().requestPermissionToSendNotifications();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await DisableBatteryOptimization.showEnableAutoStartSettings("Enable Auto Start", "Follow the steps and enable the auto start of this app");
|
||||||
|
await DisableBatteryOptimization.showDisableBatteryOptimizationSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
+101
-5
@@ -89,11 +89,51 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.3"
|
||||||
|
file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file
|
||||||
|
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.0"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_background_service:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: flutter_background_service
|
||||||
|
sha256: d32f078ec57647c9cfd6e1a8da9297f7d8f021d4dcc204a35aaad2cdbfe255f0
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.10"
|
||||||
|
flutter_background_service_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_background_service_android
|
||||||
|
sha256: "39da42dddf877beeef82bc2583130d8bedb4d0765e99ca9e7b4a32e8c6abd239"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.2.7"
|
||||||
|
flutter_background_service_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_background_service_ios
|
||||||
|
sha256: "6037ffd45c4d019dab0975c7feb1d31012dd697e25edc05505a4a9b0c7dc9fba"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.3"
|
||||||
|
flutter_background_service_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_background_service_platform_interface
|
||||||
|
sha256: ca74aa95789a8304f4d3f57f07ba404faa86bed6e415f83e8edea6ad8b904a41
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.1.2"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@@ -264,6 +304,62 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.2"
|
version: "6.1.2"
|
||||||
|
shared_preferences:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: shared_preferences
|
||||||
|
sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.2"
|
||||||
|
shared_preferences_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_android
|
||||||
|
sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.2"
|
||||||
|
shared_preferences_foundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_foundation
|
||||||
|
sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.5.2"
|
||||||
|
shared_preferences_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_linux
|
||||||
|
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.1"
|
||||||
|
shared_preferences_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_platform_interface
|
||||||
|
sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.1"
|
||||||
|
shared_preferences_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_web
|
||||||
|
sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.2"
|
||||||
|
shared_preferences_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_windows
|
||||||
|
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.1"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -333,14 +429,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.5"
|
version: "14.2.5"
|
||||||
workmanager:
|
web:
|
||||||
dependency: "direct dev"
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: workmanager
|
name: web
|
||||||
sha256: ed13530cccd28c5c9959ad42d657cd0666274ca74c56dea0ca183ddd527d3a00
|
sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.2"
|
version: "1.0.0"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
+2
-1
@@ -42,9 +42,10 @@ dev_dependencies:
|
|||||||
provider:
|
provider:
|
||||||
path_provider:
|
path_provider:
|
||||||
awesome_notifications:
|
awesome_notifications:
|
||||||
workmanager:
|
flutter_background_service:
|
||||||
android_intent_plus:
|
android_intent_plus:
|
||||||
disable_battery_optimization:
|
disable_battery_optimization:
|
||||||
|
shared_preferences:
|
||||||
|
|
||||||
# The "flutter_lints" package below contains a set of recommended lints to
|
# The "flutter_lints" package below contains a set of recommended lints to
|
||||||
# encourage good coding practices. The lint set provided by the package is
|
# encourage good coding practices. The lint set provided by the package is
|
||||||
|
|||||||
Reference in New Issue
Block a user