Initial commit: Penyerahan final Source code Tugas Akhir
This commit is contained in:
348
lib/main.dart
Normal file
348
lib/main.dart
Normal file
@ -0,0 +1,348 @@
|
||||
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
|
||||
);
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user