购票+常用乘客

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

@ -6,6 +6,8 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.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/widgets/alert.dart';
import 'package:recook/widgets/calendar/calendar_vertial_widget.dart';
@ -27,6 +29,23 @@ class ChooseTicketsTypePage extends StatefulWidget {
}
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
String _originText = '出发地';
@ -74,9 +93,25 @@ class _ChooseTicketsTypePageState extends State<ChooseTicketsTypePage> {
title: '瑞库客购票',
themeData: AppThemes.themeDataGrey.appBarTheme,
),
bottomNavigationBar: BottomNavigationBar(
items: items,
onTap: onTap,
backgroundColor: Colors.white,
unselectedItemColor: Color(0xFF666666),
selectedItemColor: Color(0xFF666666),
type: BottomNavigationBarType.fixed,
),
body: _bodyWidget());
}
void onTap(int index) {
if (index == 0) {
Get.to(TicketsOrderPage());
} else {
Get.to(UsedPassagerPage());
}
}
_bodyWidget() {
return Container(
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:permission_handler/permission_handler.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:recook/base/base_store_state.dart';
@ -88,6 +89,9 @@ class HomeAcitvityItem {
}
class HomePage extends StatefulWidget {
final TabController tabController;
const HomePage({Key key, this.tabController}) : super(key: key);
@override
State<StatefulWidget> createState() {
return _HomePageState();
@ -1030,13 +1034,18 @@ class _HomePageState extends BaseStoreState<HomePage>
_buttonTitleRow(
// R.ASSETS_LOTTERY_REDEEM_LOTTERY_ICON_PNG,
AppConfig.getShowCommission()
? R.ASSETS_HOME_MENU_BB_PNG
? R.ASSETS_HOME_MENU_BBB_PNG
: R.ASSETS_LISTTEMP_HOMELIFE_ICON_PNG,
// AppConfig.getShowCommission() ? "我的店铺" : "家居生活",
// '彩票兑换',
'彩票频道',
//2021 7,27 ios
'精彩发现',
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()) {

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

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

Loading…
Cancel
Save