This commit is contained in:
efrilm
2026-01-16 12:26:06 +07:00
parent 1ce980a87b
commit 82e1f93cce
17 changed files with 1095 additions and 497 deletions
+6 -1
View File
@@ -24,7 +24,12 @@ class _MainPageState extends State<MainPage> {
@override
Widget build(BuildContext context) {
return AutoTabsRouter.pageView(
routes: [HomeRoute(), VoucherRoute(), OrderRoute(), ProfileRoute()],
routes: [
HomeRoute(),
// VoucherRoute(),
OrderRoute(),
ProfileRoute(),
],
physics: const NeverScrollableScrollPhysics(),
builder: (context, child, pageController) => Scaffold(
body: child,
@@ -1,66 +1,60 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../../../../../application/auth/auth_bloc.dart';
import '../../../../../router/app_router.gr.dart';
import 'feature_card.dart';
import '../../../../../../common/theme/theme.dart';
import '../../../../../components/card/gradient_card.dart';
class HomeFeatureSection extends StatelessWidget {
const HomeFeatureSection({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<AuthBloc, AuthState>(
builder: (context, state) {
return Container(
padding: const EdgeInsets.all(16),
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: [
HomeFeatureCard(
icon: Icons.card_giftcard,
title: 'Reward',
iconColor: const Color(0xFF1976D2),
onTap: () => context.router.push(RewardRoute()),
),
SizedBox(width: 12),
HomeFeatureCard(
icon: Icons.casino,
title: 'Undian',
iconColor: const Color(0xFF7B1FA2),
onTap: () => context.router.push(DrawRoute()),
),
SizedBox(width: 12),
HomeFeatureCard(
icon: Icons.store,
title: 'Merchant',
iconColor: const Color(0xFF388E3C),
onTap: () => context.router.push(MerchantRoute()),
),
SizedBox(width: 12),
HomeFeatureCard(
icon: Icons.blur_circular,
title: 'Wheels',
iconColor: const Color(0xFF388E3C),
onTap: () => state.isAuthenticated
? context.router.push(FerrisWheelRoute())
: context.router.push(OnboardingRoute()),
),
SizedBox(width: 12),
HomeFeatureCard(
icon: Icons.storage_outlined,
title: 'Mistery Box',
iconColor: const Color(0xFF388E3C),
onTap: () => state.isAuthenticated
? context.router.push(MisteryBoxRoute())
: context.router.push(OnboardingRoute()),
),
],
return Padding(
padding: const EdgeInsets.all(16),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: GradientCard(
child: _content(
'Dine In',
'Rasakan Sensasi Langsung di Meja Kami!',
),
),
),
);
},
SizedBox(width: 16),
Expanded(
child: GradientCard(
child: _content(
'Take Away',
'Nikmati di Mana Saja, Tetap Mantap!',
),
),
),
],
),
);
}
Column _content(String title, String subtitle) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: AppStyle.lg.copyWith(
color: AppColor.white,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 8),
Text(
subtitle,
style: AppStyle.md.copyWith(
color: AppColor.white,
fontWeight: FontWeight.w500,
),
),
],
);
}
}
@@ -16,7 +16,7 @@ class HomePointCard extends StatelessWidget {
builder: (context, state) {
return GestureDetector(
onTap: () => state.isAuthenticated
? context.router.push(PoinRoute())
? context.router.push(CoinRoute())
: context.router.push(OnboardingRoute()),
child: Container(
decoration: BoxDecoration(
@@ -6,6 +6,7 @@ import '../../../../../application/auth/auth_bloc.dart';
import '../../../../../application/auth/logout_form/logout_form_bloc.dart';
import '../../../../../common/theme/theme.dart';
import '../../../../../injection.dart';
import '../../../../components/card/gradient_card.dart';
import '../../../../components/toast/flushbar.dart';
import '../../../../router/app_router.gr.dart';
@@ -46,165 +47,81 @@ class ProfilePage extends StatelessWidget implements AutoRouteWrapper {
onTap: () => state.isAuthenticated
? context.router.push(AccountMyRoute())
: context.router.push(OnboardingRoute()),
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: AppColor.primaryGradient,
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
borderRadius: BorderRadius.circular(16),
),
child: Stack(
children: [
// Background Pattern
Positioned(
top: -20,
right: -20,
child: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: AppColor.white.withOpacity(0.1),
),
),
),
Positioned(
top: 30,
right: 20,
child: Container(
width: 40,
height: 40,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: AppColor.white.withOpacity(0.08),
),
),
),
Positioned(
bottom: -10,
left: -10,
child: Container(
width: 60,
height: 60,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: AppColor.white.withOpacity(0.06),
),
),
),
// Decorative Lines
Positioned(
top: 10,
left: -5,
child: Transform.rotate(
angle: 0.5,
child: Container(
width: 30,
height: 2,
decoration: BoxDecoration(
color: AppColor.white.withOpacity(0.15),
borderRadius: BorderRadius.circular(1),
child: GradientCard(
child: !state.isAuthenticated
? Row(
children: [
Expanded(
child: Text(
'Silahkan Masuk',
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.white,
letterSpacing: 0.5,
),
),
),
),
),
),
Positioned(
bottom: 15,
right: 10,
child: Transform.rotate(
angle: -0.5,
child: Container(
width: 25,
height: 2,
decoration: BoxDecoration(
color: AppColor.white.withOpacity(0.15),
borderRadius: BorderRadius.circular(1),
),
),
),
),
// Main Content
Padding(
padding: const EdgeInsets.all(16.0),
child: !state.isAuthenticated
? Row(
children: [
Expanded(
child: Text(
'Silahkan Masuk',
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.white,
letterSpacing: 0.5,
),
],
)
: Row(
children: [
// Avatar
Container(
width: 60,
height: 60,
decoration: BoxDecoration(
color: AppColor.white,
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(
0.1,
),
),
],
)
: Row(
children: [
// Avatar
Container(
width: 60,
height: 60,
decoration: BoxDecoration(
color: AppColor.white,
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: AppColor.black
.withOpacity(0.1),
blurRadius: 8,
offset: const Offset(0, 2),
),
],
),
child: Icon(
Icons.person,
size: 30,
color: AppColor.primary,
),
),
const SizedBox(width: 16),
// User Info
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
state.user.name,
style: AppStyle.lg.copyWith(
fontWeight:
FontWeight.bold,
color: AppColor.white,
letterSpacing: 0.5,
),
),
const SizedBox(height: 4),
Text(
state.user.phoneNumber,
style: AppStyle.sm.copyWith(
color: AppColor.white
.withOpacity(0.9),
),
),
],
),
),
// Arrow Icon
Icon(
Icons.arrow_forward_ios,
color: AppColor.white,
size: 14,
blurRadius: 8,
offset: const Offset(0, 2),
),
],
),
),
],
),
child: Icon(
Icons.person,
size: 30,
color: AppColor.primary,
),
),
const SizedBox(width: 16),
// User Info
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
state.user.name,
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.white,
letterSpacing: 0.5,
),
),
const SizedBox(height: 4),
Text(
state.user.phoneNumber,
style: AppStyle.sm.copyWith(
color: AppColor.white
.withOpacity(0.9),
),
),
],
),
),
// Arrow Icon
Icon(
Icons.arrow_forward_ios,
color: AppColor.white,
size: 14,
),
],
),
),
),
],
@@ -18,11 +18,11 @@ class MainBottomNavbar extends StatelessWidget {
label: 'Home',
tooltip: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.discount),
label: 'Voucher',
tooltip: 'Voucher',
),
// BottomNavigationBarItem(
// icon: Icon(Icons.discount),
// label: 'Voucher',
// tooltip: 'Voucher',
// ),
BottomNavigationBarItem(
icon: Icon(Icons.list),
label: 'Pesanan',