购票+常用乘客

master
章文轩 4 years ago
parent 9374ee6978
commit f5d307db13

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@ -0,0 +1,180 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:recook/constants/styles.dart';
import 'package:recook/pages/buy_tickets/airplane_detail_page.dart';
import 'package:recook/widgets/custom_app_bar.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/widgets/custom_image_button.dart';
import 'package:recook/widgets/no_data_view.dart';
import 'package:velocity_x/velocity_x.dart';
import 'airplane_reserve_page.dart';
class AddUsedPassagerPage extends StatefulWidget {
final int type;
final Item item;
AddUsedPassagerPage({
Key key,
@required this.type,
this.item,
}) : super(key: key);
@override
_AddUsedPassagerPageState createState() => _AddUsedPassagerPageState();
}
class _AddUsedPassagerPageState extends State<AddUsedPassagerPage> {
List<Item> _passengerList = [];
String _name = '';
String _num = '';
TextEditingController _controller1;
TextEditingController _controller2;
@override
void initState() {
super.initState();
print(widget.type);
if (widget.item != null) {
_controller1 = new TextEditingController(text: widget.item.item);
_controller2 = new TextEditingController(text: widget.item.num);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColor.frenchColor,
resizeToAvoidBottomInset: false,
appBar: CustomAppBar(
appBackground: Color(0xFFF9F9FB),
elevation: 0,
title: widget.type == 1 ? '添加常用旅客' : '编辑常用旅客',
themeData: AppThemes.themeDataGrey.appBarTheme,
),
floatingActionButton: Container(
color: Colors.transparent,
padding: EdgeInsets.only(bottom: 25.rw),
width: 345.rw,
child: widget.type == 1 ? _addPassger() : _addDeletePassger(),
),
body: _bulidBody(),
);
}
_bulidBody() {
return Column(
children: [
_editItem('乘客姓名', '请输入乘客姓名', 1),
_divider(),
_editItem('证件类型', '身份证', 2),
_divider(),
_editItem('证件号码', '请填写证件号码', 3),
],
);
}
_editItem(String head, String content, int type) {
return Container(
color: Colors.white,
height: 48.rw,
padding: EdgeInsets.symmetric(horizontal: 15.rw),
child: GestureDetector(
onTap: () {},
child: Row(
children: [
10.wb,
Text(
head,
style: TextStyle(fontSize: 16.rsp, color: Color(0xFF333333)),
),
30.wb,
type != 2
? TextField(
decoration: InputDecoration(
contentPadding: EdgeInsets.only(left: 10.rw),
hintText: content,
border: InputBorder.none,
hintStyle: AppTextStyle.generate(14 * 2.sp,
color: Color(0xff666666)),
),
controller: type == 1 ? _controller1 : _controller2,
keyboardType:
type == 3 ? TextInputType.number : TextInputType.text,
style: AppTextStyle.generate(14 * 2.sp),
maxLength: 18,
maxLines: 1,
onChanged: (text) {
if (type == 1) {
_name = text;
} else if (type == 3) {
_num = text;
}
},
).expand()
: Row(
children: [
20.wb,
Text(
content,
style: TextStyle(
fontSize: 14.rsp, color: Color(0xFF333333)),
),
],
)
],
),
),
);
}
_addPassger() {
return CustomImageButton(
height: 48.rw,
//padding: EdgeInsets.symmetric(vertical: 8),
title: "保存旅客信息",
backgroundColor: AppColor.themeColor,
color: Colors.white,
fontSize: 16 * 2.sp,
borderRadius: BorderRadius.all(Radius.circular(4.rw)),
onPressed: () {},
);
}
_addDeletePassger() {
return Row(
children: [
CustomImageButton(
height: 48.rw,
width: 116.rw,
//padding: EdgeInsets.symmetric(vertical: 8),
title: "删除",
backgroundColor: Colors.white,
color: AppColor.themeColor,
fontSize: 16 * 2.sp,
borderRadius: BorderRadius.all(Radius.circular(4.rw)),
border: Border.all(color: AppColor.themeColor, width: 1.rw),
onPressed: () {},
),
20.wb,
CustomImageButton(
height: 48.rw,
width: 219.rw,
//padding: EdgeInsets.symmetric(vertical: 8),
title: "保存旅客信息",
backgroundColor: AppColor.themeColor,
color: Colors.white,
fontSize: 16 * 2.sp,
borderRadius: BorderRadius.all(Radius.circular(4.rw)),
onPressed: () {},
)
],
);
}
_divider() {
return Divider(
color: Color(0xFFEEEEEE),
height: 0.5.rw,
thickness: rSize(0.5),
);
}
}

