awesome-notifications poc

This commit is contained in:
Joshua Burman
2024-12-10 21:39:42 -05:00
parent 54d47245ae
commit cfb7f39304
5 changed files with 92 additions and 25 deletions

View File

@ -1,10 +1,9 @@
import 'package:drift/drift.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sendtrain/database.dart';
import 'package:sendtrain/models/activity_timer_model.dart';
import 'package:sendtrain/screens/activities_screen.dart';
import 'package:sendtrain/screens/sessions_screen.dart';
import 'package:awesome_notifications/awesome_notifications.dart';
class SendTrain extends StatelessWidget {
const SendTrain({super.key});
@ -21,6 +20,10 @@ class SendTrain extends StatelessWidget {
class App extends StatefulWidget {
const App({super.key});
static final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
static const String name = 'Awesome Notifications - Example App';
static const Color mainColor = Colors.deepPurple;
@override
State<App> createState() => _AppState();
}
@ -167,6 +170,28 @@ void main() {
// database
// .into(database.objectMediaItems)
// .insert(ObjectMediaItemsCompanion.insert(objectId: 1, mediaId: 1));
WidgetsFlutterBinding.ensureInitialized();
AwesomeNotifications().initialize(
// set the icon to null if you want to use the default app icon
null,
[
NotificationChannel(
channelGroupKey: 'activity_progress_group',
channelKey: 'activity_progress',
channelName: 'Activity Progress notifications',
channelDescription: 'Notification channel for Activity progression',
defaultColor: Color(0xFF9D50DD),
ledColor: Colors.white,
importance: NotificationImportance.Max,
)
],
// Channel groups are only visual and are not required
channelGroups: [
NotificationChannelGroup(
channelGroupKey: 'activity_progress_group',
channelGroupName: 'Activity Progress group')
],
debug: true);
runApp(
ChangeNotifierProvider(

View File

@ -1,5 +1,6 @@
import 'dart:async';
import 'package:awesome_notifications/awesome_notifications.dart';
import 'package:flutter/material.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import 'package:sendtrain/models/activity_model.dart';
@ -27,6 +28,41 @@ class ActivityTimerModel with ChangeNotifier {
double get progress => _progress;
int get totalTime => _totalTime;
void createNotification() {
AwesomeNotifications().isNotificationAllowed().then((isAllowed) {
if (!isAllowed) {
// This is just a basic example. For real apps, you must show some
// friendly dialog box before call the request method.
// This is very important to not harm the user experience
AwesomeNotifications().requestPermissionToSendNotifications();
}
});
AwesomeNotifications().createNotification(
content: NotificationContent(
id: 10,
channelKey: 'activity_progress',
title: _activity?.title,
body: _activity?.description,
category: NotificationCategory.Workout,
// payload: {
// 'file': 'filename.txt',
// 'path': '-rmdir c://ruwindows/system32/huehuehue'
// },
notificationLayout: NotificationLayout.ProgressBar,
progress: _progress,
locked: true));
// AwesomeNotifications().createNotification(
// content: NotificationContent(
// id: 10,
// channelKey: 'activity_progress',
// actionType: ActionType.Default,
// title: _activity?.title,
// body: _activity?.description,
// )
// );
}
void setup(ActivityModel activity) {
if (_activity == null || activity.id != _activity?.id) {
_periodicTimer?.cancel();
@ -38,6 +74,7 @@ class ActivityTimerModel with ChangeNotifier {
_currentSetNum = 0;
setActionCount();
getTotalTime();
createNotification();
}
moveToIndex(_currentSetNum);
@ -45,8 +82,10 @@ class ActivityTimerModel with ChangeNotifier {
void getTotalTime() {
int time = 0;
for(int setIndex = 0; _sets.length > setIndex; setIndex++) {
for (int actionIndex = 0; _sets[setIndex].length > actionIndex; actionIndex++) {
for (int setIndex = 0; _sets.length > setIndex; setIndex++) {
for (int actionIndex = 0;
_sets[setIndex].length > actionIndex;
actionIndex++) {
var action = _sets[setIndex][actionIndex];
if (action['type'] == 'seconds') {
time = time + action['amount'] as int;
@ -112,6 +151,7 @@ class ActivityTimerModel with ChangeNotifier {
setActionCount();
}
updateProgress();
createNotification();
}
notifyListeners();