feat: ferris wheel page

This commit is contained in:
efrilm 2025-09-04 18:08:34 +07:00
parent 4d994e303b
commit 0d1e516686
6 changed files with 1334 additions and 168 deletions

View File

@ -0,0 +1,184 @@
import 'dart:math' as math;
import 'package:flutter/material.dart';
import '../../presentation/pages/mini_games/ferris_wheel/data/model.dart';
import '../theme/theme.dart';
class WheelPainter extends CustomPainter {
final List<WheelSection> sections;
WheelPainter({required this.sections});
@override
void paint(Canvas canvas, Size size) {
final center = Offset(size.width / 2, size.height / 2);
final radius = size.width / 2;
final sectionAngle = 2 * math.pi / sections.length;
// Draw outer white border
final outerBorderPaint = Paint()
..color = Colors.white
..style = PaintingStyle.fill;
canvas.drawCircle(center, radius, outerBorderPaint);
// Draw blue border ring
final blueBorderPaint = Paint()
..color = const Color(0xFF3B82F6)
..style = PaintingStyle.fill;
canvas.drawCircle(center, radius - 8, blueBorderPaint);
// Draw inner white circle
final innerWhitePaint = Paint()
..color = Colors.white
..style = PaintingStyle.fill;
canvas.drawCircle(center, radius - 20, innerWhitePaint);
// Draw sections
for (int i = 0; i < sections.length; i++) {
final startAngle = i * sectionAngle - math.pi / 2;
// Section background
final sectionPaint = Paint()
..color = sections[i].color
..style = PaintingStyle.fill;
canvas.drawArc(
Rect.fromCircle(center: center, radius: radius - 22),
startAngle,
sectionAngle,
true,
sectionPaint,
);
// Draw icon in each section
final iconAngle = startAngle + sectionAngle / 2;
final iconPosition = Offset(
center.dx + (radius - 60) * math.cos(iconAngle),
center.dy + (radius - 60) * math.sin(iconAngle),
);
// Draw icon background circle
final iconBgPaint = Paint()
..color = Colors.white
..style = PaintingStyle.fill;
canvas.drawCircle(iconPosition, 16, iconBgPaint);
// Save canvas state for icon drawing
canvas.save();
canvas.translate(iconPosition.dx, iconPosition.dy);
// Draw icon using TextPainter to simulate Icon widget
final iconText = _getIconText(sections[i].icon);
final iconTextPainter = TextPainter(
text: TextSpan(
text: iconText,
style: TextStyle(
fontFamily: 'MaterialIcons',
fontSize: 20,
color: sections[i].color,
fontWeight: FontWeight.normal,
),
),
textDirection: TextDirection.ltr,
);
iconTextPainter.layout();
iconTextPainter.paint(
canvas,
Offset(-iconTextPainter.width / 2, -iconTextPainter.height / 2),
);
canvas.restore();
// Draw prize text
final textAngle = startAngle + sectionAngle / 2;
final textPosition = Offset(
center.dx + (radius - 100) * math.cos(textAngle),
center.dy + (radius - 100) * math.sin(textAngle),
);
// Save canvas state for text rotation
canvas.save();
canvas.translate(textPosition.dx, textPosition.dy);
canvas.rotate(textAngle + math.pi / 2);
final textPainter = TextPainter(
text: TextSpan(
text: sections[i].prize,
style: const TextStyle(
color: Colors.white,
fontSize: 10,
fontWeight: FontWeight.bold,
),
),
textDirection: TextDirection.ltr,
);
textPainter.layout();
textPainter.paint(
canvas,
Offset(-textPainter.width / 2, -textPainter.height / 2),
);
canvas.restore();
}
// Draw white dots around the outer edge
final dotPaint = Paint()
..color = Colors.white
..style = PaintingStyle.fill;
for (int i = 0; i < 24; i++) {
final dotAngle = (2 * math.pi / 24) * i;
final dotPosition = Offset(
center.dx + (radius - 14) * math.cos(dotAngle),
center.dy + (radius - 14) * math.sin(dotAngle),
);
canvas.drawCircle(dotPosition, 3, dotPaint);
}
// Draw section dividers
final dividerPaint = Paint()
..color = AppColor.white
..style = PaintingStyle.stroke
..strokeWidth = 2;
for (int i = 0; i < sections.length; i++) {
final angle = i * sectionAngle - math.pi / 2;
final lineStart = Offset(
center.dx + (radius - 130) * math.cos(angle),
center.dy + (radius - 130) * math.sin(angle),
);
final lineEnd = Offset(
center.dx + (radius - 22) * math.cos(angle),
center.dy + (radius - 22) * math.sin(angle),
);
canvas.drawLine(lineStart, lineEnd, dividerPaint);
}
}
String _getIconText(IconData icon) {
// Convert IconData to Unicode string for drawing
switch (icon.codePoint) {
case 0xe8f4: // Icons.visibility
return String.fromCharCode(0xe8f4);
case 0xe8f5: // Icons.visibility_off
return String.fromCharCode(0xe8f5);
case 0xe850: // Icons.account_balance_wallet
return String.fromCharCode(0xe850);
case 0xe151: // Icons.card_giftcard
return String.fromCharCode(0xe151);
case 0xe5d5: // Icons.refresh
return String.fromCharCode(0xe5d5);
case 0xe263: // Icons.attach_money
return String.fromCharCode(0xe263);
case 0xe8a1: // Icons.redeem
return String.fromCharCode(0xe8a1);
case 0xe57d: // Icons.monetization_on
return String.fromCharCode(0xe57d);
default:
return String.fromCharCode(0xe87c); // Default star icon
}
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}

View File

@ -31,6 +31,12 @@ class HomeFeatureSection extends StatelessWidget {
iconColor: const Color(0xFF388E3C),
onTap: () => context.router.push(MerchantRoute()),
),
HomeFeatureCard(
icon: Icons.blur_circular,
title: 'Wheels',
iconColor: const Color(0xFF388E3C),
onTap: () => context.router.push(FerrisWheelRoute()),
),
],
),
);

