349 lines
15 KiB
Dart
349 lines
15 KiB
Dart
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:initial_folder/firebase_options.dart';
|
|
import 'package:initial_folder/get_it.dart';
|
|
import 'package:initial_folder/providers/announcement_provider.dart';
|
|
import 'package:initial_folder/providers/auth_provider.dart';
|
|
import 'package:initial_folder/providers/banners_provider.dart';
|
|
import 'package:initial_folder/providers/cart_provider.dart';
|
|
import 'package:initial_folder/providers/carts_provider.dart';
|
|
import 'package:initial_folder/providers/categories_provider.dart';
|
|
import 'package:initial_folder/providers/certificate_provider.dart';
|
|
import 'package:initial_folder/providers/checkbox_provider.dart';
|
|
import 'package:initial_folder/providers/data_diri_provider.dart';
|
|
import 'package:initial_folder/providers/detail_course_provider.dart';
|
|
import 'package:initial_folder/providers/filters_course_provider.dart';
|
|
import 'package:initial_folder/providers/firebase_authentication_provider.dart';
|
|
import 'package:initial_folder/providers/forgot_password_provider.dart';
|
|
import 'package:initial_folder/providers/incomplete_profile_provider.dart';
|
|
import 'package:initial_folder/providers/history_transactions_provider.dart';
|
|
import 'package:initial_folder/providers/latest_course_provider.dart';
|
|
import 'package:initial_folder/providers/lesson_course_provider.dart';
|
|
import 'package:initial_folder/providers/like_announcement.dart';
|
|
import 'package:initial_folder/providers/like_or_unlike_provider.dart';
|
|
import 'package:initial_folder/providers/login_provider.dart';
|
|
import 'package:initial_folder/providers/my_course_provider.dart';
|
|
import 'package:initial_folder/providers/notification_provider.dart';
|
|
import 'package:initial_folder/providers/order_provider.dart';
|
|
import 'package:initial_folder/providers/others_course_provider.dart';
|
|
import 'package:initial_folder/providers/payments_provider.dart';
|
|
import 'package:initial_folder/providers/play_video_course_provider.dart';
|
|
import 'package:initial_folder/providers/posting_announcement_reply_provider.dart';
|
|
import 'package:initial_folder/providers/posting_qna_provider.dart';
|
|
import 'package:initial_folder/providers/posting_qna_reply_provider.dart';
|
|
import 'package:initial_folder/providers/profile_image_provider.dart';
|
|
import 'package:initial_folder/providers/promo_course_provider.dart';
|
|
import 'package:initial_folder/providers/radeem_voucher_provider.dart';
|
|
import 'package:initial_folder/providers/registrasi_google_provider.dart';
|
|
import 'package:initial_folder/providers/reset_provider.dart';
|
|
import 'package:initial_folder/providers/search_provider.dart';
|
|
import 'package:initial_folder/providers/section_lesson_provider.dart';
|
|
import 'package:initial_folder/providers/selected_title_provider.dart';
|
|
import 'package:initial_folder/providers/stream_invoice_provider.dart';
|
|
import 'package:initial_folder/providers/tab_play_course_provider.dart';
|
|
import 'package:initial_folder/providers/description_provider.dart';
|
|
import 'package:initial_folder/providers/metode_provider.dart';
|
|
import 'package:initial_folder/providers/page_provider.dart';
|
|
import 'package:initial_folder/providers/profile_provider.dart';
|
|
import 'package:initial_folder/providers/tab_provider.dart';
|
|
import 'package:initial_folder/providers/top_course_provider.dart';
|
|
import 'package:initial_folder/providers/total_price_provider.dart';
|
|
import 'package:initial_folder/providers/update_data_diri_provider.dart';
|
|
import 'package:initial_folder/providers/update_password_provider.dart';
|
|
import 'package:initial_folder/providers/user_info_provider.dart';
|
|
import 'package:initial_folder/providers/whislist_provider.dart';
|
|
import 'package:initial_folder/providers/theme_provider.dart';
|
|
import 'package:initial_folder/providers/wishlist_post_provider.dart';
|
|
import 'package:initial_folder/screens/cart/cart_page.dart';
|
|
import 'package:initial_folder/screens/course/play_course_page.dart';
|
|
// import 'package:initial_folder/screens/home/components/notification.dart';
|
|
import 'package:initial_folder/screens/splash/splash_screen_login.dart';
|
|
import 'package:initial_folder/services/all_certificate_service.dart';
|
|
import 'package:initial_folder/services/announcement_service.dart';
|
|
import 'package:initial_folder/services/banners_service.dart';
|
|
import 'package:initial_folder/services/cart_service.dart';
|
|
import 'package:initial_folder/services/categories_service.dart';
|
|
import 'package:initial_folder/services/course_service.dart';
|
|
import 'package:initial_folder/services/history_transactions_service.dart';
|
|
import 'package:initial_folder/services/lesson_course_service.dart';
|
|
import 'package:initial_folder/services/notification_service.dart';
|
|
import 'package:initial_folder/services/payment_service.dart';
|
|
import 'package:initial_folder/services/search_service.dart';
|
|
import 'package:initial_folder/services/user_info_service.dart';
|
|
import 'package:initial_folder/theme.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:initial_folder/routes.dart';
|
|
import 'package:firebase_core/firebase_core.dart';
|
|
import 'package:responsive_framework/responsive_framework.dart';
|
|
import 'package:initial_folder/base_service.dart';
|
|
import 'package:initial_folder/providers/detail_invoice_provider.dart';
|
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
|
|
// Import library dan provider yang dibutuhkan untuk seluruh aplikasi
|
|
|
|
// Fungsi handler untuk pesan notifikasi Firebase yang diterima saat aplikasi di background
|
|
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
|
|
// Jika ingin menggunakan service Firebase lain di background, inisialisasi dulu
|
|
// print pesan jika mode debug
|
|
}
|
|
|
|
final globalScaffoldKey = GlobalKey<ScaffoldState>();
|
|
GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
|
Future main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
await dotenv.load();
|
|
SystemChrome.setPreferredOrientations([
|
|
DeviceOrientation.portraitUp,
|
|
]);
|
|
|
|
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
|
await FirebaseMessaging.instance.getToken();
|
|
setup();
|
|
|
|
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
|
|
FirebaseMessaging.onMessageOpenedApp.listen((event) {
|
|
if (kDebugMode) {
|
|
print(event);
|
|
}
|
|
if (event.data['route'] == "/cart") {
|
|
navigatorKey.currentState?.push(MaterialPageRoute(
|
|
builder: (context) => const CartPage(),
|
|
));
|
|
} else if (event.data['route'] == "/play_course") {
|
|
navigatorKey.currentState?.push(
|
|
MaterialPageRoute(
|
|
builder: (context) => MultiProvider(
|
|
providers: [
|
|
ChangeNotifierProvider(
|
|
create: (context) => LessonCourseProvider(
|
|
lessonCourseService: LessonCourseService(),
|
|
id: int.parse(event.data['id_course'] ?? '0'),
|
|
),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => DetailCourseProvider(
|
|
courseService: CourseService(),
|
|
id: event.data['id_course'] ?? '1'))
|
|
],
|
|
child: PlayCourse(
|
|
judul: event.data['title'] ?? '',
|
|
instruktur: event.data['instructur_name'] ?? '',
|
|
thumbnail: event.data['thumbnail'] ??
|
|
"$baseUrl/uploads/courses_thumbnail/course_thumbnail_default_57.jpg",
|
|
courseeid: event.data['id_course'],
|
|
isQna: true,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
});
|
|
ThemeProvider themeProvider = ThemeProvider();
|
|
await themeProvider.loadTheme();
|
|
runApp(MyApp(themeProvider: themeProvider));
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
const MyApp({Key? key, required this.themeProvider}) : super(key: key);
|
|
|
|
final ThemeProvider themeProvider;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
// Provider untuk Theme agar bisa diakses seluruh aplikasi
|
|
return ChangeNotifierProvider<ThemeProvider>.value(
|
|
value: themeProvider,
|
|
child: MultiProvider(
|
|
// MultiProvider: daftar semua provider yang digunakan di aplikasi
|
|
providers: [
|
|
ChangeNotifierProvider(
|
|
create: (context) => ThemeProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => StreamInvoiceProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => TabProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => DetailInvoiceProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => SelectedTitleProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => LikeOrUnlikeProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => LikeOrAnnouncementProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => AnnouncementProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => PostingQnaReplyProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => PostingAnnouncementReplyProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => ForgotPasswordProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => PostingQnaProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => DataDiriProvider(
|
|
userInfoService: UserInfoService(),
|
|
),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => UpdateDataDiriProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => UpdatePasswordProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => TabPlayCourseProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => SectionLessonProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => PageProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => ProfileImageProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => WishlistPostProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => ProfileProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => CheckboxProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => UserInfoProvider(
|
|
userInfoService: UserInfoService(),
|
|
)),
|
|
ChangeNotifierProvider(
|
|
create: (context) => NotificationProvider(
|
|
notificationServices: NotificationServices(),
|
|
)),
|
|
ChangeNotifierProvider(
|
|
create: (context) => DescriptionProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => TotalPriceProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => MetodeProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => FirebaseAuthenticationProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => RegistrasiGoogleProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => RegistrasiGoogleProvider(),
|
|
),
|
|
ChangeNotifierProvider(create: (context) => ResetProvider()),
|
|
ChangeNotifierProvider(
|
|
create: (context) => AuthProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
CategoriesProvider(categoriesService: CategoriesService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
BannersProvider(bannersService: BannersService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
OthersCourseProvider(otherCourseService: CourseService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => CartsProvider(cartService: CartService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => CartProvider(cartService: CartService()),
|
|
),
|
|
ChangeNotifierProvider<WishlistProvider>(
|
|
create: (context) => WishlistProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => PaymentsProvider(
|
|
paymentServices: PaymentServices(),
|
|
),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => PlayVideoCourseProvider(),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
MyCourseProvider(courseService: CourseService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
FilterCourseProvider(searchService: SearchService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => SearchProvider(searchService: SearchService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
TopCourseProvider(courseService: CourseService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
LatestCourseProvider(courseService: CourseService()),
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) =>
|
|
PromoCourseProvider(courseService: CourseService()),
|
|
),
|
|
ChangeNotifierProvider(create: (context) => OrderProvider()),
|
|
ChangeNotifierProvider(create: (context) => LoginProvider()),
|
|
ChangeNotifierProvider(
|
|
create: (context) => CertificateProvider(
|
|
certificateServices: AllCertificateServices())),
|
|
ChangeNotifierProvider(create: (context) => RadeemVoucherProvider()),
|
|
ChangeNotifierProvider(
|
|
create: (context) => IncompleteProfileProvider(
|
|
userInfoService: UserInfoService(),
|
|
)),
|
|
ChangeNotifierProvider(
|
|
create: (context) => HistoryTranscationsProvider(
|
|
historyTransactionService: HistoryTransactionService()))
|
|
],
|
|
child: Consumer<ThemeProvider>(builder: (context, themeProvider, child) {
|
|
// MaterialApp sebagai root aplikasi
|
|
return MaterialApp(
|
|
navigatorKey: navigatorKey, // Untuk navigasi global
|
|
builder: (context, widget) => ResponsiveBreakpoints.builder(
|
|
child: ClampingScrollWrapper.builder(context, widget!),
|
|
breakpoints: [
|
|
const Breakpoint(start: 0, end: 450, name: MOBILE),
|
|
const Breakpoint(start: 451, end: 800, name: TABLET),
|
|
const Breakpoint(start: 801, end: 1920, name: DESKTOP),
|
|
const Breakpoint(start: 1921, end: double.infinity, name: '4K'),
|
|
],
|
|
),
|
|
debugShowCheckedModeBanner: false,
|
|
title: 'Vocasia',
|
|
theme: themeProvider.themeData, // Tema aplikasi
|
|
home: const SplashScreenLogin(), // Halaman pertama (Splash)
|
|
routes: routes, // Daftar route aplikasi
|
|
);
|
|
}),
|
|
),
|
|
);
|
|
}
|
|
}
|