mobdr/lib/ui/home/coupon.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)),
),
],
),
],
),
),
),
);
}
}