View File

@ -0,0 +1,31 @@
import 'package:flutter/material.dart';
class WheelSection {
final Color color;
final IconData icon;
final String prize;
final int value;
WheelSection({
required this.color,
required this.icon,
required this.prize,
required this.value,
});
}
class PrizeHistory {
final String prize;
final DateTime dateTime;
final int value;
final Color color;
final IconData icon;
PrizeHistory({
required this.prize,
required this.dateTime,
required this.value,
required this.color,
required this.icon,
});
}

View File

@ -0,0 +1,924 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'dart:math' as math;
import '../../../../common/theme/theme.dart';
import '../../../../common/painter/wheel_painter.dart';
import 'data/model.dart';
@RoutePage()
class FerrisWheelPage extends StatefulWidget {
const FerrisWheelPage({super.key});
@override
State<FerrisWheelPage> createState() => _FerrisWheelPageState();
}
class _FerrisWheelPageState extends State<FerrisWheelPage>
with TickerProviderStateMixin {
late AnimationController _rotationController;
late AnimationController _glowController;
late AnimationController _pulseController;
late AnimationController _idleRotationController;
Animation<double>? _spinAnimation;
Animation<double>? _pulseAnimation;
Animation<double>? _idleRotationAnimation;
int tokens = 3;
bool isSpinning = false;
String resultText = 'Belum pernah spin';
double currentRotation = 0.0;
int currentTabIndex = 0;
List<PrizeHistory> prizeHistory = [];
List<WheelSection> wheelSections = [
WheelSection(
color: AppColor.primary,
icon: Icons.visibility,
prize: '1 JT',
value: 1000000,
),
WheelSection(
color: AppColor.info,
icon: Icons.account_balance_wallet,
prize: '10RB',
value: 10000,
),
WheelSection(
color: AppColor.warning,
icon: Icons.card_giftcard,
prize: '50',
value: 50,
),
WheelSection(
color: AppColor.success,
icon: Icons.refresh,
prize: 'SPIN',
value: 1,
),
WheelSection(
color: AppColor.primaryDark,
icon: Icons.visibility,
prize: '30',
value: 30,
),
WheelSection(
color: AppColor.textLight,
icon: Icons.attach_money,
prize: '5RB',
value: 5000,
),
WheelSection(
color: AppColor.secondary,
icon: Icons.redeem,
prize: '20',
value: 20,
),
WheelSection(
color: AppColor.info,
icon: Icons.monetization_on,
prize: '5RB',
value: 5000,
),
];
@override
void initState() {
super.initState();
// Initialize animation controllers
_rotationController = AnimationController(
duration: const Duration(seconds: 4),
vsync: this,
);
_glowController = AnimationController(
duration: const Duration(milliseconds: 2000),
vsync: this,
);
_pulseController = AnimationController(
duration: const Duration(milliseconds: 800),
vsync: this,
);
_idleRotationController = AnimationController(
duration: const Duration(seconds: 10), // 10 detik per putaran
vsync: this,
);
// Initialize animations
_pulseAnimation = Tween<double>(begin: 1.0, end: 1.1).animate(
CurvedAnimation(parent: _pulseController, curve: Curves.easeInOut),
);
_idleRotationAnimation = Tween<double>(
begin: 0.0,
end: 2 * math.pi,
).animate(_idleRotationController);
// Start animations
_glowController.repeat(reverse: true);
_pulseController.repeat(reverse: true);
_idleRotationController.repeat();
}
@override
void dispose() {
_rotationController.dispose();
_glowController.dispose();
_pulseController.dispose();
_idleRotationController.dispose();
super.dispose();
}
void _spinWheel() {
if (isSpinning || tokens <= 0) return;
setState(() {
isSpinning = true;
tokens--;
resultText = 'Sedang berputar...';
});
// Stop idle rotation
_idleRotationController.stop();
int targetSection = math.Random().nextInt(8);
double sectionAngle = (2 * math.pi) / 8;
double targetAngle = (targetSection * sectionAngle) + (sectionAngle / 2);
double baseRotations = 4 + math.Random().nextDouble() * 3;
// Calculate current total rotation
double currentIdleRotation = _idleRotationAnimation?.value ?? 0.0;
double finalRotation =
currentRotation +
currentIdleRotation +
(baseRotations * 2 * math.pi) +
targetAngle;
_spinAnimation =
Tween<double>(
begin: currentRotation + currentIdleRotation,
end: finalRotation,
).animate(
CurvedAnimation(
parent: _rotationController,
curve: Curves.easeOutCubic,
),
);
_rotationController.reset();
_rotationController.animateTo(1.0).then((_) {
setState(() {
currentRotation = finalRotation;
isSpinning = false;
resultText =
'Selamat! Anda mendapat ${wheelSections[targetSection].prize}!';
prizeHistory.insert(
0,
PrizeHistory(
prize: wheelSections[targetSection].prize,
dateTime: DateTime.now(),
value: wheelSections[targetSection].value,
color: wheelSections[targetSection].color,
icon: wheelSections[targetSection].icon,
),
);
});
_showWinDialog(wheelSections[targetSection]);
// Restart idle rotation
_idleRotationController.reset();
_idleRotationController.repeat();
});
}
void _showWinDialog(WheelSection section) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => Dialog(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
child: Container(
padding: const EdgeInsets.all(24),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: AppColor.primaryGradient,
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: AppColor.white,
borderRadius: BorderRadius.circular(40),
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(0.2),
blurRadius: 15,
spreadRadius: 2,
),
],
),
child: Icon(section.icon, color: section.color, size: 40),
),
const SizedBox(height: 16),
Text(
'🎉 Selamat! 🎉',
style: AppStyle.h5.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textWhite,
),
),
const SizedBox(height: 8),
Text(
'Anda mendapatkan',
style: AppStyle.lg.copyWith(color: AppColor.textWhite),
),
const SizedBox(height: 4),
Text(
section.prize,
style: AppStyle.h5.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textWhite,
),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () => Navigator.of(context).pop(),
style: ElevatedButton.styleFrom(
backgroundColor: AppColor.white,
foregroundColor: AppColor.primary,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(25),
),
padding: const EdgeInsets.symmetric(
horizontal: 30,
vertical: 12,
),
),
child: Text(
'Terima Kasih',
style: AppStyle.md.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.primary,
),
),
),
],
),
),
),
);
}
Widget _buildMainContent() {
return Column(
children: [
Container(
margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: AppColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(0.1),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Container(
width: 40,
height: 40,
decoration: BoxDecoration(
color: AppColor.primary,
borderRadius: BorderRadius.circular(8),
),
child: Center(
child: Text(
'G',
style: AppStyle.lg.copyWith(
color: AppColor.textWhite,
fontWeight: FontWeight.bold,
),
),
),
),
const SizedBox(width: 12),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'GPY268e42',
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textPrimary,
),
),
Text(
'Warrior',
style: AppStyle.sm.copyWith(
color: AppColor.textSecondary,
),
),
],
),
],
),
Row(
children: [
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
color: AppColor.warning,
shape: BoxShape.circle,
),
child: Icon(
Icons.circle,
size: 12,
color: AppColor.textWhite,
),
),
const SizedBox(width: 8),
Text(
'Token: $tokens',
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textPrimary,
),
),
],
),
],
),
),
Text(
resultText,
style: AppStyle.md.copyWith(color: AppColor.textWhite),
),
const SizedBox(height: 20),
Expanded(
child: Center(
child: Stack(
alignment: Alignment.center,
children: [
AnimatedBuilder(
animation: _glowController,
builder: (context, child) {
return Container(
width: 340,
height: 340,
decoration: BoxDecoration(
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: AppColor.white.withOpacity(
0.3 + 0.2 * _glowController.value,
),
blurRadius: 40,
spreadRadius: 10,
),
],
),
);
},
),
AnimatedBuilder(
animation: isSpinning
? _rotationController
: _idleRotationController,
builder: (context, child) {
double rotationAngle;
if (isSpinning) {
rotationAngle = _spinAnimation?.value ?? currentRotation;
} else {
rotationAngle =
currentRotation +
(_idleRotationAnimation?.value ?? 0.0);
}
return Transform.rotate(
angle: rotationAngle,
child: CustomPaint(
size: const Size(320, 320),
painter: WheelPainter(sections: wheelSections),
),
);
},
),
AnimatedBuilder(
animation:
_pulseAnimation ?? const AlwaysStoppedAnimation(1.0),
builder: (context, child) {
return Transform.scale(
scale: _pulseAnimation?.value ?? 1.0,
child: Container(
width: 100,
height: 100,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [AppColor.warning, AppColor.warning],
),
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(0.3),
blurRadius: 15,
offset: const Offset(0, 6),
),
BoxShadow(
color: AppColor.warning.withOpacity(0.5),
blurRadius: 20,
spreadRadius: (_pulseAnimation?.value ?? 1.0) * 5,
),
],
),
child: Material(
color: Colors.transparent,
child: InkWell(
borderRadius: BorderRadius.circular(50),
onTap: _spinWheel,
child: Center(
child: Text(
'SPIN',
style: AppStyle.lg.copyWith(
color: AppColor.textWhite,
fontWeight: FontWeight.bold,
letterSpacing: 1,
),
),
),
),
),
),
);
},
),
Positioned(
top: 30,
child: Container(
width: 0,
height: 0,
decoration: BoxDecoration(
border: Border(
left: BorderSide(width: 15, color: Colors.transparent),
right: BorderSide(width: 15, color: Colors.transparent),
bottom: BorderSide(width: 30, color: AppColor.error),
),
),
),
),
],
),
),
),
Container(
margin: const EdgeInsets.all(20),
child: Container(
width: double.infinity,
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [AppColor.warning, AppColor.warning],
),
borderRadius: BorderRadius.circular(15),
),
child: Text(
'❄️ Spin 30x lagi buat mainin spesial spin',
textAlign: TextAlign.center,
style: AppStyle.lg.copyWith(
color: AppColor.textWhite,
fontWeight: FontWeight.bold,
),
),
),
),
],
);
}
Widget _buildPrizeListContent() {
return Container(
margin: const EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: double.infinity,
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: AppColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(0.1),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
child: Text(
'🎁 Daftar Hadiah',
style: AppStyle.h6.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textPrimary,
),
),
),
const SizedBox(height: 20),
Expanded(
child: ListView.builder(
itemCount: wheelSections.length,
itemBuilder: (context, index) {
final section = wheelSections[index];
return Container(
margin: const EdgeInsets.only(bottom: 12),
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: AppColor.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(0.05),
blurRadius: 5,
offset: const Offset(0, 2),
),
],
),
child: Row(
children: [
Container(
width: 50,
height: 50,
decoration: BoxDecoration(
color: section.color,
borderRadius: BorderRadius.circular(25),
),
child: Icon(
section.icon,
color: AppColor.white,
size: 24,
),
),
const SizedBox(width: 16),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
section.prize,
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textPrimary,
),
),
Text(
'Nilai: ${section.value}',
style: AppStyle.sm.copyWith(
color: AppColor.textSecondary,
),
),
],
),
),
Container(
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
decoration: BoxDecoration(
color: section.color.withOpacity(0.1),
borderRadius: BorderRadius.circular(15),
),
child: Text(
'Hadiah',
style: AppStyle.sm.copyWith(
color: section.color,
fontWeight: FontWeight.bold,
),
),
),
],
),
);
},
),
),
],
),
);
}
Widget _buildHistoryContent() {
return Container(
margin: const EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: double.infinity,
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: AppColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(0.1),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
child: Text(
'📜 Riwayat Hadiah',
style: AppStyle.h6.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textPrimary,
),
),
),
const SizedBox(height: 20),
Expanded(
child: prizeHistory.isEmpty
? Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.history,
size: 80,
color: AppColor.white.withOpacity(0.5),
),
const SizedBox(height: 16),
Text(
'Belum ada riwayat spin',
style: AppStyle.lg.copyWith(
color: AppColor.white.withOpacity(0.7),
),
),
const SizedBox(height: 8),
Text(
'Mulai spin untuk melihat riwayat hadiah',
style: AppStyle.md.copyWith(
color: AppColor.white.withOpacity(0.5),
),
),
],
),
)
: ListView.builder(
itemCount: prizeHistory.length,
itemBuilder: (context, index) {
final history = prizeHistory[index];
return Container(
margin: const EdgeInsets.only(bottom: 12),
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: AppColor.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: AppColor.black.withOpacity(0.05),
blurRadius: 5,
offset: const Offset(0, 2),
),
],
),
child: Row(
children: [
Container(
width: 50,
height: 50,
decoration: BoxDecoration(
color: history.color,
borderRadius: BorderRadius.circular(25),
),
child: Icon(
history.icon,
color: AppColor.white,
size: 24,
),
),
const SizedBox(width: 16),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
history.prize,
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textPrimary,
),
),
Text(
'${history.dateTime.day}/${history.dateTime.month}/${history.dateTime.year} ${history.dateTime.hour.toString().padLeft(2, '0')}:${history.dateTime.minute.toString().padLeft(2, '0')}',
style: AppStyle.sm.copyWith(
color: AppColor.textSecondary,
),
),
],
),
),
Container(
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
decoration: BoxDecoration(
color: AppColor.success.withOpacity(0.1),
borderRadius: BorderRadius.circular(15),
),
child: Text(
'Menang',
style: AppStyle.sm.copyWith(
color: AppColor.success,
fontWeight: FontWeight.bold,
),
),
),
],
),
);
},
),
),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: AppColor.primaryGradient,
),
),
child: SafeArea(
child: Column(
children: [
Container(
padding: const EdgeInsets.all(16),
child: Row(
children: [
IconButton(
onPressed: () => context.router.back(),
icon: Icon(
Icons.close,
color: AppColor.textWhite,
size: 28,
),
),
Expanded(
child: Text(
'SPIN & WIN',
style: AppStyle.h6.copyWith(
fontWeight: FontWeight.bold,
color: AppColor.textWhite,
letterSpacing: 2,
),
),
),
IconButton(
onPressed: () {},
icon: Icon(Icons.volume_up, color: AppColor.textWhite),
),
IconButton(
onPressed: () {},
icon: Icon(Icons.info_outline, color: AppColor.textWhite),
),
],
),
),
Container(
margin: const EdgeInsets.symmetric(horizontal: 20),
decoration: BoxDecoration(
color: AppColor.white.withOpacity(0.2),
borderRadius: BorderRadius.circular(25),
),
child: Row(
children: [
Expanded(
child: GestureDetector(
onTap: () => setState(() => currentTabIndex = 0),
child: Container(
padding: const EdgeInsets.symmetric(vertical: 12),
decoration: BoxDecoration(
color: currentTabIndex == 0
? AppColor.white
: Colors.transparent,
borderRadius: BorderRadius.circular(25),
),
child: Text(
'Spin Wheel',
textAlign: TextAlign.center,
style: AppStyle.md.copyWith(
fontWeight: FontWeight.bold,
color: currentTabIndex == 0
? AppColor.primary
: AppColor.textWhite,
),
),
),
),
),
Expanded(
child: GestureDetector(
onTap: () => setState(() => currentTabIndex = 1),
child: Container(
padding: const EdgeInsets.symmetric(vertical: 12),
decoration: BoxDecoration(
color: currentTabIndex == 1
? AppColor.white
: Colors.transparent,
borderRadius: BorderRadius.circular(25),
),
child: Text(
'Daftar Hadiah',
textAlign: TextAlign.center,
style: AppStyle.md.copyWith(
fontWeight: FontWeight.bold,
color: currentTabIndex == 1
? AppColor.primary
: AppColor.textWhite,
),
),
),
),
),
Expanded(
child: GestureDetector(
onTap: () => setState(() => currentTabIndex = 2),
child: Container(
padding: const EdgeInsets.symmetric(vertical: 12),
decoration: BoxDecoration(
color: currentTabIndex == 2
? AppColor.white
: Colors.transparent,
borderRadius: BorderRadius.circular(25),
),
child: Text(
'Riwayat',
textAlign: TextAlign.center,
style: AppStyle.md.copyWith(
fontWeight: FontWeight.bold,
color: currentTabIndex == 2
? AppColor.primary
: AppColor.textWhite,
),
),
),
),
),
],
),
),
const SizedBox(height: 20),
Expanded(
child: currentTabIndex == 0
? _buildMainContent()
: currentTabIndex == 1
? _buildPrizeListContent()
: _buildHistoryContent(),
),
],
),
),
),
);
}
}

