对接彩票历史接口

master
laiiihz 5 years ago
parent e0f2885cf7
commit 6c8bf384fb

@ -365,6 +365,9 @@ class LotteryAPI {
///
static const String list = "/v1/ticket/list";
///
static const String history = "/v1/ticket/history";
///
static const String redeem_history = "/v1/ticket/order/list";
}

@ -1,22 +1,37 @@
import 'package:flutter/material.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/constants.dart';
import 'package:recook/pages/lottery/redeem_lottery_page.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/pages/lottery/models/lottery_history_model.dart';
import 'package:recook/pages/lottery/tools/lottery_tool.dart';
import 'package:recook/pages/lottery/widget/lottery_result_boxes.dart';
import 'package:recook/pages/lottery/widget/lottery_scaffold.dart';
import 'package:recook/widgets/refresh_widget.dart';
class LotteryHistoryPage extends StatefulWidget {
final dynamic arguments;
LotteryHistoryPage({Key key, this.arguments}) : super(key: key);
final int id;
LotteryHistoryPage({Key key, @required this.id}) : super(key: key);
@override
_LotteryHistoryPageState createState() => _LotteryHistoryPageState();
}
class _LotteryHistoryPageState extends State<LotteryHistoryPage> {
List<LotteryHistoryModel> _models = [];
int page = 1;
GSRefreshController _refreshController = GSRefreshController();
@override
void initState() {
super.initState();
Future.delayed(Duration.zero, () {
_refreshController.requestRefresh();
});
}
@override
Widget build(BuildContext context) {
return LotteryScaffold(
title: widget.arguments['type'] ? '双色球' : '大乐透',
title: widget.id == 1 ? '双色球' : '大乐透',
red: true,
appBarBottom: PreferredSize(
child: Container(
@ -28,7 +43,7 @@ class _LotteryHistoryPageState extends State<LotteryHistoryPage> {
width: double.infinity,
alignment: Alignment.centerLeft,
child: Text(
widget.arguments['type'] ? '每周二、四、日21:15开奖' : '每周一、三、六20:30开奖',
widget.id == 1 ? '每周二、四、日21:15开奖' : '每周一、三、六20:30开奖',
style: TextStyle(
color: Color(0xFF666666),
fontSize: rSP(14),
@ -37,24 +52,49 @@ class _LotteryHistoryPageState extends State<LotteryHistoryPage> {
),
preferredSize: Size.fromHeight(rSize(40)),
),
body: ListView.separated(
separatorBuilder: (context, index) {
return Divider(
height: rSize(1),
color: Color(0xFFEEEEEE),
thickness: rSize(1),
);
body: RefreshWidget(
controller: _refreshController,
onRefresh: () async {
page = 1;
getHistory().then((models) {
_refreshController.refreshCompleted();
setState(() {
_models = models;
});
});
},
padding: EdgeInsets.only(top: rSize(10)),
itemBuilder: (context, index) {
return _buildLotteryCard();
onLoadMore: () async {
page++;
getHistory().then((models) {
if (models.isEmpty)
_refreshController.loadNoData();
else {
_refreshController.loadComplete();
setState(() {
_models.addAll(models);
});
}
});
},
itemCount: 10,
body: ListView.separated(
separatorBuilder: (context, index) {
return Divider(
height: rSize(1),
color: Color(0xFFEEEEEE),
thickness: rSize(1),
);
},
padding: EdgeInsets.only(top: rSize(10)),
itemBuilder: (context, index) {
return _buildLotteryCard(_models[index]);
},
itemCount: _models.length,
),
),
);
}
_buildLotteryCard() {
_buildLotteryCard(LotteryHistoryModel model) {
return Container(
padding: EdgeInsets.all(rSize(16)),
color: Colors.white,
@ -63,7 +103,7 @@ class _LotteryHistoryPageState extends State<LotteryHistoryPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'20200820',
'${model.number}',
style: TextStyle(
fontSize: rSP(14),
color: Color(0xFF333333),
@ -74,8 +114,8 @@ class _LotteryHistoryPageState extends State<LotteryHistoryPage> {
children: [
Expanded(
child: LotteryResultBoxes(
redBalls: [1, 2, 3, 4, 5, 6],
blueBalls: [7],
redBalls: parseBalls(model.bonusCode),
blueBalls: parseBalls(model.bonusCode, red: false),
),
),
SizedBox(width: rSize(64)),
@ -85,4 +125,20 @@ class _LotteryHistoryPageState extends State<LotteryHistoryPage> {
),
);
}
Future<List<LotteryHistoryModel>> getHistory() async {
ResultData resultData = await HttpManager.post(LotteryAPI.history, {
'lotteryId': widget.id,
"limit": 10,
"page": page,
});
return resultData.data['data'] == null
? []
: resultData.data['data']['data'] == null
? []
: (resultData.data['data']['data'] as List)
.map((e) => LotteryHistoryModel.fromJson(e))
.toList();
}
}

@ -1,18 +1,29 @@
import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/pages/lottery/lottery_cart_model.dart';
import 'package:recook/pages/lottery/lottery_history_page.dart';
import 'package:recook/pages/lottery/models/lottery_list_model.dart';
import 'package:recook/pages/lottery/redeem_lottery_page.dart';
import 'package:recook/pages/lottery/tools/lottery_tool.dart';
import 'package:recook/pages/lottery/widget/lottery_ball.dart';
import 'package:recook/pages/lottery/widget/lottery_result_boxes.dart';
import 'package:recook/pages/lottery/widget/lottery_scaffold.dart';
import 'package:recook/pages/lottery/widget/lottery_view.dart';
import 'package:recook/utils/custom_route.dart';
import 'package:recook/widgets/custom_image_button.dart';
import 'package:recook/const/resource.dart';
class LotteryPickerPage extends StatefulWidget {
final dynamic arguments;
LotteryPickerPage({Key key, @required this.arguments}) : super(key: key);
final bool isDouble;
final LotteryListModel lotteryListModel;
LotteryPickerPage({
Key key,
@required this.isDouble,
@required this.lotteryListModel,
}) : super(key: key);
@override
_LotteryPickerPageState createState() => _LotteryPickerPageState();
@ -51,7 +62,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
right: rSize(12),
),
child: Text(
'2020077',
'${widget.lotteryListModel.last.number}',
style: TextStyle(
color: Color(0xFFE02020),
fontSize: rSP(12),
@ -61,8 +72,11 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
Expanded(
child: LotteryResultBoxes(
small: true,
redBalls: [1, 2, 3, 4, 5, 6],
blueBalls: [1],
redBalls: parseBalls(widget.lotteryListModel.last.bonusCode),
blueBalls: parseBalls(
widget.lotteryListModel.last.bonusCode,
red: false,
),
),
),
SizedBox(width: rSize(80)),
@ -74,7 +88,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
title: Column(
children: [
Text(
widget.arguments['type'] ? '双色球' : '大乐透',
widget.isDouble ? '双色球' : '大乐透',
style: TextStyle(
color: Colors.white,
fontSize: rSP(18),
@ -97,7 +111,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
onPressed: () => AppRouter.push(
context,
RouteName.LOTTERY_HELP_PAGE,
arguments: {'type': widget.arguments['type']},
arguments: {'type': widget.isDouble},
),
child: Image.asset(
R.ASSETS_LOTTERY_REDEEM_LOTTERY_DETAIL_PNG,
@ -110,11 +124,12 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
width: rSize(20 + 15.0),
child: FlatButton(
padding: EdgeInsets.zero,
onPressed: () => AppRouter.push(
context,
RouteName.LOTTERY_HISTORY_PAGE,
arguments: {'type': widget.arguments['type']},
),
onPressed: () {
CRoute.push(
context,
LotteryHistoryPage(id: widget.lotteryListModel.id),
);
},
child: Image.asset(
R.ASSETS_LOTTERY_REDEEM_LOTTERY_HISTORY_PNG,
width: rSize(20),
@ -146,7 +161,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
LotteryView(
colorType: LotteryColorType.RED,
key: _redLotteryViewKey,
type: widget.arguments['type']
type: widget.isDouble
? LotteryType.DOUBLE_LOTTERY
: LotteryType.BIG_LOTTERY,
onSelect: (selected, focused) {
@ -164,7 +179,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
},
key: _blueLotteryViewKey,
colorType: LotteryColorType.BLUE,
type: widget.arguments['type']
type: widget.isDouble
? LotteryType.DOUBLE_LOTTERY
: LotteryType.BIG_LOTTERY,
),
@ -275,9 +290,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
children: [
lotteryShots == 0
? Text(
widget.arguments['type']
? '至少选6红球1蓝球'
: '至少选5红球2蓝球',
widget.isDouble ? '至少选6红球1蓝球' : '至少选5红球2蓝球',
style: TextStyle(
height: 1,
fontSize: rSP(12),
@ -337,7 +350,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
bigShots += element.shots;
});
final storeSize =
widget.arguments['type'] ? doubleShots : bigShots;
widget.isDouble ? doubleShots : bigShots;
return Stack(
overflow: Overflow.visible,
children: [
@ -408,7 +421,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
_addShot() {
if (lotteryShots == 0) {
showToast(widget.arguments['type'] ? '至少选6红球1蓝球' : '至少选5红球2蓝球');
showToast(widget.isDouble ? '至少选6红球1蓝球' : '至少选5红球2蓝球');
} else {
_addOneShot();
_clearAllSelect();
@ -417,7 +430,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
}
_complateShot() {
final bool isDoubleLottery = widget.arguments['type'];
final bool isDoubleLottery = widget.isDouble;
///
final bool emptyCart = isDoubleLottery
@ -435,19 +448,19 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
_addOneShot();
_clearAllSelect();
AppRouter.push(context, RouteName.LOTTERY_CART_PAGE,
arguments: {'type': widget.arguments['type']})
arguments: {'type': widget.isDouble})
.then((value) => setState(() {}));
} else if (emptySelect && !emptyCart) {
AppRouter.push(context, RouteName.LOTTERY_CART_PAGE,
arguments: {'type': widget.arguments['type']})
arguments: {'type': widget.isDouble})
.then((value) => setState(() {}));
} else if (shotZero) {
showToast(widget.arguments['type'] ? '至少选6红球1蓝球' : '至少选5红球2蓝球');
showToast(widget.isDouble ? '至少选6红球1蓝球' : '至少选5红球2蓝球');
} else {
_addOneShot();
_clearAllSelect();
AppRouter.push(context, RouteName.LOTTERY_CART_PAGE,
arguments: {'type': widget.arguments['type']})
arguments: {'type': widget.isDouble})
.then((value) => setState(() {}));
}
}
@ -462,11 +475,9 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
_addOneShot() {
LotteryCartStore.add1Shot(
widget.arguments['type']
? LotteryType.DOUBLE_LOTTERY
: LotteryType.BIG_LOTTERY,
widget.isDouble ? LotteryType.DOUBLE_LOTTERY : LotteryType.BIG_LOTTERY,
LotteryCartModel(
type: widget.arguments['type']
type: widget.isDouble
? LotteryType.DOUBLE_LOTTERY
: LotteryType.BIG_LOTTERY,
redBalls: _redBalls,
@ -479,9 +490,7 @@ class _LotteryPickerPageState extends State<LotteryPickerPage> {
_countLotteryShot() {
lotteryShots = LotteryCartStore.countLotteryBalls(
widget.arguments['type']
? LotteryType.DOUBLE_LOTTERY
: LotteryType.BIG_LOTTERY,
widget.isDouble ? LotteryType.DOUBLE_LOTTERY : LotteryType.BIG_LOTTERY,
redBalls: _redBalls,
blueBalls: _blueBalls,
focusedRedBalls: _focusedRedBalls,

@ -0,0 +1,48 @@
class LotteryHistoryModel {
int id;
int lotteryId;
String number;
String startTime;
String stopTime;
String officialStartTime;
String officialStopTime;
int status;
String bonusCode;
LotteryHistoryModel(
{this.id,
this.lotteryId,
this.number,
this.startTime,
this.stopTime,
this.officialStartTime,
this.officialStopTime,
this.status,
this.bonusCode});
LotteryHistoryModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
lotteryId = json['lottery_id'];
number = json['number'];
startTime = json['start_time'];
stopTime = json['stop_time'];
officialStartTime = json['official_start_time'];
officialStopTime = json['official_stop_time'];
status = json['status'];
bonusCode = json['bonus_code'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['lottery_id'] = this.lotteryId;
data['number'] = this.number;
data['start_time'] = this.startTime;
data['stop_time'] = this.stopTime;
data['official_start_time'] = this.officialStartTime;
data['official_stop_time'] = this.officialStopTime;
data['status'] = this.status;
data['bonus_code'] = this.bonusCode;
return data;
}
}

@ -2,9 +2,12 @@ import 'package:flutter/material.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/pages/lottery/lottery_picker_page.dart';
import 'package:recook/pages/lottery/models/lottery_list_model.dart';
import 'package:recook/pages/lottery/tools/lottery_tool.dart';
import 'package:recook/pages/lottery/widget/lottery_result_boxes.dart';
import 'package:recook/pages/lottery/widget/lottery_scaffold.dart';
import 'package:recook/utils/custom_route.dart';
import 'package:recook/widgets/custom_image_button.dart';
enum LotteryType {
@ -81,23 +84,18 @@ class _RedeemLotteryPageState extends State<RedeemLotteryPage> {
}
List<int> redBalls, blueBalls;
if (TextUtils.isNotEmpty(model.last.bonusCode)) {
redBalls = model.last.bonusCode
.split('#')[0]
.split(',')
.map((e) => int.parse(e))
.toList();
blueBalls = model.last.bonusCode
.split('#')[1]
.split(',')
.map((e) => int.parse(e))
.toList();
redBalls = parseBalls(model.last.bonusCode);
blueBalls = parseBalls(model.last.bonusCode, red: false);
}
return CustomImageButton(
onPressed: () {
AppRouter.push(context, RouteName.LOTTERY_PICKER_PAGE,
arguments: {'type': model.id == 1});
CRoute.push(
context,
LotteryPickerPage(
isDouble: model.id == 1,
lotteryListModel: model,
));
},
child: Container(
padding: EdgeInsets.all(rSize(16)),

@ -0,0 +1,22 @@
import 'package:recook/constants/header.dart';
///
///
///example:
///
///parseBalls('01,02,03,04,05,06#07')
///
///01,02,03,04,05,06#07 => [1,2,3,4,5,6] or [7]
List<int> parseBalls(String balls, {bool red: true}) {
if (TextUtils.isEmpty(balls)) {
return [];
} else {
return balls
.split('#')[red ? 0 : 1]
.split(',')
.map(
(e) => int.parse(e),
)
.toList();
}
}

@ -30,7 +30,6 @@ import 'package:recook/pages/lottery/lottery_help_page.dart';
import 'package:recook/pages/lottery/lottery_history_page.dart';
import 'package:recook/pages/lottery/lottery_order_detail_page.dart';
import 'package:recook/pages/lottery/lottery_order_page.dart';
import 'package:recook/pages/lottery/lottery_picker_page.dart';
import 'package:recook/pages/lottery/redeem_lottery_page.dart';
import 'package:recook/pages/shop/cumulative_income_page.dart';
import 'package:recook/pages/shop/member_benefits_page.dart';
@ -317,15 +316,9 @@ class RouteName {
///
static const String REDEEM_LOTTERY_PAGE = "/ReddemLotteryPage";
///
static const String LOTTERY_PICKER_PAGE = "/LotteryPickerPage";
///
static const String LOTTERY_HELP_PAGE = "/LotteryHelpPage";
///
static const String LOTTERY_HISTORY_PAGE = "/LotteryHistoryPage";
///
static const String LOTTERY_ORDER_PAGE = "/LotteryOrderPage";
@ -637,12 +630,9 @@ final Map<String, RouteBuilder> _routes = {
RouteName.USER_INVOICE_DETAIL_INFOMATION: (contex, {arguments}) =>
InvoiceDetailInfomationPage(arguments: arguments),
RouteName.REDEEM_LOTTERY_PAGE: (context, {arguments}) => RedeemLotteryPage(),
RouteName.LOTTERY_PICKER_PAGE: (context, {arguments}) =>
LotteryPickerPage(arguments: arguments),
RouteName.LOTTERY_HELP_PAGE: (context, {arguments}) =>
LotteryHelpPage(arguments: arguments),
RouteName.LOTTERY_HISTORY_PAGE: (context, {arguments}) =>
LotteryHistoryPage(arguments: arguments),
RouteName.LOTTERY_ORDER_PAGE: (context, {arguments}) => LotteryOrderPage(),
RouteName.LOTTERY_ORDER_DETAIL_PAGE: (context, {arguments}) =>
LotteryOrderDetailPage(arguments: arguments),

Loading…
Cancel
Save