@ -32,10 +32,6 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
.add(Item(item: '小星星', choice: false, num: '12345678901234567890')); .add(Item(item: '小星星', choice: false, num: '12345678901234567890'));
_passengerList _passengerList
.add(Item(item: '吕小树', choice: false, num: '12345678901234567890')); .add(Item(item: '吕小树', choice: false, num: '12345678901234567890'));
_passengerList
.add(Item(item: '吕小树', choice: false, num: '12345678901234567890'));
_passengerList
.add(Item(item: '吕小树', choice: false, num: '12345678901234567890'));
} }
@override @override
@ -47,6 +43,7 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColor.frenchColor, backgroundColor: AppColor.frenchColor,
resizeToAvoidBottomInset: false,
appBar: CustomAppBar( appBar: CustomAppBar(
appBackground: Color(0xFFF9F9FB), appBackground: Color(0xFFF9F9FB),
elevation: 0, elevation: 0,
@ -84,6 +81,7 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
_bottomTool(bool bottom) { _bottomTool(bool bottom) {
return Container( return Container(
height: 50.rw, height: 50.rw,
color: Colors.white,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
@ -253,6 +251,7 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
), ),
10.wb,
Text( Text(
"联系电话", "联系电话",
style: TextStyle(fontSize: 14.rsp, color: Color(0xFF333333)), style: TextStyle(fontSize: 14.rsp, color: Color(0xFF333333)),
@ -260,8 +259,8 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
20.wb, 20.wb,
TextField( TextField(
decoration: InputDecoration( decoration: InputDecoration(
contentPadding: EdgeInsets.only(top: 10.rw, left: 20.rw), contentPadding: EdgeInsets.only(left: 20.rw, bottom: 4.rw),
hintText: '用于接取票信息', hintText: '用于接取票信息',
border: InputBorder.none, border: InputBorder.none,
hintStyle: hintStyle:
AppTextStyle.generate(14 * 2.sp, color: Color(0xff666666)), AppTextStyle.generate(14 * 2.sp, color: Color(0xff666666)),
@ -428,7 +427,8 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
children: [ children: [
Container( Container(
padding: EdgeInsets.symmetric(horizontal: 15.rw), padding: EdgeInsets.symmetric(horizontal: 15.rw),
height: 148.rw, height:
_getHeight(_passengerList.length, _ChoosePassengerList.length),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(4.rw)), borderRadius: BorderRadius.all(Radius.circular(4.rw)),
color: Colors.white, color: Colors.white,
@ -445,6 +445,22 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
).expand(); ).expand();
} }
_getHeight(int top, int bottom) {
if (top < 5) {
if (bottom == 0) {
return 98.rw;
} else {
return 105.rw + bottom * 31.rw;
}
} else if (top > 5) {
if (bottom <= 8) {
return 105.rw + bottom * 31.rw + (top ~/ 4 - 1) * 53.rw;
} else {
return 105.rw + 8 * 31.rw + (top ~/ 4 - 1) * 53.rw;
}
}
}
Widget _getItemContainer( Widget _getItemContainer(
Item item, index, VoidCallback onPressed, bool selected) { Item item, index, VoidCallback onPressed, bool selected) {
return GestureDetector( return GestureDetector(
@ -452,21 +468,26 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
child: Container( child: Container(
width: 68.rw, width: 68.rw,
height: 38.rw, height: 38.rw,
padding: EdgeInsets.only(top: 2.rw),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.blue, color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(3.rw)), borderRadius: BorderRadius.all(Radius.circular(3.rw)),
border: Border.all( border: Border.all(
color: selected ? Color(0xFFD5101A) : Color(0xFF999999), color: selected ? Color(0xFFD5101A) : Color(0xFF999999),
width: 0.5.rw)), width: 0.5.rw)),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment:
selected ? MainAxisAlignment.end : MainAxisAlignment.center,
children: [ children: [
Text( Text(
item.item, item.item,
style: TextStyle(fontSize: 14.rsp, color: Color(0xFF666666)), style: TextStyle(fontSize: 14.rsp, color: Color(0xFF666666)),
), ),
!selected ? 5.hb : SizedBox(),
selected selected
? Container( ? Container(
//color: Colors.yellow,
margin: EdgeInsets.only(left: 10.rw),
alignment: Alignment.bottomRight, alignment: Alignment.bottomRight,
width: 68.rw, width: 68.rw,
child: Container( child: Container(
@ -480,7 +501,7 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
bottomRight: Radius.circular(3.rw)), bottomRight: Radius.circular(3.rw)),
), ),
child: Icon(CupertinoIcons.check_mark, child: Icon(CupertinoIcons.check_mark,
size: 20, color: Colors.white), size: 10, color: Colors.white),
), ),
) )
: SizedBox(), : SizedBox(),
@ -542,11 +563,16 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
return _getItemContainer(_passengerList[index], index, () { return _getItemContainer(_passengerList[index], index, () {
setState(() { setState(() {
_passengerList[index].choice = !_passengerList[index].choice; _passengerList[index].choice = !_passengerList[index].choice;
for (var i = 0; i < _passengerList.length; i++) { if (_passengerList[index].choice) {
if (_passengerList[i].choice) { _ChoosePassengerList.add(_passengerList[index]);
_ChoosePassengerList.add(_passengerList[i]); } else {
if (_ChoosePassengerList.indexOf(_passengerList[index]) !=
-1) {
_ChoosePassengerList.removeAt(
_ChoosePassengerList.indexOf(_passengerList[index]));
} }
} }
setState(() {});
}); });
}, _passengerList[index].choice); }, _passengerList[index].choice);
}, childCount: _passengerList.length), }, childCount: _passengerList.length),
@ -558,18 +584,24 @@ class _AirplaneDetailPageState extends State<AirplaneDetailPage> {
)), )),
SliverToBoxAdapter(child: 20.hb), SliverToBoxAdapter(child: 20.hb),
SliverList( SliverList(
delegate: SliverChildBuilderDelegate((content, index) { delegate: _ChoosePassengerList.length != 0
return _getPassengerItem(_passengerList[index], index, () { ? SliverChildBuilderDelegate((content, index) {
setState(() { return _getPassengerItem(_ChoosePassengerList[index], index,
_passengerList[index].choice = !_passengerList[index].choice; () {
for (var i = 0; i < _passengerList.length; i++) { setState(() {
if (_passengerList[i].choice) { _ChoosePassengerList[index].choice =
_ChoosePassengerList.add(_passengerList[i]); !_ChoosePassengerList[index].choice;
} for (var i = 0; i < _ChoosePassengerList.length; i++) {
} if (_ChoosePassengerList[i].choice) {
}); _ChoosePassengerList.add(_ChoosePassengerList[i]);
}); }
}, childCount: 3), }
});
});
}, childCount: _ChoosePassengerList.length)
: SliverChildBuilderDelegate((content, index) {
return SizedBox();
}, childCount: 0),
), ),
SliverToBoxAdapter(child: 20.hb), SliverToBoxAdapter(child: 20.hb),
], ],

@ -6,6 +6,8 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:recook/constants/styles.dart'; import 'package:recook/constants/styles.dart';
import 'package:recook/pages/buy_tickets/tickets_order_page.dart';
import 'package:recook/pages/buy_tickets/used_passager_page.dart';
import 'package:recook/utils/permission_tool.dart'; import 'package:recook/utils/permission_tool.dart';
import 'package:recook/widgets/alert.dart'; import 'package:recook/widgets/alert.dart';
import 'package:recook/widgets/calendar/calendar_vertial_widget.dart'; import 'package:recook/widgets/calendar/calendar_vertial_widget.dart';
@ -27,6 +29,23 @@ class ChooseTicketsTypePage extends StatefulWidget {
} }
class _ChooseTicketsTypePageState extends State<ChooseTicketsTypePage> { class _ChooseTicketsTypePageState extends State<ChooseTicketsTypePage> {
final items = [
BottomNavigationBarItem(
icon: Icon(
Icons.pages,
size: rSize(14),
color: Color(0xFF666666),
),
title: Text('订单'),
),
BottomNavigationBarItem(
icon: Icon(
Icons.pages,
size: rSize(14),
color: Color(0xFF666666),
),
title: Text("常用旅客")),
];
// //
int _chooseType = 1; //1 2 3 int _chooseType = 1; //1 2 3
String _originText = '出发地'; String _originText = '出发地';
@ -74,9 +93,25 @@ class _ChooseTicketsTypePageState extends State<ChooseTicketsTypePage> {
title: '瑞库客购票', title: '瑞库客购票',
themeData: AppThemes.themeDataGrey.appBarTheme, themeData: AppThemes.themeDataGrey.appBarTheme,
), ),
bottomNavigationBar: BottomNavigationBar(
items: items,
onTap: onTap,
backgroundColor: Colors.white,
unselectedItemColor: Color(0xFF666666),
selectedItemColor: Color(0xFF666666),
type: BottomNavigationBarType.fixed,
),
body: _bodyWidget()); body: _bodyWidget());
} }
void onTap(int index) {
if (index == 0) {
Get.to(TicketsOrderPage());
} else {
Get.to(UsedPassagerPage());
}
}
_bodyWidget() { _bodyWidget() {
return Container( return Container(
decoration: new BoxDecoration( decoration: new BoxDecoration(

@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
class TicketsOrderPage extends StatefulWidget {
final String code; //
TicketsOrderPage({Key key, this.code}) : super(key: key);
@override
_TicketsOrderPageState createState() => _TicketsOrderPageState();
}
class _TicketsOrderPageState extends State<TicketsOrderPage> {
@override
Widget build(BuildContext context) {
// TODO: implement build
throw UnimplementedError();
}
}

@ -0,0 +1,126 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:recook/constants/styles.dart';
import 'package:recook/pages/buy_tickets/add_used_passager_page.dart';
import 'package:recook/pages/buy_tickets/airplane_detail_page.dart';
import 'package:recook/widgets/custom_app_bar.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/widgets/custom_image_button.dart';
import 'package:recook/widgets/no_data_view.dart';
import 'package:velocity_x/velocity_x.dart';
import 'airplane_reserve_page.dart';
class UsedPassagerPage extends StatefulWidget {
UsedPassagerPage({Key key}) : super(key: key);
@override
_UsedPassagerPageState createState() => _UsedPassagerPageState();
}
class _UsedPassagerPageState extends State<UsedPassagerPage> {
List<Item> _passengerList = [];
@override
void initState() {
super.initState();
_passengerList
.add(Item(item: '张伟', choice: false, num: '12345678901234567890'));
_passengerList
.add(Item(item: '欧阳青青', choice: false, num: '12345678901234567'));
_passengerList
.add(Item(item: '小星星', choice: false, num: '12345678901234567890'));
_passengerList
.add(Item(item: '吕小树', choice: false, num: '12345678901234567890'));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColor.frenchColor,
appBar: CustomAppBar(
appBackground: Color(0xFFF9F9FB),
elevation: 0,
title: '常用旅客',
themeData: AppThemes.themeDataGrey.appBarTheme,
),
floatingActionButton: Container(
color: Colors.transparent,
padding: EdgeInsets.only(bottom: 25.rw),
width: 345.rw,
child: _addPassger(),
),
body: _passengerList.length != 0
? _bulidBody()
: NoDataView(
title: '抱歉,您还没有添加任何常用旅客信息',
),
);
}
_bulidBody() {
return ListView.separated(
padding: EdgeInsets.only(bottom: 90.rw),
separatorBuilder: (BuildContext context, int index) {
return Divider(
color: Color(0xFFEEEEEE),
height: 0.5.rw,
thickness: rSize(0.5),
indent: 15.rw,
);
},
physics: AlwaysScrollableScrollPhysics(),
itemCount: _passengerList.length,
itemBuilder: (context, index) {
return MaterialButton(
padding: EdgeInsets.zero,
onPressed: () {
Get.to(
AddUsedPassagerPage(type: 2, item: _passengerList[index]));
},
child: _ticketsItem(_passengerList[index]));
});
}
_ticketsItem(Item item) {
return Container(
color: Colors.white,
height: 52.rw,
padding: EdgeInsets.symmetric(horizontal: 15.rw),
child: GestureDetector(
onTap: () {},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
item.item,
style: TextStyle(fontSize: 16.rsp, color: Color(0xFF333333)),
),
Icon(AppIcons.icon_next, size: 13.rw, color: Color(0xFF999999)),
],
),
],
),
),
);
}
_addPassger() {
return CustomImageButton(
height: 48.rw,
//padding: EdgeInsets.symmetric(vertical: 8),
title: "添加旅客信息",
backgroundColor: AppColor.themeColor,
color: Colors.white,
fontSize: 16 * 2.sp,
borderRadius: BorderRadius.all(Radius.circular(4.rw)),
onPressed: () {
Get.to(AddUsedPassagerPage(
type: 1,
));
},
);
}
}

