175 lines
6.1 KiB
Dart
175 lines
6.1 KiB
Dart
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/widgets.dart';
|
|
import 'package:initial_folder/helper/user_info.dart';
|
|
import 'package:initial_folder/providers/page_provider.dart';
|
|
import 'package:initial_folder/screens/course/my_course_page.dart';
|
|
import 'package:initial_folder/screens/profile/profile_page.dart';
|
|
import 'package:initial_folder/screens/search_course/search_page.dart';
|
|
import 'package:initial_folder/screens/whislist/my_whislist_page.dart';
|
|
import 'package:initial_folder/size_config.dart';
|
|
import 'package:initial_folder/theme.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:flutter_svg/flutter_svg.dart';
|
|
import 'components/home_page.dart';
|
|
|
|
class HomeScreen extends StatefulWidget {
|
|
const HomeScreen({Key? key}) : super(key: key);
|
|
static String routeName = "/home";
|
|
|
|
@override
|
|
State<HomeScreen> createState() => _HomeScreenState();
|
|
}
|
|
|
|
class _HomeScreenState extends State<HomeScreen> {
|
|
Widget buildNavItem(int index, String icon, String activeIcon, String title) {
|
|
PageProvider pageProvider = Provider.of<PageProvider>(context);
|
|
return GestureDetector(
|
|
onTap: () {
|
|
pageProvider.currentIndex = index;
|
|
},
|
|
child: Container(
|
|
width: getProportionateScreenWidth(360) / 5,
|
|
decoration: BoxDecoration(
|
|
color: pageProvider.currentIndex == index
|
|
? Theme.of(context).brightness == Brightness.light
|
|
? primaryColorligtmode
|
|
: primaryColor
|
|
: Colors.transparent,
|
|
borderRadius: BorderRadius.circular(5),
|
|
),
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
AnimatedContainer(
|
|
duration: Duration(milliseconds: 300),
|
|
height: getProportionateScreenHeight(22),
|
|
width: getProportionateScreenWidth(22),
|
|
child: SvgPicture.asset(
|
|
pageProvider.currentIndex == index ? activeIcon : icon,
|
|
color: pageProvider.currentIndex == index
|
|
? baruTextutih
|
|
: Theme.of(context).colorScheme.secondary,
|
|
),
|
|
),
|
|
SizedBox(height: getProportionateScreenHeight(2)),
|
|
Text(
|
|
title,
|
|
style: thirdTextStyle.copyWith(
|
|
color: pageProvider.currentIndex == index
|
|
? baruTextutih
|
|
: Theme.of(context).colorScheme.secondary,
|
|
fontSize: getProportionateScreenWidth(10),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
UsersInfo().getIdUser().then((value) {
|
|
print(value);
|
|
FirebaseMessaging.instance.subscribeToTopic("payment-before-paid-$value");
|
|
FirebaseMessaging.instance.subscribeToTopic("payment-after-paid-$value");
|
|
FirebaseMessaging.instance.subscribeToTopic("qna-new-qna-$value");
|
|
FirebaseMessaging.instance.subscribeToTopic("qna-reply-qna-$value");
|
|
FirebaseMessaging.instance.subscribeToTopic("alert-carts-$value");
|
|
});
|
|
UsersInfo().getToken().then((value) => print(value));
|
|
PageProvider pageProvider = Provider.of<PageProvider>(context);
|
|
DateTime backButtonPressTime = DateTime.now();
|
|
|
|
SizeConfig().init(context);
|
|
Future<bool> handleWillPop(BuildContext context) async {
|
|
final now = DateTime.now();
|
|
final backButtonHasNotBeenPressedOrSnackBarHasBeenClosed =
|
|
DateTime.now().difference(backButtonPressTime) >=
|
|
Duration(milliseconds: 500);
|
|
|
|
if (backButtonHasNotBeenPressedOrSnackBarHasBeenClosed) {
|
|
backButtonPressTime = now;
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
width: 240,
|
|
duration: Duration(seconds: 2),
|
|
backgroundColor: secondaryColor,
|
|
content: Text(
|
|
'Tekan sekali lagi untuk keluar',
|
|
style: primaryTextStyle.copyWith(
|
|
color: backgroundColor, fontSize: 12),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
behavior: SnackBarBehavior.floating,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(20),
|
|
),
|
|
),
|
|
);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
Widget customBottomNavigation() {
|
|
return Container(
|
|
color: Theme.of(context).brightness == Brightness.dark
|
|
? twelveColor
|
|
: baruTextutih,
|
|
height: getProportionateScreenHeight(48),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
|
children: [
|
|
buildNavItem(0, 'assets/icons/featured.svg',
|
|
'assets/icons/featured_click.svg', 'Home'),
|
|
buildNavItem(1, 'assets/icons/search.svg',
|
|
'assets/icons/search_click.svg', 'Search'),
|
|
buildNavItem(2, 'assets/icons/my_course.svg',
|
|
'assets/icons/my_course_click.svg', 'My Course'),
|
|
buildNavItem(3, 'assets/icons/wishlist.svg',
|
|
'assets/icons/wishlist_click.svg', 'Wishlist'),
|
|
buildNavItem(4, 'assets/icons/profile.svg',
|
|
'assets/icons/profile_click.svg', 'Profile'),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget body() {
|
|
switch (pageProvider.currentIndex) {
|
|
case 0:
|
|
return HomePage();
|
|
case 1:
|
|
return SearchPage();
|
|
case 2:
|
|
return MyCoursePage();
|
|
case 3:
|
|
return WishlistPage();
|
|
case 4:
|
|
return ProfilePage();
|
|
default:
|
|
return HomePage();
|
|
}
|
|
}
|
|
|
|
return WillPopScope(
|
|
onWillPop: () => handleWillPop(context),
|
|
child: Scaffold(
|
|
backgroundColor: pageProvider.currentIndex == 1
|
|
? Theme.of(context).brightness == Brightness.dark
|
|
? twelveColor
|
|
: baruTextutih
|
|
: Theme.of(context).brightness == Brightness.dark
|
|
? backgroundColor
|
|
: baruTextutih,
|
|
body: body(),
|
|
bottomNavigationBar: customBottomNavigation(),
|
|
),
|
|
);
|
|
}
|
|
}
|