View File

@ -59,5 +59,8 @@ class AppRouter extends RootStackRouter {
AutoRoute(page: AccountMyRoute.page),
AutoRoute(page: AddressRoute.page),
AutoRoute(page: PaymentRoute.page),
// Mini Games
AutoRoute(page: FerrisWheelRoute.page),
];
}

View File

@ -9,64 +9,66 @@
// coverage:ignore-file
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:auto_route/auto_route.dart' as _i28;
import 'package:auto_route/auto_route.dart' as _i29;
import 'package:enaklo/presentation/pages/account/account_my/account_my_page.dart'
as _i1;
import 'package:enaklo/presentation/pages/account/address/address_page.dart'
as _i2;
import 'package:enaklo/presentation/pages/account/payment/payment_page.dart'
as _i17;
as _i18;
import 'package:enaklo/presentation/pages/auth/create_password/create_password_page.dart'
as _i3;
import 'package:enaklo/presentation/pages/auth/login/login_page.dart' as _i7;
import 'package:enaklo/presentation/pages/auth/otp/otp_page.dart' as _i15;
import 'package:enaklo/presentation/pages/auth/login/login_page.dart' as _i8;
import 'package:enaklo/presentation/pages/auth/otp/otp_page.dart' as _i16;
import 'package:enaklo/presentation/pages/auth/password/password_page.dart'
as _i16;
import 'package:enaklo/presentation/pages/auth/pin/pin_page.dart' as _i18;
as _i17;
import 'package:enaklo/presentation/pages/auth/pin/pin_page.dart' as _i19;
import 'package:enaklo/presentation/pages/auth/register/register_page.dart'
as _i23;
as _i24;
import 'package:enaklo/presentation/pages/draw/draw_page.dart' as _i5;
import 'package:enaklo/presentation/pages/draw/pages/draw_detail/draw_detail_page.dart'
as _i4;
import 'package:enaklo/presentation/pages/main/main_page.dart' as _i8;
import 'package:enaklo/presentation/pages/main/main_page.dart' as _i9;
import 'package:enaklo/presentation/pages/main/pages/home/home_page.dart'
as _i6;
as _i7;
import 'package:enaklo/presentation/pages/main/pages/order/order_page.dart'
as _i14;
as _i15;
import 'package:enaklo/presentation/pages/main/pages/profile/profile_page.dart'
as _i22;
as _i23;
import 'package:enaklo/presentation/pages/main/pages/voucher/voucher_page.dart'
as _i27;
import 'package:enaklo/presentation/pages/merchant/merchant_page.dart' as _i10;
as _i28;
import 'package:enaklo/presentation/pages/merchant/merchant_page.dart' as _i11;
import 'package:enaklo/presentation/pages/merchant/pages/merchant_detail/merchant_detail_page.dart'
as _i9;
as _i10;
import 'package:enaklo/presentation/pages/mini_games/ferris_wheel/ferris_wheel_page.dart'
as _i6;
import 'package:enaklo/presentation/pages/notification/notification_page.dart'
as _i11;
import 'package:enaklo/presentation/pages/onboarding/onboarding_page.dart'
as _i12;
import 'package:enaklo/presentation/pages/order/order_detail/order_detail_page.dart'
import 'package:enaklo/presentation/pages/onboarding/onboarding_page.dart'
as _i13;
import 'package:enaklo/presentation/pages/order/order_detail/order_detail_page.dart'
as _i14;
import 'package:enaklo/presentation/pages/poin/pages/poin_history_page.dart'
as _i19;
as _i20;
import 'package:enaklo/presentation/pages/poin/pages/product_redeem/product_redeem_page.dart'
as _i21;
import 'package:enaklo/presentation/pages/poin/poin_page.dart' as _i20;
import 'package:enaklo/presentation/pages/reward/reward_page.dart' as _i24;
import 'package:enaklo/presentation/pages/splash/splash_page.dart' as _i25;
as _i22;
import 'package:enaklo/presentation/pages/poin/poin_page.dart' as _i21;
import 'package:enaklo/presentation/pages/reward/reward_page.dart' as _i25;
import 'package:enaklo/presentation/pages/splash/splash_page.dart' as _i26;
import 'package:enaklo/presentation/pages/voucher/voucher_detail/voucher_detail_page.dart'
as _i26;
import 'package:enaklo/sample/sample_data.dart' as _i30;
import 'package:flutter/material.dart' as _i29;
as _i27;
import 'package:enaklo/sample/sample_data.dart' as _i31;
import 'package:flutter/material.dart' as _i30;
/// generated route for
/// [_i1.AccountMyPage]
class AccountMyRoute extends _i28.PageRouteInfo<void> {
const AccountMyRoute({List<_i28.PageRouteInfo>? children})
class AccountMyRoute extends _i29.PageRouteInfo<void> {
const AccountMyRoute({List<_i29.PageRouteInfo>? children})
: super(AccountMyRoute.name, initialChildren: children);
static const String name = 'AccountMyRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i1.AccountMyPage();
@ -76,13 +78,13 @@ class AccountMyRoute extends _i28.PageRouteInfo<void> {
/// generated route for
/// [_i2.AddressPage]
class AddressRoute extends _i28.PageRouteInfo<void> {
const AddressRoute({List<_i28.PageRouteInfo>? children})
class AddressRoute extends _i29.PageRouteInfo<void> {
const AddressRoute({List<_i29.PageRouteInfo>? children})
: super(AddressRoute.name, initialChildren: children);
static const String name = 'AddressRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i2.AddressPage();
@ -92,13 +94,13 @@ class AddressRoute extends _i28.PageRouteInfo<void> {
/// generated route for
/// [_i3.CreatePasswordPage]
class CreatePasswordRoute extends _i28.PageRouteInfo<void> {
const CreatePasswordRoute({List<_i28.PageRouteInfo>? children})
class CreatePasswordRoute extends _i29.PageRouteInfo<void> {
const CreatePasswordRoute({List<_i29.PageRouteInfo>? children})
: super(CreatePasswordRoute.name, initialChildren: children);
static const String name = 'CreatePasswordRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i3.CreatePasswordPage();
@ -108,11 +110,11 @@ class CreatePasswordRoute extends _i28.PageRouteInfo<void> {
/// generated route for
/// [_i4.DrawDetailPage]
class DrawDetailRoute extends _i28.PageRouteInfo<DrawDetailRouteArgs> {
class DrawDetailRoute extends _i29.PageRouteInfo<DrawDetailRouteArgs> {
DrawDetailRoute({
_i29.Key? key,
_i30.Key? key,
required _i5.DrawEvent drawEvent,
List<_i28.PageRouteInfo>? children,
List<_i29.PageRouteInfo>? children,
}) : super(
DrawDetailRoute.name,
args: DrawDetailRouteArgs(key: key, drawEvent: drawEvent),
@ -121,7 +123,7 @@ class DrawDetailRoute extends _i28.PageRouteInfo<DrawDetailRouteArgs> {
static const String name = 'DrawDetailRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
final args = data.argsAs<DrawDetailRouteArgs>();
@ -133,7 +135,7 @@ class DrawDetailRoute extends _i28.PageRouteInfo<DrawDetailRouteArgs> {
class DrawDetailRouteArgs {
const DrawDetailRouteArgs({this.key, required this.drawEvent});
final _i29.Key? key;
final _i30.Key? key;
final _i5.DrawEvent drawEvent;
@ -145,13 +147,13 @@ class DrawDetailRouteArgs {
/// generated route for
/// [_i5.DrawPage]
class DrawRoute extends _i28.PageRouteInfo<void> {
const DrawRoute({List<_i28.PageRouteInfo>? children})
class DrawRoute extends _i29.PageRouteInfo<void> {
const DrawRoute({List<_i29.PageRouteInfo>? children})
: super(DrawRoute.name, initialChildren: children);
static const String name = 'DrawRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i5.DrawPage();
@ -160,60 +162,76 @@ class DrawRoute extends _i28.PageRouteInfo<void> {
}
/// generated route for
/// [_i6.HomePage]
class HomeRoute extends _i28.PageRouteInfo<void> {
const HomeRoute({List<_i28.PageRouteInfo>? children})
/// [_i6.FerrisWheelPage]
class FerrisWheelRoute extends _i29.PageRouteInfo<void> {
const FerrisWheelRoute({List<_i29.PageRouteInfo>? children})
: super(FerrisWheelRoute.name, initialChildren: children);
static const String name = 'FerrisWheelRoute';
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i6.FerrisWheelPage();
},
);
}
/// generated route for
/// [_i7.HomePage]
class HomeRoute extends _i29.PageRouteInfo<void> {
const HomeRoute({List<_i29.PageRouteInfo>? children})
: super(HomeRoute.name, initialChildren: children);
static const String name = 'HomeRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i6.HomePage();
return const _i7.HomePage();
},
);
}
/// generated route for
/// [_i7.LoginPage]
class LoginRoute extends _i28.PageRouteInfo<void> {
const LoginRoute({List<_i28.PageRouteInfo>? children})
/// [_i8.LoginPage]
class LoginRoute extends _i29.PageRouteInfo<void> {
const LoginRoute({List<_i29.PageRouteInfo>? children})
: super(LoginRoute.name, initialChildren: children);
static const String name = 'LoginRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i7.LoginPage();
return const _i8.LoginPage();
},
);
}
/// generated route for
/// [_i8.MainPage]
class MainRoute extends _i28.PageRouteInfo<void> {
const MainRoute({List<_i28.PageRouteInfo>? children})
/// [_i9.MainPage]
class MainRoute extends _i29.PageRouteInfo<void> {
const MainRoute({List<_i29.PageRouteInfo>? children})
: super(MainRoute.name, initialChildren: children);
static const String name = 'MainRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i8.MainPage();
return const _i9.MainPage();
},
);
}
/// generated route for
/// [_i9.MerchantDetailPage]
class MerchantDetailRoute extends _i28.PageRouteInfo<MerchantDetailRouteArgs> {
/// [_i10.MerchantDetailPage]
class MerchantDetailRoute extends _i29.PageRouteInfo<MerchantDetailRouteArgs> {
MerchantDetailRoute({
_i29.Key? key,
required _i30.MerchantModel merchant,
List<_i28.PageRouteInfo>? children,
_i30.Key? key,
required _i31.MerchantModel merchant,
List<_i29.PageRouteInfo>? children,
}) : super(
MerchantDetailRoute.name,
args: MerchantDetailRouteArgs(key: key, merchant: merchant),
@ -222,11 +240,11 @@ class MerchantDetailRoute extends _i28.PageRouteInfo<MerchantDetailRouteArgs> {
static const String name = 'MerchantDetailRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
final args = data.argsAs<MerchantDetailRouteArgs>();
return _i9.MerchantDetailPage(key: args.key, merchant: args.merchant);
return _i10.MerchantDetailPage(key: args.key, merchant: args.merchant);
},
);
}
@ -234,9 +252,9 @@ class MerchantDetailRoute extends _i28.PageRouteInfo<MerchantDetailRouteArgs> {
class MerchantDetailRouteArgs {
const MerchantDetailRouteArgs({this.key, required this.merchant});
final _i29.Key? key;
final _i30.Key? key;
final _i30.MerchantModel merchant;
final _i31.MerchantModel merchant;
@override
String toString() {
@ -245,60 +263,60 @@ class MerchantDetailRouteArgs {
}
/// generated route for
/// [_i10.MerchantPage]
class MerchantRoute extends _i28.PageRouteInfo<void> {
const MerchantRoute({List<_i28.PageRouteInfo>? children})
/// [_i11.MerchantPage]
class MerchantRoute extends _i29.PageRouteInfo<void> {
const MerchantRoute({List<_i29.PageRouteInfo>? children})
: super(MerchantRoute.name, initialChildren: children);
static const String name = 'MerchantRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i10.MerchantPage();
return const _i11.MerchantPage();
},
);
}
/// generated route for
/// [_i11.NotificationPage]
class NotificationRoute extends _i28.PageRouteInfo<void> {
const NotificationRoute({List<_i28.PageRouteInfo>? children})
/// [_i12.NotificationPage]
class NotificationRoute extends _i29.PageRouteInfo<void> {
const NotificationRoute({List<_i29.PageRouteInfo>? children})
: super(NotificationRoute.name, initialChildren: children);
static const String name = 'NotificationRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i11.NotificationPage();
return const _i12.NotificationPage();
},
);
}
/// generated route for
/// [_i12.OnboardingPage]
class OnboardingRoute extends _i28.PageRouteInfo<void> {
const OnboardingRoute({List<_i28.PageRouteInfo>? children})
/// [_i13.OnboardingPage]
class OnboardingRoute extends _i29.PageRouteInfo<void> {
const OnboardingRoute({List<_i29.PageRouteInfo>? children})
: super(OnboardingRoute.name, initialChildren: children);
static const String name = 'OnboardingRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i12.OnboardingPage();
return const _i13.OnboardingPage();
},
);
}
/// generated route for
/// [_i13.OrderDetailPage]
class OrderDetailRoute extends _i28.PageRouteInfo<OrderDetailRouteArgs> {
/// [_i14.OrderDetailPage]
class OrderDetailRoute extends _i29.PageRouteInfo<OrderDetailRouteArgs> {
OrderDetailRoute({
_i29.Key? key,
required _i14.Order order,
List<_i28.PageRouteInfo>? children,
_i30.Key? key,
required _i15.Order order,
List<_i29.PageRouteInfo>? children,
}) : super(
OrderDetailRoute.name,
args: OrderDetailRouteArgs(key: key, order: order),
@ -307,11 +325,11 @@ class OrderDetailRoute extends _i28.PageRouteInfo<OrderDetailRouteArgs> {
static const String name = 'OrderDetailRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
final args = data.argsAs<OrderDetailRouteArgs>();
return _i13.OrderDetailPage(key: args.key, order: args.order);
return _i14.OrderDetailPage(key: args.key, order: args.order);
},
);
}
@ -319,9 +337,9 @@ class OrderDetailRoute extends _i28.PageRouteInfo<OrderDetailRouteArgs> {
class OrderDetailRouteArgs {
const OrderDetailRouteArgs({this.key, required this.order});
final _i29.Key? key;
final _i30.Key? key;
final _i14.Order order;
final _i15.Order order;
@override
String toString() {
@ -330,77 +348,77 @@ class OrderDetailRouteArgs {
}
/// generated route for
/// [_i14.OrderPage]
class OrderRoute extends _i28.PageRouteInfo<void> {
const OrderRoute({List<_i28.PageRouteInfo>? children})
/// [_i15.OrderPage]
class OrderRoute extends _i29.PageRouteInfo<void> {
const OrderRoute({List<_i29.PageRouteInfo>? children})
: super(OrderRoute.name, initialChildren: children);
static const String name = 'OrderRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i14.OrderPage();
return const _i15.OrderPage();
},
);
}
/// generated route for
/// [_i15.OtpPage]
class OtpRoute extends _i28.PageRouteInfo<void> {
const OtpRoute({List<_i28.PageRouteInfo>? children})
/// [_i16.OtpPage]
class OtpRoute extends _i29.PageRouteInfo<void> {
const OtpRoute({List<_i29.PageRouteInfo>? children})
: super(OtpRoute.name, initialChildren: children);
static const String name = 'OtpRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i15.OtpPage();
return const _i16.OtpPage();
},
);
}
/// generated route for
/// [_i16.PasswordPage]
class PasswordRoute extends _i28.PageRouteInfo<void> {
const PasswordRoute({List<_i28.PageRouteInfo>? children})
/// [_i17.PasswordPage]
class PasswordRoute extends _i29.PageRouteInfo<void> {
const PasswordRoute({List<_i29.PageRouteInfo>? children})
: super(PasswordRoute.name, initialChildren: children);
static const String name = 'PasswordRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i16.PasswordPage();
return const _i17.PasswordPage();
},
);
}
/// generated route for
/// [_i17.PaymentPage]
class PaymentRoute extends _i28.PageRouteInfo<void> {
const PaymentRoute({List<_i28.PageRouteInfo>? children})
/// [_i18.PaymentPage]
class PaymentRoute extends _i29.PageRouteInfo<void> {
const PaymentRoute({List<_i29.PageRouteInfo>? children})
: super(PaymentRoute.name, initialChildren: children);
static const String name = 'PaymentRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i17.PaymentPage();
return const _i18.PaymentPage();
},
);
}
/// generated route for
/// [_i18.PinPage]
class PinRoute extends _i28.PageRouteInfo<PinRouteArgs> {
/// [_i19.PinPage]
class PinRoute extends _i29.PageRouteInfo<PinRouteArgs> {
PinRoute({
_i29.Key? key,
_i30.Key? key,
bool isCreatePin = true,
String? title,
List<_i28.PageRouteInfo>? children,
List<_i29.PageRouteInfo>? children,
}) : super(
PinRoute.name,
args: PinRouteArgs(key: key, isCreatePin: isCreatePin, title: title),
@ -409,13 +427,13 @@ class PinRoute extends _i28.PageRouteInfo<PinRouteArgs> {
static const String name = 'PinRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
final args = data.argsAs<PinRouteArgs>(
orElse: () => const PinRouteArgs(),
);
return _i18.PinPage(
return _i19.PinPage(
key: args.key,
isCreatePin: args.isCreatePin,
title: args.title,
@ -427,7 +445,7 @@ class PinRoute extends _i28.PageRouteInfo<PinRouteArgs> {
class PinRouteArgs {
const PinRouteArgs({this.key, this.isCreatePin = true, this.title});
final _i29.Key? key;
final _i30.Key? key;
final bool isCreatePin;
@ -440,45 +458,45 @@ class PinRouteArgs {
}
/// generated route for
/// [_i19.PoinHistoryPage]
class PoinHistoryRoute extends _i28.PageRouteInfo<void> {
const PoinHistoryRoute({List<_i28.PageRouteInfo>? children})
/// [_i20.PoinHistoryPage]
class PoinHistoryRoute extends _i29.PageRouteInfo<void> {
const PoinHistoryRoute({List<_i29.PageRouteInfo>? children})
: super(PoinHistoryRoute.name, initialChildren: children);
static const String name = 'PoinHistoryRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i19.PoinHistoryPage();
return const _i20.PoinHistoryPage();
},
);
}
/// generated route for
/// [_i20.PoinPage]
class PoinRoute extends _i28.PageRouteInfo<void> {
const PoinRoute({List<_i28.PageRouteInfo>? children})
/// [_i21.PoinPage]
class PoinRoute extends _i29.PageRouteInfo<void> {
const PoinRoute({List<_i29.PageRouteInfo>? children})
: super(PoinRoute.name, initialChildren: children);
static const String name = 'PoinRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i20.PoinPage();
return const _i21.PoinPage();
},
);
}
/// generated route for
/// [_i21.ProductRedeemPage]
class ProductRedeemRoute extends _i28.PageRouteInfo<ProductRedeemRouteArgs> {
/// [_i22.ProductRedeemPage]
class ProductRedeemRoute extends _i29.PageRouteInfo<ProductRedeemRouteArgs> {
ProductRedeemRoute({
_i29.Key? key,
required _i20.Product product,
required _i20.PointCard pointCard,
List<_i28.PageRouteInfo>? children,
_i30.Key? key,
required _i21.Product product,
required _i21.PointCard pointCard,
List<_i29.PageRouteInfo>? children,
}) : super(
ProductRedeemRoute.name,
args: ProductRedeemRouteArgs(
@ -491,11 +509,11 @@ class ProductRedeemRoute extends _i28.PageRouteInfo<ProductRedeemRouteArgs> {
static const String name = 'ProductRedeemRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
final args = data.argsAs<ProductRedeemRouteArgs>();
return _i21.ProductRedeemPage(
return _i22.ProductRedeemPage(
key: args.key,
product: args.product,
pointCard: args.pointCard,
@ -511,11 +529,11 @@ class ProductRedeemRouteArgs {
required this.pointCard,
});
final _i29.Key? key;
final _i30.Key? key;
final _i20.Product product;
final _i21.Product product;
final _i20.PointCard pointCard;
final _i21.PointCard pointCard;
@override
String toString() {
@ -524,97 +542,97 @@ class ProductRedeemRouteArgs {
}
/// generated route for
/// [_i22.ProfilePage]
class ProfileRoute extends _i28.PageRouteInfo<void> {
const ProfileRoute({List<_i28.PageRouteInfo>? children})
/// [_i23.ProfilePage]
class ProfileRoute extends _i29.PageRouteInfo<void> {
const ProfileRoute({List<_i29.PageRouteInfo>? children})
: super(ProfileRoute.name, initialChildren: children);
static const String name = 'ProfileRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i22.ProfilePage();
return const _i23.ProfilePage();
},
);
}
/// generated route for
/// [_i23.RegisterPage]
class RegisterRoute extends _i28.PageRouteInfo<void> {
const RegisterRoute({List<_i28.PageRouteInfo>? children})
/// [_i24.RegisterPage]
class RegisterRoute extends _i29.PageRouteInfo<void> {
const RegisterRoute({List<_i29.PageRouteInfo>? children})
: super(RegisterRoute.name, initialChildren: children);
static const String name = 'RegisterRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i23.RegisterPage();
return const _i24.RegisterPage();
},
);
}
/// generated route for
/// [_i24.RewardPage]
class RewardRoute extends _i28.PageRouteInfo<void> {
const RewardRoute({List<_i28.PageRouteInfo>? children})
/// [_i25.RewardPage]
class RewardRoute extends _i29.PageRouteInfo<void> {
const RewardRoute({List<_i29.PageRouteInfo>? children})
: super(RewardRoute.name, initialChildren: children);
static const String name = 'RewardRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i24.RewardPage();
return const _i25.RewardPage();
},
);
}
/// generated route for
/// [_i25.SplashPage]
class SplashRoute extends _i28.PageRouteInfo<void> {
const SplashRoute({List<_i28.PageRouteInfo>? children})
/// [_i26.SplashPage]
class SplashRoute extends _i29.PageRouteInfo<void> {
const SplashRoute({List<_i29.PageRouteInfo>? children})
: super(SplashRoute.name, initialChildren: children);
static const String name = 'SplashRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i25.SplashPage();
return const _i26.SplashPage();
},
);
}
/// generated route for
/// [_i26.VoucherDetailPage]
class VoucherDetailRoute extends _i28.PageRouteInfo<void> {
const VoucherDetailRoute({List<_i28.PageRouteInfo>? children})
/// [_i27.VoucherDetailPage]
class VoucherDetailRoute extends _i29.PageRouteInfo<void> {
const VoucherDetailRoute({List<_i29.PageRouteInfo>? children})
: super(VoucherDetailRoute.name, initialChildren: children);
static const String name = 'VoucherDetailRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i26.VoucherDetailPage();
return const _i27.VoucherDetailPage();
},
);
}
/// generated route for
/// [_i27.VoucherPage]
class VoucherRoute extends _i28.PageRouteInfo<void> {
const VoucherRoute({List<_i28.PageRouteInfo>? children})
/// [_i28.VoucherPage]
class VoucherRoute extends _i29.PageRouteInfo<void> {
const VoucherRoute({List<_i29.PageRouteInfo>? children})
: super(VoucherRoute.name, initialChildren: children);
static const String name = 'VoucherRoute';
static _i28.PageInfo page = _i28.PageInfo(
static _i29.PageInfo page = _i29.PageInfo(
name,
builder: (data) {
return const _i27.VoucherPage();
return const _i28.VoucherPage();
},
);
}