@ -23,6 +23,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart' hide Response; import 'package:get/get.dart' hide Response;
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:power_logger/power_logger.dart'; import 'package:power_logger/power_logger.dart';
import 'package:recook/pages/live/pages/discovery_page.dart';
import 'package:sharesdk_plugin/sharesdk_plugin.dart'; import 'package:sharesdk_plugin/sharesdk_plugin.dart';
import 'package:recook/base/base_store_state.dart'; import 'package:recook/base/base_store_state.dart';
@ -88,6 +89,9 @@ class HomeAcitvityItem {
} }
class HomePage extends StatefulWidget { class HomePage extends StatefulWidget {
final TabController tabController;
const HomePage({Key key, this.tabController}) : super(key: key);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
return _HomePageState(); return _HomePageState();
@ -1030,13 +1034,18 @@ class _HomePageState extends BaseStoreState<HomePage>
_buttonTitleRow( _buttonTitleRow(
// R.ASSETS_LOTTERY_REDEEM_LOTTERY_ICON_PNG, // R.ASSETS_LOTTERY_REDEEM_LOTTERY_ICON_PNG,
AppConfig.getShowCommission() AppConfig.getShowCommission()
? R.ASSETS_HOME_MENU_BB_PNG ? R.ASSETS_HOME_MENU_BBB_PNG
: R.ASSETS_LISTTEMP_HOMELIFE_ICON_PNG, : R.ASSETS_LISTTEMP_HOMELIFE_ICON_PNG,
// AppConfig.getShowCommission() ? "我的店铺" : "家居生活", // AppConfig.getShowCommission() ? "我的店铺" : "家居生活",
// '彩票兑换', // '彩票兑换',
'彩票频道', //2021 7,27 ios
'精彩发现',
onPressed: () { onPressed: () {
AppRouter.push(context, RouteName.REDEEM_LOTTERY_PAGE); //AppRouter.push(context, RouteName.REDEEM_LOTTERY_PAGE);
widget.tabController.animateTo(2);
UserManager.instance.selectTabbar.value =
!UserManager.instance.selectTabbar.value;
setState(() {});
}, },
// () { // () {
// if (AppConfig.getShowCommission()) { // if (AppConfig.getShowCommission()) {

@ -203,7 +203,9 @@ class _TabBarWidgetState extends State<TabBarWidget>
needAnimation: false, needAnimation: false,
controller: _tabController, controller: _tabController,
children: <Widget>[ children: <Widget>[
HomePage(), HomePage(
tabController: _tabController,
),
GoodsHotListPage(), GoodsHotListPage(),
DiscoveryPage(), DiscoveryPage(),
// BusinessPage(), // BusinessPage(),

@ -31,9 +31,13 @@ class NoDataView extends StatelessWidget {
child: Image.asset( child: Image.asset(
AppImageName.img_no_data, AppImageName.img_no_data,
)), )),
Text( Container(
this.title, alignment: Alignment.center,
style: AppTextStyle.generate(16, color: Colors.grey[400], fontWeight: FontWeight.w300), child: Text(
this.title,
style: AppTextStyle.generate(16,
color: Colors.grey[400], fontWeight: FontWeight.w300),
),
) )
], ],
), ),

Loading…
Cancel
Save