- import 'package:firebase_core/firebase_core.dart';
- import 'package:firebase_messaging/firebase_messaging.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/scheduler.dart';
- import 'package:flutter/services.dart';
- import 'package:flutter_dotenv/flutter_dotenv.dart';
- import 'package:overlay_support/overlay_support.dart';
-
- import '/database/models/my_profile.dart';
- import '/views/main/home.dart';
- import '/views/authentication/unauthenticated_landing.dart';
- import '/views/authentication/login.dart';
- import '/views/authentication/signup.dart';
-
- class PushNotification {
- PushNotification({
- this.title,
- this.body,
- this.dataTitle,
- this.dataBody,
- });
-
- String? title;
- String? body;
- String? dataTitle;
- String? dataBody;
- }
-
- void main() async {
- await dotenv.load(fileName: '.env');
-
- // TODO: Replace this with the prod url when server is deployed
- MyProfile.setServerUrl(dotenv.env['SERVER_URL'] ?? 'http://localhost:8080/');
-
- runApp(MyApp());
- }
-
- class MyApp extends StatelessWidget {
- MyApp({Key? key}) : super(key: key);
-
- static const String _title = 'Envelope';
-
- late final FirebaseMessaging _messaging;
-
- void registerNotification() async {
- await Firebase.initializeApp();
-
- _messaging = FirebaseMessaging.instance;
-
- NotificationSettings settings = await _messaging.requestPermission(
- alert: true,
- badge: true,
- provisional: false,
- sound: true,
- );
-
- if (settings.authorizationStatus != AuthorizationStatus.authorized) {
- return;
- }
-
- final fcmToken = await _messaging.getToken();
- print('Device Token: $fcmToken');
-
- Color notificationBg = Colors.grey.shade100;
- if (SchedulerBinding.instance.window.platformBrightness == Brightness.dark) {
- notificationBg = Colors.grey[850]!;
- }
-
- // For handling the received notifications
- FirebaseMessaging.onMessage.listen((RemoteMessage message) {
- // Parse the message received
- PushNotification notification = PushNotification(
- title: message.notification?.title,
- body: message.notification?.body,
- );
-
- // TODO: Replace this with a better notification UI
- showSimpleNotification(
- Text(notification.title!),
- // leading: NotificationBadge(totalNotifications: _totalNotifications),
- background: notificationBg,
- duration: const Duration(seconds: 5),
- slideDismissDirection: DismissDirection.up,
- );
- });
- }
-
- @override
- Widget build(BuildContext context) {
-
- registerNotification();
-
- return OverlaySupport.global(
- child: MaterialApp(
- title: _title,
- routes: {
- '/home': (context) => const Home(),
- '/landing': (context) => const UnauthenticatedLandingWidget(),
- '/login': (context) => const Login(),
- '/signup': (context) => const Signup(),
- },
- home: const Scaffold(
- body: SafeArea(
- child: Home(),
- )
- ),
- theme: ThemeData(
- brightness: Brightness.light,
- primaryColor: const Color(0xff014bff),
- backgroundColor: Colors.grey[300],
- scaffoldBackgroundColor: Colors.grey.shade100,
- disabledColor: Colors.grey[700],
- hintColor: Colors.grey.shade700,
-
- colorScheme: ColorScheme(
- brightness: Brightness.light,
- primary: const Color(0xff014bff),
- onPrimary: Colors.white,
- secondary: const Color(0xff1a6dff),
- onSecondary: Colors.black,
- tertiary: const Color(0xff3490ff),
- onTertiary: Colors.black,
- error: Colors.red,
- onError: Colors.white,
- background: Colors.grey.shade300,
- onBackground: Colors.black,
- surface: Colors.grey.shade100,
- onSurface: Colors.black,
- ),
-
- appBarTheme: AppBarTheme(
- color: Colors.grey.shade100,
- foregroundColor: Colors.white,
- iconTheme: const IconThemeData(
- color: Colors.black,
- ),
-
- toolbarTextStyle: const TextStyle(
- color: Colors.black,
- ),
-
- systemOverlayStyle: const SystemUiOverlayStyle(
- statusBarColor: Colors.black,
-
- statusBarIconBrightness: Brightness.light,
- statusBarBrightness: Brightness.light,
- )
- ),
-
- iconTheme: const IconThemeData(color: Colors.black),
-
- inputDecorationTheme: InputDecorationTheme(
- filled: true,
- fillColor: Colors.white,
- labelStyle: const TextStyle(
- color: Colors.black,
- fontSize: 30,
- ),
- hintStyle: TextStyle(
- color: Colors.grey.shade600,
- ),
- iconColor: Colors.grey.shade500,
- contentPadding: const EdgeInsets.all(8),
- enabledBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(15),
- borderSide: const BorderSide(
- color: Colors.transparent,
- )
- ),
- focusedBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(15),
- borderSide: const BorderSide(
- color: Colors.transparent,
- )
- ),
- ),
- ),
- darkTheme: ThemeData(
- brightness: Brightness.dark,
- primaryColor: const Color(0xffff4a27),
- backgroundColor: Colors.grey.shade800,
- scaffoldBackgroundColor: Colors.grey[850],
- disabledColor: Colors.grey[400],
- hintColor: Colors.grey.shade400,
-
- colorScheme: ColorScheme(
- brightness: Brightness.dark,
- primary: const Color(0xffff4a27),
- onPrimary: Colors.white,
- secondary: const Color(0xffff5f3a),
- onSecondary: Colors.white,
- tertiary: const Color(0xffff7950),
- onTertiary: Colors.black,
- error: Colors.red,
- onError: Colors.white,
- background: Colors.grey.shade900,
- onBackground: Colors.white,
- surface: Colors.grey.shade700,
- onSurface: Colors.white,
- ),
-
- appBarTheme: AppBarTheme(
- color: Colors.grey.shade800,
- iconTheme: IconThemeData(
- color: Colors.grey.shade400
- ),
-
- toolbarTextStyle: TextStyle(
- color: Colors.grey.shade400
- ),
- ),
-
- iconTheme: const IconThemeData(color: Colors.white),
-
- inputDecorationTheme: InputDecorationTheme(
- filled: true,
- fillColor: Colors.grey.shade800,
- hintStyle: TextStyle(
- color: Colors.grey.shade500,
- ),
- iconColor: Colors.grey.shade500,
- contentPadding: const EdgeInsets.all(8),
- enabledBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(15),
- borderSide: const BorderSide(
- color: Colors.transparent,
- )
- ),
- focusedBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(15),
- borderSide: const BorderSide(
- color: Colors.transparent,
- )
- ),
- ),
- ),
- ),
- );
- }
- }
|