From f5d307db133d8fb3dbdd7b78faeb6f7283b19dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AB=A0=E6=96=87=E8=BD=A9?= <12812285557@qq.com> Date: Tue, 27 Jul 2021 18:16:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=AD=E7=A5=A8+=E5=B8=B8=E7=94=A8=E4=B9=98?= =?UTF-8?q?=E5=AE=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/home_menu_bbb.png | Bin 0 -> 13779 bytes .../buy_tickets/add_used_passager_page.dart | 180 ++++++++++++++++++ .../buy_tickets/airplane_detail_page.dart | 82 +++++--- .../buy_tickets/choose_tickets_type_page.dart | 35 ++++ lib/pages/buy_tickets/tickets_order_page.dart | 17 ++ lib/pages/buy_tickets/used_passager_page.dart | 126 ++++++++++++ lib/pages/home/home_page.dart | 15 +- lib/pages/tabBar/TabbarWidget.dart | 4 +- lib/widgets/no_data_view.dart | 10 +- 9 files changed, 437 insertions(+), 32 deletions(-) create mode 100644 assets/home_menu_bbb.png create mode 100644 lib/pages/buy_tickets/add_used_passager_page.dart create mode 100644 lib/pages/buy_tickets/tickets_order_page.dart create mode 100644 lib/pages/buy_tickets/used_passager_page.dart diff --git a/assets/home_menu_bbb.png b/assets/home_menu_bbb.png new file mode 100644 index 0000000000000000000000000000000000000000..1f480b067045c195b709295e32a977b991ab407d GIT binary patch literal 13779 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 _AddUsedPassagerPageState(); +} + +class _AddUsedPassagerPageState extends State { + List _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), + ); + } +} diff --git a/lib/pages/buy_tickets/airplane_detail_page.dart b/lib/pages/buy_tickets/airplane_detail_page.dart index 3678cbf..02c24b4 100644 --- a/lib/pages/buy_tickets/airplane_detail_page.dart +++ b/lib/pages/buy_tickets/airplane_detail_page.dart @@ -32,10 +32,6 @@ class _AirplaneDetailPageState extends State { .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 { 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 { _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 { fit: BoxFit.cover, ), ), + 10.wb, Text( "联系电话", style: TextStyle(fontSize: 14.rsp, color: Color(0xFF333333)), @@ -260,8 +259,8 @@ class _AirplaneDetailPageState extends State { 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 { 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 { ).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 { 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 { 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 { 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 { )), 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), ], diff --git a/lib/pages/buy_tickets/choose_tickets_type_page.dart b/lib/pages/buy_tickets/choose_tickets_type_page.dart index 4e9a5c5..336682b 100644 --- a/lib/pages/buy_tickets/choose_tickets_type_page.dart +++ b/lib/pages/buy_tickets/choose_tickets_type_page.dart @@ -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 { + 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 { 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( diff --git a/lib/pages/buy_tickets/tickets_order_page.dart b/lib/pages/buy_tickets/tickets_order_page.dart new file mode 100644 index 0000000..5562afd --- /dev/null +++ b/lib/pages/buy_tickets/tickets_order_page.dart @@ -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 { + @override + Widget build(BuildContext context) { + // TODO: implement build + throw UnimplementedError(); + } +} diff --git a/lib/pages/buy_tickets/used_passager_page.dart b/lib/pages/buy_tickets/used_passager_page.dart new file mode 100644 index 0000000..405662a --- /dev/null +++ b/lib/pages/buy_tickets/used_passager_page.dart @@ -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 { + List _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, + )); + }, + ); + } +} diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index b53cdd8..a362c6b 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -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 createState() { return _HomePageState(); @@ -1030,13 +1034,18 @@ class _HomePageState extends BaseStoreState _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()) { diff --git a/lib/pages/tabBar/TabbarWidget.dart b/lib/pages/tabBar/TabbarWidget.dart index 2426732..302006a 100644 --- a/lib/pages/tabBar/TabbarWidget.dart +++ b/lib/pages/tabBar/TabbarWidget.dart @@ -203,7 +203,9 @@ class _TabBarWidgetState extends State needAnimation: false, controller: _tabController, children: [ - HomePage(), + HomePage( + tabController: _tabController, + ), GoodsHotListPage(), DiscoveryPage(), // BusinessPage(), diff --git a/lib/widgets/no_data_view.dart b/lib/widgets/no_data_view.dart index 31c4610..b0038ff 100644 --- a/lib/widgets/no_data_view.dart +++ b/lib/widgets/no_data_view.dart @@ -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), + ), ) ], ),