Untitled
unknown
plain_text
a year ago
7.8 kB
5
Indexable
import 'dart:async'; import 'dart:ffi'; import 'package:alarm/alarm.dart'; import 'package:alarm_example/screens/ring.dart'; import 'package:alarm_example/screens/secound.dart'; import 'package:alarm_example/screens/slotselection.dart'; import 'package:alarm_example/utils/user_preferences.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:permission_handler/permission_handler.dart'; class MyhomeScreen extends StatefulWidget { const MyhomeScreen({Key? key}) : super(key: key); @override State<MyhomeScreen> createState() => _MyhomeScreenState(); } class _MyhomeScreenState extends State<MyhomeScreen> { late List<AlarmSettings> alarms; static StreamSubscription<AlarmSettings>? subscription; int checkingofi = 0; @override void initState() { super.initState(); if (Alarm.android) { checkAndroidNotificationPermission(); setState(() => {}); } loadAlarms(); subscription ??= Alarm.ringStream.stream.listen( (alarmSettings) { navigateToRingScreen(alarmSettings); }, ); } Future<void> checkAndroidNotificationPermission() async { final status = await Permission.notification.status; if (status.isDenied) { alarmPrint('Requesting notification permission...'); final res = await Permission.notification.request(); alarmPrint( 'Notification permission ${res.isGranted ? '' : 'not '}granted.', ); } } void loadAlarms() { setState(() { alarms = Alarm.getAlarms(); alarms.sort((a, b) => a.dateTime.isBefore(b.dateTime) ? 0 : 1); print("listen 5 : ${alarms.length}"); print('check ittt ${alarms}'); newfunc(); }); } void newfunc() async { final checkfirsttime = UserPreferences.getBool(UserPrefKeys.isNotFirstTime); int timesavedbyuser = UserPreferences.getInt(UserPrefKeys.timesavedbyuser) ?? 0; final savedTime = DateTime.fromMillisecondsSinceEpoch(timesavedbyuser); checkingofi = UserPreferences.getInt(UserPrefKeys.ivalueofloop) ?? 0; int checklastdate = UserPreferences.getInt(UserPrefKeys.confirmationcall) ?? 0; final savedlastdate = DateTime.fromMillisecondsSinceEpoch(checklastdate); DateTime dateTimecurrent = DateTime( DateTime.now().year, DateTime.now().month, DateTime.now().day, savedTime.hour, savedTime.minute, ); DateTime dateTimenow = DateTime.now(); DateTime lastUpdatedDate = DateTime.fromMillisecondsSinceEpoch( UserPreferences.getInt(UserPrefKeys.lastUpdatedDate) ?? 0); var dateTimeaftertendays = dateTimecurrent.add(const Duration(days: 10)); if (checkfirsttime) { print('$lastUpdatedDate'); if (dateTimenow.isBefore(dateTimeaftertendays)) { if (checkingofi == 1) { print('afv'); getSavedTImeAndSetAlarmForTenDays(); checkingofi = 2; changeValueOfI(checkingofi); } else if (checkingofi >= 2) { if (dateTimenow.day != lastUpdatedDate.day && checkingofi > 1) { print('lastUpdatedDate $lastUpdatedDate.day'); print('dateTimenow $dateTimenow.day'); checkingofi = checkingofi + 1; print('checkingofi value $checkingofi'); changeValueOfI(checkingofi); } } lastUpdatedDate = dateTimenow; UserPreferences.setInt( UserPrefKeys.lastUpdatedDate, dateTimenow.millisecondsSinceEpoch); setState(() {}); } if (dateTimeaftertendays == dateTimenow || dateTimenow.isAfter(dateTimeaftertendays)) { getSavedTImeAndSetAlarmForTenDays(); checkingofi = 2; changeValueOfI(checkingofi); lastUpdatedDate = dateTimenow; UserPreferences.setInt( UserPrefKeys.lastUpdatedDate, dateTimenow.millisecondsSinceEpoch); setState(() {}); } } } //yeh kaam kar gya ha!! void getSavedTImeAndSetAlarmForTenDays() async { int timesavedbyuser = UserPreferences.getInt(UserPrefKeys.timesavedbyuser) ?? 0; final savedTime = DateTime.fromMillisecondsSinceEpoch(timesavedbyuser); for (var i = 1; i < 11; i++) { DateTime dateTimecurrentnew = DateTime( DateTime.now().year, DateTime.now().month, DateTime.now().day, savedTime.hour, savedTime.minute, ).add(Duration(days: i)); print('inside -- $dateTimecurrentnew'); final alarmSettings = AlarmSettings( id: DateTime.now().millisecondsSinceEpoch % 10000, dateTime: dateTimecurrentnew, assetAudioPath: 'assets/marimba.mp3', notificationTitle: 'Alarm ringing !', notificationBody: 'Periodic alarm ringing, day ${dateTimecurrentnew.day}.', enableNotificationOnKill: true, androidFullScreenIntent: true, vibrate: true, loopAudio: true, ); await Alarm.set( alarmSettings: alarmSettings, ); // If the alarm was already set, it will just override it } } void saveAlarm({ AlarmSettings? settings, required DateTime dateTime, }) { final alarm = buildAlarmSettings( settings: settings, dateTime: dateTime, ); Alarm.set(alarmSettings: alarm); } AlarmSettings buildAlarmSettings({ AlarmSettings? settings, required DateTime dateTime, }) { final id = settings == null ? DateTime.now().millisecondsSinceEpoch % 10000 : settings.id; final alarmSettings = AlarmSettings( id: id, dateTime: dateTime, assetAudioPath: 'assets/marimba.mp3', notificationTitle: 'Alarm example', notificationBody: 'Your alarm ($id) is ringing', enableNotificationOnKill: true, androidFullScreenIntent: true, vibrate: true, loopAudio: true, ); return alarmSettings; } Future<void> navigateToRingScreen(AlarmSettings alarmSettings) async { await Navigator.push( context, MaterialPageRoute( builder: (context) => ExampleAlarmRingScreen(alarmSettings: alarmSettings), ), ); loadAlarms(); } void changeValueOfI(int newValue) { UserPreferences.setInt(UserPrefKeys.ivalueofloop, newValue); final abc = UserPreferences.setInt(UserPrefKeys.ivalueofloop, newValue); print('$abc'); setState(() { checkingofi = newValue; }); } @override void dispose() { subscription?.cancel(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Mehar'), ), body: ListView( children: [ Text(' value of i - $checkingofi'), ListTile( title: const Text('ALARM TILE'), onTap: () { final isNotFirst = UserPreferences.getBool(UserPrefKeys.isNotFirstTime); if (isNotFirst) { Navigator.push( context, MaterialPageRoute( builder: (context) => const SecoundScreen(), ), ); } else { Navigator.push( context, MaterialPageRoute( builder: (context) => const TimeSlotSelectionScreen(), ), ); } }, ), ], )); } }
Editor is loading...
Leave a Comment