172 lines
6.0 KiB
Dart
172 lines
6.0 KiB
Dart
import 'package:mobdr/config/constant.dart';
|
|
import 'package:mobdr/config/global_style.dart';
|
|
import 'package:mobdr/model/coupon_model.dart';
|
|
import 'package:mobdr/ui/home/coupon_detail.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
|
|
class CouponPage extends StatefulWidget {
|
|
@override
|
|
_CouponPageState createState() => _CouponPageState();
|
|
}
|
|
|
|
class _CouponPageState extends State<CouponPage> {
|
|
TextEditingController _etSearch = TextEditingController();
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_etSearch.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
iconTheme: IconThemeData(
|
|
color: GlobalStyle.appBarIconThemeColor,
|
|
),
|
|
elevation: GlobalStyle.appBarElevation,
|
|
title: Text(
|
|
'Coupon',
|
|
style: GlobalStyle.appBarTitle,
|
|
),
|
|
backgroundColor: GlobalStyle.appBarBackgroundColor,
|
|
systemOverlayStyle: GlobalStyle.appBarSystemOverlayStyle,
|
|
bottom: PreferredSize(
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
border: Border(
|
|
bottom: BorderSide(
|
|
color: Colors.grey[100]!,
|
|
width: 1.0,
|
|
)),
|
|
),
|
|
padding: EdgeInsets.fromLTRB(16, 0, 16, 12),
|
|
height: kToolbarHeight,
|
|
child: TextFormField(
|
|
controller: _etSearch,
|
|
textAlignVertical: TextAlignVertical.bottom,
|
|
maxLines: 1,
|
|
style: TextStyle(fontSize: 16, color: Colors.grey[600]),
|
|
onChanged: (textValue) {
|
|
setState(() {});
|
|
},
|
|
decoration: InputDecoration(
|
|
fillColor: Colors.grey[100],
|
|
filled: true,
|
|
hintText: 'Enter promo code',
|
|
prefixIcon: Icon(Icons.search, color: Colors.grey[500]),
|
|
suffixIcon: (_etSearch.text == '')
|
|
? null
|
|
: GestureDetector(
|
|
onTap: () {
|
|
setState(() {
|
|
_etSearch = TextEditingController(text: '');
|
|
});
|
|
},
|
|
child: Icon(Icons.close, color: Colors.grey[500])),
|
|
focusedBorder: UnderlineInputBorder(
|
|
borderRadius: BorderRadius.all(Radius.circular(5.0)),
|
|
borderSide: BorderSide(color: Colors.grey[200]!)),
|
|
enabledBorder: UnderlineInputBorder(
|
|
borderRadius: BorderRadius.all(Radius.circular(5.0)),
|
|
borderSide: BorderSide(color: Colors.grey[200]!),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
preferredSize: Size.fromHeight(kToolbarHeight),
|
|
),
|
|
),
|
|
body: WillPopScope(
|
|
onWillPop: () {
|
|
Navigator.pop(context);
|
|
return Future.value(true);
|
|
},
|
|
child: ListView.builder(
|
|
itemCount: couponData.length,
|
|
padding: EdgeInsets.fromLTRB(16, 0, 16, 16),
|
|
physics: AlwaysScrollableScrollPhysics(),
|
|
// Add one more item for progress indicator
|
|
itemBuilder: (BuildContext context, int index) {
|
|
return _buildCouponCard(couponData[index]);
|
|
},
|
|
),
|
|
));
|
|
}
|
|
|
|
Widget _buildCouponCard(CouponModel couponData) {
|
|
return Card(
|
|
margin: EdgeInsets.only(top: 16),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(4),
|
|
),
|
|
elevation: 2,
|
|
color: Colors.white,
|
|
child: GestureDetector(
|
|
behavior: HitTestBehavior.translucent,
|
|
onTap: () {
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(
|
|
builder: (context) =>
|
|
CouponDetailPage(couponData: couponData)));
|
|
},
|
|
child: Container(
|
|
padding: EdgeInsets.all(16),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Container(
|
|
margin: EdgeInsets.only(top: 5),
|
|
padding: EdgeInsets.fromLTRB(8, 4, 8, 4),
|
|
decoration: BoxDecoration(
|
|
color: SOFT_BLUE, borderRadius: BorderRadius.circular(5)),
|
|
child: Text('Limited Offer',
|
|
style: GlobalStyle.couponLimitedOffer),
|
|
),
|
|
SizedBox(height: 12),
|
|
Text(couponData.name, style: GlobalStyle.couponName),
|
|
SizedBox(height: 12),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Row(
|
|
children: [
|
|
GlobalStyle.iconTime,
|
|
SizedBox(
|
|
width: 4,
|
|
),
|
|
Text('Expiring in ' + couponData.day + ' days',
|
|
style: GlobalStyle.couponExpired),
|
|
],
|
|
),
|
|
GestureDetector(
|
|
onTap: () {
|
|
Fluttertoast.showToast(
|
|
msg: 'Coupon applied',
|
|
toastLength: Toast.LENGTH_LONG);
|
|
Navigator.pop(context);
|
|
},
|
|
child: Text('Use Now',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
color: SOFT_BLUE,
|
|
fontWeight: FontWeight.bold)),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|