Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2021-035-CoviDefender
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2021-035
2021-035-CoviDefender
Commits
ed9ff109
Commit
ed9ff109
authored
Aug 01, 2021
by
Indika NK
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added smart notificator with 2 functions , local and push notifications
parent
a5f54e55
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
486 additions
and
7 deletions
+486
-7
android/app/src/main/AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
+6
-0
android/app/src/main/res/drawable-v21/app_notf_icon.png
android/app/src/main/res/drawable-v21/app_notf_icon.png
+0
-0
android/app/src/main/res/drawable/app_notf_icon.png
android/app/src/main/res/drawable/app_notf_icon.png
+0
-0
lib/I_GUIDER/i_guider.dart
lib/I_GUIDER/i_guider.dart
+2
-1
lib/pages/notificator/model/Notification_plugin.dart
lib/pages/notificator/model/Notification_plugin.dart
+310
-0
lib/pages/notificator/ui/LocalNotificationUI.dart
lib/pages/notificator/ui/LocalNotificationUI.dart
+67
-0
lib/pages/notificator/ui/MainNotificationUI.dart
lib/pages/notificator/ui/MainNotificationUI.dart
+70
-0
lib/pages/notificator/ui/NotificationUI.dart
lib/pages/notificator/ui/NotificationUI.dart
+25
-0
lib/pages/notificator/ui/notificator.dart
lib/pages/notificator/ui/notificator.dart
+2
-1
pubspec.yaml
pubspec.yaml
+4
-5
No files found.
android/app/src/main/AndroidManifest.xml
View file @
ed9ff109
...
...
@@ -36,6 +36,12 @@
<category
android:name=
"android.intent.category.DEFAULT"
/>
</intent-filter>
</activity>
<receiver
android:name=
"com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"
>
<intent-filter>
<action
android:name=
"android.intent.action.BOOT_COMPLETED"
></action>
</intent-filter>
</receiver>
<receiver
android:name=
"com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver"
/>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
...
...
android/app/src/main/res/drawable-v21/app_notf_icon.png
0 → 100644
View file @
ed9ff109
364 Bytes
android/app/src/main/res/drawable/app_notf_icon.png
0 → 100644
View file @
ed9ff109
364 Bytes
lib/I_GUIDER/i_guider.dart
View file @
ed9ff109
import
'package:covidefender/pages/heart_rate/heart_rate_screen.dart'
;
import
'package:covidefender/pages/mask_detect/invoker.dart'
;
import
'package:covidefender/pages/notificator/ui/MainNotificationUI.dart'
;
import
'package:covidefender/pages/notificator/ui/notificator.dart'
;
import
'package:covidefender/pages/self_carer/sc_main_screen.dart'
;
import
'package:flutter/cupertino.dart'
;
...
...
@@ -66,7 +67,7 @@ class I_guider extends StatelessWidget {
label:
Text
(
''
,
style:
TextStyle
(
fontWeight:
FontWeight
.
bold
)),
onPressed:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
M
essagingWidget
()
));
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
M
ainNotificationUI
()
));
},
shape:
RoundedRectangleBorder
(
...
...
lib/pages/notificator/model/Notification_plugin.dart
0 → 100644
View file @
ed9ff109
import
'dart:ffi'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_local_notifications/flutter_local_notifications.dart'
;
import
'package:oktoast/oktoast.dart'
;
import
'package:path_provider/path_provider.dart'
;
import
'dart:io'
show
File
,
Platform
;
import
'package:http/http.dart'
as
http
;
import
'package:rxdart/subjects.dart'
;
class
NotificationPlugin
{
//
FlutterLocalNotificationsPlugin
flutterLocalNotificationsPlugin
;
final
BehaviorSubject
<
ReceivedNotification
>
didReceivedLocalNotificationSubject
=
BehaviorSubject
<
ReceivedNotification
>();
var
initializationSettings
;
int
awarenessLevel
=
0
;
NotificationPlugin
.
_
()
{
init
();
}
init
()
async
{
flutterLocalNotificationsPlugin
=
FlutterLocalNotificationsPlugin
();
if
(
Platform
.
isIOS
)
{
_requestIOSPermission
();
}
initializePlatformSpecifics
();
}
initializePlatformSpecifics
()
{
var
initializationSettingsAndroid
=
AndroidInitializationSettings
(
'app_notf_icon'
);
var
initializationSettingsIOS
=
IOSInitializationSettings
(
requestAlertPermission:
true
,
requestBadgePermission:
true
,
requestSoundPermission:
false
,
onDidReceiveLocalNotification:
(
id
,
title
,
body
,
payload
)
async
{
ReceivedNotification
receivedNotification
=
ReceivedNotification
(
id:
id
,
title:
title
,
body:
body
,
payload:
payload
);
didReceivedLocalNotificationSubject
.
add
(
receivedNotification
);
},
);
initializationSettings
=
InitializationSettings
(
initializationSettingsAndroid
,
initializationSettingsIOS
);
}
_requestIOSPermission
()
{
flutterLocalNotificationsPlugin
.
resolvePlatformSpecificImplementation
<
IOSFlutterLocalNotificationsPlugin
>()
.
requestPermissions
(
alert:
false
,
badge:
true
,
sound:
true
,
);
}
setListenerForLowerVersions
(
Function
onNotificationInLowerVersions
)
{
didReceivedLocalNotificationSubject
.
listen
((
receivedNotification
)
{
onNotificationInLowerVersions
(
receivedNotification
);
});
}
setOnNotificationClick
(
Function
onNotificationClick
)
async
{
await
flutterLocalNotificationsPlugin
.
initialize
(
initializationSettings
,
onSelectNotification:
(
String
payload
)
async
{
onNotificationClick
(
payload
);
});
}
Future
<
void
>
showNotification
()
async
{
var
androidChannelSpecifics
=
AndroidNotificationDetails
(
'CHANNEL_ID'
,
'CHANNEL_NAME'
,
"CHANNEL_DESCRIPTION"
,
importance:
Importance
.
Max
,
priority:
Priority
.
High
,
playSound:
true
,
timeoutAfter:
5000
,
styleInformation:
DefaultStyleInformation
(
true
,
true
),
);
var
iosChannelSpecifics
=
IOSNotificationDetails
();
var
platformChannelSpecifics
=
NotificationDetails
(
androidChannelSpecifics
,
iosChannelSpecifics
);
await
flutterLocalNotificationsPlugin
.
show
(
0
,
'Healthy Tips'
,
'Always Keep Your Hands Clean !'
,
//null
platformChannelSpecifics
,
payload:
'New Payload'
,
);
}
// Future<void> showDailyAtTime() async {
// var time = Time(21, 3, 0);
// var androidChannelSpecifics = AndroidNotificationDetails(
// 'CHANNEL_ID 4',
// 'CHANNEL_NAME 4',
// "CHANNEL_DESCRIPTION 4",
// importance: Importance.Max,
// priority: Priority.High,
// );
// var iosChannelSpecifics = IOSNotificationDetails();
// var platformChannelSpecifics =
// NotificationDetails(androidChannelSpecifics, iosChannelSpecifics);
// await flutterLocalNotificationsPlugin.showDailyAtTime(
// 0,
// 'Test Title at ${time.hour}:${time.minute}.${time.second}',
// 'Test Body', //null
// time,
// platformChannelSpecifics,
// payload: 'Test Payload',
// );
// }
// Future<void> showWeeklyAtDayTime() async {
// var time = Time(21, 5, 0);
// var androidChannelSpecifics = AndroidNotificationDetails(
// 'CHANNEL_ID 5',
// 'CHANNEL_NAME 5',
// "CHANNEL_DESCRIPTION 5",
// importance: Importance.Max,
// priority: Priority.High,
// );
// var iosChannelSpecifics = IOSNotificationDetails();
// var platformChannelSpecifics =
// NotificationDetails(androidChannelSpecifics, iosChannelSpecifics);
// await flutterLocalNotificationsPlugin.showWeeklyAtDayAndTime(
// 0,
// 'Test Title at ${time.hour}:${time.minute}.${time.second}',
// 'Test Body', //null
// Day.Saturday,
// time,
// platformChannelSpecifics,
// payload: 'Test Payload',
// );
// }
Future
<
void
>
repeatNotification
()
async
{
RepeatInterval
Freq
;
if
(
awarenessLevel
!=
null
){
print
(
'::: awareness is at :'
+
awarenessLevel
.
toString
());
if
(
awarenessLevel
>=
0
&&
awarenessLevel
<
2
){
Freq
=
RepeatInterval
.
EveryMinute
;
print
(
'::: awareness is 0 - 2'
);
}
else
if
(
awarenessLevel
>=
2
&&
awarenessLevel
<
4
){
Freq
=
RepeatInterval
.
Hourly
;
print
(
'::: awareness is 2 - 3 '
);
}
else
if
(
awarenessLevel
==
4
){
Freq
=
RepeatInterval
.
Daily
;
print
(
'::: awareness is 4'
);
}
else
{
showToast
(
"Awareness level is not compatible , please try again !"
,
duration:
Duration
(
seconds:
2
),
position:
ToastPosition
.
bottom
,
backgroundColor:
Colors
.
black
.
withOpacity
(
0.8
),
radius:
13.0
,
textStyle:
TextStyle
(
fontSize:
18.0
),
);
}
}
else
{
showToast
(
"Awareness level is not Availble !"
,
duration:
Duration
(
seconds:
2
),
position:
ToastPosition
.
bottom
,
backgroundColor:
Colors
.
black
.
withOpacity
(
0.8
),
radius:
13.0
,
textStyle:
TextStyle
(
fontSize:
18.0
),
);
}
var
androidChannelSpecifics
=
AndroidNotificationDetails
(
'CHANNEL_ID 3'
,
'CHANNEL_NAME 3'
,
"CHANNEL_DESCRIPTION 3"
,
importance:
Importance
.
Max
,
priority:
Priority
.
High
,
styleInformation:
DefaultStyleInformation
(
true
,
true
),
);
var
iosChannelSpecifics
=
IOSNotificationDetails
();
var
platformChannelSpecifics
=
NotificationDetails
(
androidChannelSpecifics
,
iosChannelSpecifics
);
await
flutterLocalNotificationsPlugin
.
periodicallyShow
(
0
,
'Tips from COVIDEFENDER :D '
,
'Always Keep Your Hands Clean !'
,
Freq
,
platformChannelSpecifics
,
payload:
'Test Payload'
,
);
}
// Future<void> scheduleNotification() async {
// var scheduleNotificationDateTime = DateTime.now().add(Duration(seconds: 5));
// var androidChannelSpecifics = AndroidNotificationDetails(
// 'CHANNEL_ID 1',
// 'CHANNEL_NAME 1',
// "CHANNEL_DESCRIPTION 1",
// icon: 'secondary_icon',
// sound: RawResourceAndroidNotificationSound('my_sound'),
// largeIcon: DrawableResourceAndroidBitmap('large_notf_icon'),
// enableLights: true,
// color: const Color.fromARGB(255, 255, 0, 0),
// ledColor: const Color.fromARGB(255, 255, 0, 0),
// ledOnMs: 1000,
// ledOffMs: 500,
// importance: Importance.Max,
// priority: Priority.High,
// playSound: true,
// timeoutAfter: 5000,
// styleInformation: DefaultStyleInformation(true, true),
// );
// var iosChannelSpecifics = IOSNotificationDetails(
// sound: 'my_sound.aiff',
// );
// var platformChannelSpecifics = NotificationDetails(
// androidChannelSpecifics,
// iosChannelSpecifics,
// );
// await flutterLocalNotificationsPlugin.schedule(
// 0,
// 'Test Title',
// 'Test Body',
// scheduleNotificationDateTime,
// platformChannelSpecifics,
// payload: 'Test Payload',
// );
// }
// Future<void> showNotificationWithAttachment() async {
// var attachmentPicturePath = await _downloadAndSaveFile(
// 'https://via.placeholder.com/800x200', 'attachment_img.jpg');
// var iOSPlatformSpecifics = IOSNotificationDetails(
// attachments: [IOSNotificationAttachment(attachmentPicturePath)],
// );
// var bigPictureStyleInformation = BigPictureStyleInformation(
// FilePathAndroidBitmap(attachmentPicturePath),
// contentTitle: '<b>Attached Image</b>',
// htmlFormatContentTitle: true,
// summaryText: 'Test Image',
// htmlFormatSummaryText: true,
// );
// var androidChannelSpecifics = AndroidNotificationDetails(
// 'CHANNEL ID 2',
// 'CHANNEL NAME 2',
// 'CHANNEL DESCRIPTION 2',
// importance: Importance.High,
// priority: Priority.High,
// styleInformation: bigPictureStyleInformation,
// );
// var notificationDetails =
// NotificationDetails(androidChannelSpecifics, iOSPlatformSpecifics);
// await flutterLocalNotificationsPlugin.show(
// 0,
// 'Title with attachment',
// 'Body with Attachment',
// notificationDetails,
// );
// }
// _downloadAndSaveFile(String url, String fileName) async {
// var directory = await getApplicationDocumentsDirectory();
// var filePath = '${directory.path}/$fileName';
// var response = await http.get(url);
// var file = File(filePath);
// await file.writeAsBytes(response.bodyBytes);
// return filePath;
// }
// Future<int> getPendingNotificationCount() async {
// List<PendingNotificationRequest> p =
// await flutterLocalNotificationsPlugin.pendingNotificationRequests();
// return p.length;
// }
// Future<void> cancelNotification() async {
// await flutterLocalNotificationsPlugin.cancel(0);
// }
// Future<void> cancelAllNotification() async {
// await flutterLocalNotificationsPlugin.cancelAll();
// }
}
NotificationPlugin
notificationPlugin
=
NotificationPlugin
.
_
();
class
ReceivedNotification
{
final
int
id
;
final
String
title
;
final
String
body
;
final
String
payload
;
ReceivedNotification
({
@required
this
.
id
,
@required
this
.
title
,
@required
this
.
body
,
@required
this
.
payload
,
});
}
\ No newline at end of file
lib/pages/notificator/ui/LocalNotificationUI.dart
0 → 100644
View file @
ed9ff109
import
'package:covidefender/pages/notificator/model/Notification_plugin.dart'
;
import
'package:flutter/material.dart'
;
import
'NotificationUI.dart'
;
class
LocalNotificationScreen
extends
StatefulWidget
{
@override
_LocalNotificationScreenState
createState
()
=>
_LocalNotificationScreenState
();
}
class
_LocalNotificationScreenState
extends
State
<
LocalNotificationScreen
>
{
//
int
count
=
0
;
@override
void
initState
()
{
super
.
initState
();
notificationPlugin
.
setListenerForLowerVersions
(
onNotificationInLowerVersions
);
notificationPlugin
.
setOnNotificationClick
(
onNotificationClick
);
}
@override
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
backgroundColor:
Colors
.
green
,
title:
Text
(
'Local Notifications'
),
),
body:
Center
(
child:
FlatButton
(
onPressed:
()
async
{
await
notificationPlugin
.
showNotification
();
// await notificationPlugin.scheduleNotification();
// await notificationPlugin.showNotificationWithAttachment();
await
notificationPlugin
.
repeatNotification
();
// await notificationPlugin.showDailyAtTime();
// await notificationPlugin.showWeeklyAtDayTime();
// count = await notificationPlugin.getPendingNotificationCount();
// print('Count $count');
// await notificationPlugin.cancelNotification();
// count = await notificationPlugin.getPendingNotificationCount();
// print('Count $count');
},
child:
Text
(
'Send Notification'
),
),
),
);
}
onNotificationInLowerVersions
(
ReceivedNotification
receivedNotification
)
{
print
(
'Notification Received
${receivedNotification.id}
'
);
}
onNotificationClick
(
String
payload
)
{
print
(
'Payload
$payload
'
);
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
coontext
)
{
return
NotificationScreen
(
payload:
payload
,
);
}));
}
}
lib/pages/notificator/ui/MainNotificationUI.dart
0 → 100644
View file @
ed9ff109
import
'package:flutter/material.dart'
;
import
'LocalNotificationUI.dart'
;
import
'notificator.dart'
;
class
MainNotificationUI
extends
StatefulWidget
{
//
final
String
payload
;
MainNotificationUI
({
this
.
payload
});
@override
_NotificationScreenState
createState
()
=>
_NotificationScreenState
();
}
class
_NotificationScreenState
extends
State
<
MainNotificationUI
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
backgroundColor:
Colors
.
green
,
title:
Text
(
'Smart Notifier'
),
),
body:
Center
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
stretch
,
mainAxisAlignment:
MainAxisAlignment
.
end
,
children:
[
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
8
,
8
,
8
,
8
),
child:
SizedBox
(
child:
ElevatedButton
(
style:
ElevatedButton
.
styleFrom
(
primary:
Colors
.
green
[
300
],
elevation:
15
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
12
)
)
),
onPressed:
(){
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
LocalNotificationScreen
()
));
},
child:
Text
(
"Local Notifications"
)),
),
),
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
8
,
8
,
8
,
100
),
child:
SizedBox
(
child:
ElevatedButton
(
style:
ElevatedButton
.
styleFrom
(
primary:
Colors
.
green
[
300
],
elevation:
15
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
12
)
)
),
onPressed:
(){
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
MessagingWidget
()
));
},
child:
Text
(
"Push Notifications"
)),
),
)
],
),
),
);
}
}
lib/pages/notificator/ui/NotificationUI.dart
0 → 100644
View file @
ed9ff109
import
'package:flutter/material.dart'
;
class
NotificationScreen
extends
StatefulWidget
{
//
final
String
payload
;
NotificationScreen
({
this
.
payload
});
@override
_NotificationScreenState
createState
()
=>
_NotificationScreenState
();
}
class
_NotificationScreenState
extends
State
<
NotificationScreen
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
title:
Text
(
'Notifications Screen'
),
),
body:
Center
(
child:
Text
(
widget
.
payload
),
),
);
}
}
lib/pages/notificator/ui/notificator.dart
View file @
ed9ff109
...
...
@@ -51,6 +51,7 @@ class _MessagingWidgetState extends State<MessagingWidget> {
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
backgroundColor:
Colors
.
green
,
title:
Text
(
"Smart - Notificator "
),
),
body:
Container
(
...
...
@@ -64,7 +65,7 @@ class _MessagingWidgetState extends State<MessagingWidget> {
spreadRadius:
5
)
],
gradient:
LinearGradient
(
colors:
[
Colors
.
blue
[
600
],
Colors
.
white
],
colors:
[
Colors
.
green
[
600
],
Colors
.
white
],
begin:
Alignment
.
centerLeft
,
end:
Alignment
.
centerRight
,
),
...
...
pubspec.yaml
View file @
ed9ff109
...
...
@@ -36,7 +36,9 @@ dependencies:
google_fonts
:
^1.1.2
flutter_sms
:
^2.1.1
firebase_messaging
:
^4.0.0+1
rxdart
:
^0.24.1
path_provider
:
^1.6.11
flutter_local_notifications
:
^1.4.4+1
# The following adds the Cupertino Icons font to your application.
...
...
@@ -44,11 +46,8 @@ dependencies:
cupertino_icons
:
^1.0.2
http
:
^0.12.2
#add dependencies for heart rate module
#add dependencies for heart rate module
camera
:
git
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment