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