diff --git a/android/app/build.gradle b/android/app/build.gradle index 0bc3b57..0806305 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -68,7 +68,7 @@ android { ndk { //设置支持的SO库架构 abiFilters 'arm64-v8a'//, 'arm64-v8a', 'x86', 'x86_64' - abiFilters 'armeabi-v7a' + // abiFilters 'armeabi-v7a' } manifestPlaceholders = [ OPENINSTALL_APPKEY : "uapywo", diff --git a/assets/aku_college.png b/assets/aku_college.png new file mode 100644 index 0000000..4976f2e Binary files /dev/null and b/assets/aku_college.png differ diff --git a/lib/constants/api_v2.dart b/lib/constants/api_v2.dart index 51b8ca9..e54ce77 100644 --- a/lib/constants/api_v2.dart +++ b/lib/constants/api_v2.dart @@ -155,6 +155,12 @@ class UserAPI { ///搜索国家 String get findCountry => '/v2/app/abroad/search_country'; + ///阿库学院视频 + String get getAkuVideoList => '/v2/app/aku_school/school_list'; + + + + } class BenefitAPI { diff --git a/lib/pages/buy_tickets/airline_widget.dart b/lib/pages/buy_tickets/airline_widget.dart index 39bcc82..c8d3a5f 100644 --- a/lib/pages/buy_tickets/airline_widget.dart +++ b/lib/pages/buy_tickets/airline_widget.dart @@ -525,7 +525,8 @@ class _AirlineWidgetState extends State { _chooseConditon() { return Container( height: 48.rw, - margin: EdgeInsets.only(left: 55.rw, right: 55.rw, bottom: 10.rw), + //margin: EdgeInsets.only(left: 55.rw, right: 55.rw, bottom: 10.rw), + margin: EdgeInsets.only(left: 85.rw, right: 85.rw, bottom: 10.rw), //padding: EdgeInsets.symmetric(horizontal: 55.rw), decoration: BoxDecoration( borderRadius: BorderRadius.horizontal( @@ -534,45 +535,45 @@ class _AirlineWidgetState extends State { color: Colors.white), child: Row( children: [ - GestureDetector( - onTap: () async { - Options options = await show2DatePicker(context, - fromNameList: _getAirportNameList(widget.fromText), - endNameList: _getAirportNameList(widget.toText)); - _chooseScreen = true; - _airLineHandleList = _getList(_airLineList, options); - if (options.arrive == '' && - options.company == '' && - options.date == '' && - options.depart == '' && - options.space == '') { - _chooseScreen = false; - _airLineHandleList = _airLineList; - setState(() {}); - } - }, - child: Container( - alignment: Alignment.center, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset( - _chooseScreen - ? R.ASSETS_TICKET_SCREEN_CHOOSE_ICON_PNG - : R.ASSETS_TICKET__SCREEN_ICON_PNG, - width: 17.rw, - height: 17.rw, - ), - Text( - '筛选条件', - style: TextStyle( - color: _chooseScreen ? Colors.red : Colors.black, - fontSize: 12.rsp), - ), - ], - ), - ), - ).expand(), + // GestureDetector( + // onTap: () async { + // Options options = await show2DatePicker(context, + // fromNameList: _getAirportNameList(widget.fromText), + // endNameList: _getAirportNameList(widget.toText)); + // _chooseScreen = true; + // _airLineHandleList = _getList(_airLineList, options); + // if (options.arrive == '' && + // options.company == '' && + // options.date == '' && + // options.depart == '' && + // options.space == '') { + // _chooseScreen = false; + // _airLineHandleList = _airLineList; + // setState(() {}); + // } + // }, + // child: Container( + // alignment: Alignment.center, + // child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Image.asset( + // _chooseScreen + // ? R.ASSETS_TICKET_SCREEN_CHOOSE_ICON_PNG + // : R.ASSETS_TICKET__SCREEN_ICON_PNG, + // width: 17.rw, + // height: 17.rw, + // ), + // Text( + // '筛选条件', + // style: TextStyle( + // color: _chooseScreen ? Colors.red : Colors.black, + // fontSize: 12.rsp), + // ), + // ], + // ), + // ), + // ).expand(), GestureDetector( onTap: () { _choosePriceSort = true; diff --git a/lib/pages/buy_tickets/airplane_reserve_page.dart b/lib/pages/buy_tickets/airplane_reserve_page.dart index 1b2935f..c2167d0 100644 --- a/lib/pages/buy_tickets/airplane_reserve_page.dart +++ b/lib/pages/buy_tickets/airplane_reserve_page.dart @@ -26,7 +26,8 @@ class AirplaneReservePage extends StatefulWidget { this.fromText, this.toText, this.originDate, - this.index, this.itemId}) + this.index, + this.itemId}) : super(key: key); @override @@ -372,37 +373,103 @@ class _AirplaneReservePageState extends State Column( children: [ 10.hb, - CustomImageButton( - height: 38.rw, - width: 44.rw, - title: "预订", - boxDecoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - colors: [ - Color(0xFFFF493F), - Color(0xFFC92219), - ], - ), - borderRadius: BorderRadius.all(Radius.circular(4.rw)), - ), - backgroundColor: Color(0xFFC92219), - color: Colors.white, - fontSize: 16.rsp, - onPressed: () { - Get.to(AirplaneDetailPage( - airline: widget.airline, - airlineindex: widget.index, - airSeat: type == 1 - ? _economyclassList[index] - : _firstclassList[index], - fromText: widget.fromText, - toText: widget.toText, - originDate: widget.originDate, - itemId:widget.itemId)); - }, - ), + model.seatStatus != 'A' + ? CustomImageButton( + padding: EdgeInsets.zero, + boxDecoration: BoxDecoration(boxShadow: [ + BoxShadow( + color: Color(0xFFC92219), + blurRadius: 4.rw, + ) + ]), + height: 38.rw, + width: 44.rw, + child: Column( + children: [ + Container( + alignment: Alignment.center, + height: 24.rw, + width: double.infinity, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color(0xFFFF493F), + Color(0xFFC92219), + ], + ), + borderRadius: + BorderRadius.all(Radius.circular(4.rw)), + ), + child: Text('预订', + style: TextStyle( + color: Colors.white, + fontSize: 16.rsp, + )), + ), + Container( + alignment: Alignment.center, + height: 14.rw, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(4.rw), + bottomRight: Radius.circular(4.rw)), + ), + child: Text("余" + model.seatStatus + "张", + style: TextStyle( + color: Color(0xFFF64239), + fontSize: 10.rsp, + )), + ), + ], + ), + onPressed: () { + Get.to(AirplaneDetailPage( + airline: widget.airline, + airlineindex: widget.index, + airSeat: type == 1 + ? _economyclassList[index] + : _firstclassList[index], + fromText: widget.fromText, + toText: widget.toText, + originDate: widget.originDate, + itemId: widget.itemId)); + }, + ) + : CustomImageButton( + height: 38.rw, + width: 44.rw, + title: "预订", + boxDecoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color(0xFFFF493F), + Color(0xFFC92219), + ], + ), + borderRadius: BorderRadius.all(Radius.circular(4.rw)), + ), + backgroundColor: Color(0xFFC92219), + color: Colors.white, + fontSize: 16.rsp, + onPressed: () { + Get.to(AirplaneDetailPage( + airline: widget.airline, + airlineindex: widget.index, + airSeat: type == 1 + ? _economyclassList[index] + : _firstclassList[index], + fromText: widget.fromText, + toText: widget.toText, + originDate: widget.originDate, + itemId: widget.itemId)); + }, + ), ], ), ], diff --git a/lib/pages/buy_tickets/as_date_range_picker_part.dart b/lib/pages/buy_tickets/as_date_range_picker_part.dart index f6bae50..ca38b84 100644 --- a/lib/pages/buy_tickets/as_date_range_picker_part.dart +++ b/lib/pages/buy_tickets/as_date_range_picker_part.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'condition_picker.dart'; -import 'models/airport_city_model.dart'; class RangeDate { DateTime start; diff --git a/lib/pages/home/classify/classify_category_page.dart b/lib/pages/home/classify/classify_category_page.dart index 88379b3..9de5c34 100644 --- a/lib/pages/home/classify/classify_category_page.dart +++ b/lib/pages/home/classify/classify_category_page.dart @@ -30,8 +30,9 @@ import 'goods_import_list_page.dart'; class ClassifyCategoryPage extends StatefulWidget { final List data; + final int countryId; final String initValue; - ClassifyCategoryPage({Key key, @required this.data, this.initValue}) + ClassifyCategoryPage({Key key, @required this.data, this.initValue,this.countryId}) : super(key: key); @override State createState() { @@ -306,13 +307,11 @@ class _ClassifyCategoryPageState extends BaseStoreState // title: firstTitle, // index: indexIn, // secondCategoryList: secondCategories)); - print(secondCategory.id); - Get.to(GoodsImportListPage( title: firstTitle, index: indexIn, secondCategoryList: secondCategories, - countryId: widget.data[index].first.id)); + countryId: widget.countryId)); }, ); }); diff --git a/lib/pages/home/classify/classify_country_page.dart b/lib/pages/home/classify/classify_country_page.dart index a4c837a..ace6aa7 100644 --- a/lib/pages/home/classify/classify_country_page.dart +++ b/lib/pages/home/classify/classify_country_page.dart @@ -314,7 +314,7 @@ class _ClassifyCountryPageState extends BaseStoreState categoryListModelList = await HomeDao.getCategoryList(secondCategory.id); - Get.to(ClassifyCategoryPage(data: categoryListModelList)); + Get.to(ClassifyCategoryPage(data: categoryListModelList,countryId:secondCategories[indexIn].id)); }, ); }); diff --git a/lib/pages/home/function/home_fuc.dart b/lib/pages/home/function/home_fuc.dart new file mode 100644 index 0000000..8461245 --- /dev/null +++ b/lib/pages/home/function/home_fuc.dart @@ -0,0 +1,27 @@ + + +import 'package:recook/constants/api_v2.dart'; +import 'package:recook/manager/http_manager.dart'; +import 'package:recook/pages/home/model/aku_video_list_model.dart'; + +class HomeFuc { + + //视频列表 + static Future getAkuVideoList( + String title,int page + ) async { + ResultData result = await HttpManager.post( + APIV2.userAPI.getAkuVideoList, {'title': title, + 'page':{ + 'limit':10, + 'page':page, + } + }); + + if (result.data != null) { + if (result.data['data'] != null) { + return AkuVideoListModel.fromJson(result.data['data']); + } + } + } +} diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index 75d4a8c..e803aa0 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -1055,15 +1055,15 @@ class _HomePageState extends BaseStoreState // AppConfig.getShowCommission() ? "我的店铺" : "家居生活", // '彩票兑换', //2021 7,27 ios彩票审核不通过 隐藏彩票 - '出行服务', + '精彩发现', onPressed: () async { //AppRouter.push(context, RouteName.REDEEM_LOTTERY_PAGE); //widget.tabController.animateTo(2); - // UserManager.instance.selectTabbarIndex = 2; - // bool value = UserManager.instance.selectTabbar.value; - // UserManager.instance.selectTabbar.value = !value; - Get.to(() => ChooseTicketsTypePage()); + UserManager.instance.selectTabbarIndex = 2; + bool value = UserManager.instance.selectTabbar.value; + UserManager.instance.selectTabbar.value = !value; + //Get.to(() => ChooseTicketsTypePage()); //setState(() {}); }, // () { diff --git a/lib/pages/home/model/aku_video_list_model.dart b/lib/pages/home/model/aku_video_list_model.dart new file mode 100644 index 0000000..ecb70a5 --- /dev/null +++ b/lib/pages/home/model/aku_video_list_model.dart @@ -0,0 +1,79 @@ +class AkuVideoListModel { + List list; + int total; + + AkuVideoListModel({this.list, this.total}); + + AkuVideoListModel.fromJson(Map json) { + if (json['list'] != null) { + list = new List(); + json['list'].forEach((v) { + list.add(new AkuVideo.fromJson(v)); + }); + } + total = json['total']; + } + + Map toJson() { + final Map data = new Map(); + if (this.list != null) { + data['list'] = this.list.map((v) => v.toJson()).toList(); + } + data['total'] = this.total; + return data; + } +} + +class AkuVideo { + int id; + String title; + String subTitle; + int type;//1为视频 2为图文 + int isDraft; + String createDTime; + String textBody; + String coverUrl; + String videoUrl; + num numberOfHits; + + AkuVideo( + {this.id, + this.title, + this.subTitle, + this.type, + this.isDraft, + this.createDTime, + this.textBody, + this.coverUrl, + this.videoUrl, + this.numberOfHits, + }); + + AkuVideo.fromJson(Map json) { + id = json['id']; + title = json['title']; + subTitle = json['sub_title']; + type = json['type']; + isDraft = json['is_draft']; + createDTime = json['create_d_time']; + textBody = json['text_body']; + coverUrl = json['cover_url']; + videoUrl = json['video_url']; + numberOfHits = json['number_of_hits']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['title'] = this.title; + data['sub_title'] = this.subTitle; + data['type'] = this.type; + data['is_draft'] = this.isDraft; + data['create_d_time'] = this.createDTime; + data['text_body'] = this.textBody; + data['cover_url'] = this.coverUrl; + data['video_url'] = this.videoUrl; + data['number_of_hits'] = this.numberOfHits; + return data; + } +} diff --git a/lib/pages/home/widget/aku_college_detail_page.dart b/lib/pages/home/widget/aku_college_detail_page.dart new file mode 100644 index 0000000..e7652f0 --- /dev/null +++ b/lib/pages/home/widget/aku_college_detail_page.dart @@ -0,0 +1,172 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:recook/base/base_store_state.dart'; +import 'package:recook/constants/api.dart'; +import 'package:recook/constants/constants.dart'; +import 'package:recook/constants/header.dart'; +import 'package:recook/constants/styles.dart'; +import 'package:recook/pages/home/function/home_fuc.dart'; +import 'package:recook/pages/home/model/aku_video_list_model.dart'; +import 'package:recook/widgets/custom_app_bar.dart'; +import 'package:recook/widgets/custom_cache_image.dart'; +import 'package:recook/widgets/progress/re_toast.dart'; +import 'package:recook/widgets/refresh_widget.dart'; +import 'package:recook/widgets/webView.dart'; +import 'package:velocity_x/velocity_x.dart'; +import 'package:flustars/flustars.dart'; +import 'package:chewie/chewie.dart'; +import 'package:video_player/video_player.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class AkuCollegeDetailPage extends StatefulWidget { + final AkuVideo akuVideo; + + const AkuCollegeDetailPage({Key key, @required this.akuVideo}) + : super(key: key); + @override + State createState() { + return _AkuCollegeDetailPageState(); + } +} + +class _AkuCollegeDetailPageState extends BaseStoreState { + //final FijkPlayer player = FijkPlayer(); + + VideoPlayerController _videoPlayerController; + ChewieController _chewieController; + WebViewController _webViewController; + @override + void initState() { + super.initState(); + if (widget.akuVideo.type == 1) { + _videoPlayerController = VideoPlayerController.network( + Api.getImgUrl(widget.akuVideo.videoUrl)); + _videoPlayerController.initialize().then((_) { + _chewieController = ChewieController( + videoPlayerController: _videoPlayerController, + aspectRatio: _videoPlayerController.value.aspectRatio, + autoPlay: false, + showControls: true, + ); + + setState(() {}); + }); + } + + // player.setDataSource(Api.getImgUrl(widget.akuVideo.videoUrl), + // autoPlay: false); + } + + @override + void dispose() { + _videoPlayerController?.dispose(); + _chewieController?.dispose(); + super.dispose(); + //player.dispose(); + } + + @override + Widget buildContext(BuildContext context, {store}) { + return Scaffold( + backgroundColor: Color(0xFFFFFFFF), + appBar: CustomAppBar( + title: "".text.bold.size(18.rsp).make(), + themeData: AppThemes.themeDataGrey.appBarTheme, + ), + body: _bodyWidget(), + ); + } + + _bodyWidget() { + return ListView( + children: [ + 40.hb, + Row( + children: [ + 30.wb, + Text( + widget.akuVideo.title, + maxLines: 2, + softWrap: true, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 20.rsp, + color: Color(0xFF333333), + fontWeight: FontWeight.bold), + ).expand(), + 30.wb, + ], + ), + 20.hb, + Row( + children: [ + 30.wb, + Text( + widget.akuVideo.subTitle, + softWrap: true, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.rsp, + color: Color(0xFF333333), + ), + ), + 40.wb, + Container( + padding: EdgeInsets.only(top: 3.rw), + child: Text( + _getDateTime(widget.akuVideo.createDTime), + softWrap: true, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.rsp, + color: Color(0xFF999999), + ), + ), + ), + 40.wb, + Text( + widget.akuVideo.numberOfHits.toString() + '人已学习', + softWrap: true, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.rsp, + color: Color(0xFF999999), + ), + ), + ], + ), + widget.akuVideo.type == 1 ? _playVideo() : _playImagText() + ], + ); + } + + _getDateTime(String date) { + if (date.isEmpty) { + return date; + } else { + DateTime dateTime = DateUtil.getDateTime(date); + return DateUtil.formatDate(dateTime, format: 'yyyy-MM-dd'); + } + } + + _playVideo() { + return Container( + padding: EdgeInsets.only(top: 20.rw, left: 15.rw, right: 15.rw), + height: 230.rw, + child: _chewieController != null + ? Chewie( + controller: _chewieController, + ) + : SizedBox(), + ); + } + + // _playImagText() { + // return Container( + // height: 300.rw, + // width: 500.rw, + // child: HtmlWidget(), + // ); + // } + +} diff --git a/lib/pages/home/widget/aku_college_page.dart b/lib/pages/home/widget/aku_college_page.dart new file mode 100644 index 0000000..4d40565 --- /dev/null +++ b/lib/pages/home/widget/aku_college_page.dart @@ -0,0 +1,260 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import 'package:recook/base/base_store_state.dart'; +import 'package:recook/constants/api.dart'; +import 'package:recook/constants/constants.dart'; +import 'package:recook/constants/header.dart'; +import 'package:recook/constants/styles.dart'; +import 'package:recook/pages/home/function/home_fuc.dart'; +import 'package:recook/pages/home/model/aku_video_list_model.dart'; +import 'package:recook/widgets/custom_app_bar.dart'; +import 'package:recook/widgets/custom_cache_image.dart'; +import 'package:recook/widgets/progress/re_toast.dart'; +import 'package:recook/widgets/refresh_widget.dart'; +import 'package:velocity_x/velocity_x.dart'; + + +import 'aku_college_detail_page.dart'; + +class AkuCollegePage extends StatefulWidget { + @override + State createState() { + return _AkuCollegePageState(); + } +} + +class _AkuCollegePageState extends BaseStoreState { + GSRefreshController _refreshController = + GSRefreshController(initialRefresh: true); + TextEditingController _textEditController; + AkuVideoListModel _akuVideoListModel; + List _akuVideoList; + String _searchText; + int page = 1; + @override + void initState() { + super.initState(); + } + + @override + Widget buildContext(BuildContext context, {store}) { + return Scaffold( + backgroundColor: Color(0xFFFFFFFF), + appBar: CustomAppBar( + title: "阿库学院".text.bold.size(18.rsp).make(), + themeData: AppThemes.themeDataGrey.appBarTheme, + ), + body: _bodyWidget(), + ); + } + + _bodyWidget() { + return Column( + children: [ + GestureDetector( + onTap: () {}, + child: Container( + width: double.infinity, + height: 160.rw, + child: Image.asset( + R.ASSETS_AKU_COLLEGE_PNG, + fit: BoxFit.fill, + ), + ), + ), + 50.hb, + Container( + alignment: Alignment.center, + width: 190.rw, + height: 26.rw, + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + offset: Offset(0, 2), + color: Color(0x45B4B1B1), + blurRadius: 4.rw, + ) + ], + borderRadius: BorderRadius.all(Radius.circular(13.rw)), + ), + child: Row( + children: [ + Expanded( + child: CupertinoTextField( + keyboardType: TextInputType.text, + controller: _textEditController, + //textInputAction: TextInputAction.search, + onChanged: (text) {}, + placeholder: "搜一下是否有您想要的内容", + placeholderStyle: TextStyle( + color: Color(0xFF999999), + fontSize: 10.rsp, + fontWeight: FontWeight.w300), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(13.rw)), + ), + style: TextStyle(color: Colors.black, fontSize: 14.rsp), + ), + ), + Container( + width: 1.rw, + height: 27.rw, + color: Color(0xFFEEEDED), + ), + Container( + width: 37.rw, + padding: EdgeInsets.symmetric(horizontal: 5), + child: Icon( + Icons.search, + size: 15.rw, + color: Color(0xFFC92219), + ), + ), + ], + )), + _buildListView(), + ], + ); + } + + _buildListView() { + return Container( + margin: EdgeInsets.only(left: 8.rw, right: 8.rw, top: 26.rw), + child: RefreshWidget( + controller: _refreshController, + noData: '没有找到您想要的内容', + onRefresh: () async { + Function cancel = ReToast.loading(); + + _akuVideoListModel = + await HomeFuc.getAkuVideoList(_searchText, page); + + setState(() {}); + _refreshController.refreshCompleted(); + cancel(); + }, + onLoadMore: () async { + if (_akuVideoListModel.list.length >= + _akuVideoListModel.total) { + _refreshController.loadComplete(); + _refreshController.loadNoData(); + } else { + _akuVideoListModel = + await HomeFuc.getAkuVideoList(_searchText, page++); + _refreshController.loadComplete(); + } + }, + body: _akuVideoListModel?.list != null + ? GridView.builder( + shrinkWrap: true, + padding: EdgeInsets.zero, + gridDelegate: + const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + childAspectRatio: 170 / 162, + mainAxisSpacing: 10, + crossAxisSpacing: 17), + itemCount: _akuVideoListModel.list.length, + itemBuilder: (BuildContext context, int index) { + return + // Container( + // color: Colors.red, + // ); + _akuVideoItem(_akuVideoListModel.list[index]); + }, + ) + : noDataView('没有找到您想要的内容'))) + .expand(); + } + + _akuVideoItem(AkuVideo akuVideo) { + return Container( + margin: EdgeInsets.only(left: 4.rw, right: 4.rw, top: 4.rw), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(4.rw), + boxShadow: [ + BoxShadow( + color: Color(0xFFDBDBDB), + blurRadius: 4, + offset: Offset(0, 2), + ), + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + onTap: () { + //跳转页面 + Get.to(AkuCollegeDetailPage(akuVideo: akuVideo)); + }, + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + child: Container( + child: CustomCacheImage( + imageUrl: Api.getImgUrl(akuVideo.coverUrl), + height: 90.rw, + fit: BoxFit.fitWidth, + ), + ), + ), + akuVideo.type == 1 + ? Positioned( + top: 0, + left: 0, + right: 0, + bottom: 0, + child: Icon(CupertinoIcons.play_circle, + size: 50, color: Colors.white), + ) + : SizedBox() + ], + ), + ), + 10.hb, + Row( + children: [ + 16.wb, + Text( + akuVideo.title, + maxLines: 2, + softWrap: true, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.rsp, + color: Color(0xFF333333), + fontWeight: FontWeight.bold), + ).expand(), + 16.wb, + ], + ), + Spacer(), + Row( + children: [ + 16.wb, + Text(akuVideo.subTitle, + style: TextStyle(fontSize: 10.rsp, color: Color(0xFF333333))), + Spacer(), + Text(akuVideo.numberOfHits.toString() + '人看过', + style: TextStyle(fontSize: 10.rsp, color: Color(0xFF999999))), + 16.wb, + ], + ), + 20.hb, + ], + ), + ); + } + + _getNum(int num) {} +} diff --git a/lib/pages/home/widget/goods_hot_list_page.dart b/lib/pages/home/widget/goods_hot_list_page.dart index 7a74438..a123c11 100644 --- a/lib/pages/home/widget/goods_hot_list_page.dart +++ b/lib/pages/home/widget/goods_hot_list_page.dart @@ -17,7 +17,6 @@ import 'package:recook/utils/app_router.dart'; import 'package:recook/widgets/custom_cache_image.dart'; import 'package:recook/widgets/goods_item.dart'; -import 'package:fijkplayer/fijkplayer.dart'; class GoodsHotListPage extends StatefulWidget { @override @@ -28,7 +27,6 @@ class GoodsHotListPage extends StatefulWidget { class _GoodsHotListPageState extends BaseStoreState { GoodsHotSellListModel _listModel; -final FijkPlayer player = FijkPlayer(); @override void initState() { super.initState(); diff --git a/lib/pages/tabBar/TabbarWidget.dart b/lib/pages/tabBar/TabbarWidget.dart index 302006a..e22e67e 100644 --- a/lib/pages/tabBar/TabbarWidget.dart +++ b/lib/pages/tabBar/TabbarWidget.dart @@ -18,6 +18,7 @@ import 'package:recook/constants/styles.dart'; import 'package:recook/manager/user_manager.dart'; import 'package:recook/pages/business/release_material_page.dart'; import 'package:recook/pages/home/home_page.dart'; +import 'package:recook/pages/home/widget/aku_college_page.dart'; import 'package:recook/pages/home/widget/goods_hot_list_page.dart'; import 'package:recook/pages/live/functions/live_function.dart'; import 'package:recook/pages/live/pages/discovery_page.dart'; @@ -206,7 +207,8 @@ class _TabBarWidgetState extends State HomePage( tabController: _tabController, ), - GoodsHotListPage(), + //GoodsHotListPage(), + AkuCollegePage(),//------akkuxuyaun DiscoveryPage(), // BusinessPage(), ShoppingCartPage(), diff --git a/lib/pages/user/functions/user_func.dart b/lib/pages/user/functions/user_func.dart index 4ddd7a4..1247954 100644 --- a/lib/pages/user/functions/user_func.dart +++ b/lib/pages/user/functions/user_func.dart @@ -33,11 +33,13 @@ class UserFunc { .map((e) => UserCommonModel.fromJson(e)) .toList(); } - //获取金刚区图标 + + //获取金刚区图标 static Future> getKingCoinList() async { - ResultData result = - await HttpManager.post(APIV2.userAPI.getKingCion, { - 'user_id': UserManager.instance.user.info.id, + ResultData result = await HttpManager.post(APIV2.userAPI.getKingCion, { + 'user_id': UserManager.instance.user.info.id != null + ? UserManager.instance.user.info.id + : 0, }); if (result.data != null) { if (result.data['data'] != null) { diff --git a/lib/utils/date/date_utils.dart b/lib/utils/date/date_utils.dart index 511c39e..89150b0 100644 --- a/lib/utils/date/date_utils.dart +++ b/lib/utils/date/date_utils.dart @@ -1,6 +1,11 @@ -import 'package:recook/utils/date/date_models.dart'; +import 'package:flutter_custom_calendar/utils/date_util.dart'; +import 'package:recook/utils/date/date_models.dart'; +import 'package:recook/utils/date/date_utils.dart'; class DateUtilss { + + + //获取 10:00 -8:00的时间差 static String getTimeReduce(String timeE, String timeL) { int hourL = int.parse(timeL.substring(0, 2)); //晚的时间的小时 diff --git a/lib/utils/tool/webView_local.dart b/lib/utils/tool/webView_local.dart new file mode 100644 index 0000000..0d225aa --- /dev/null +++ b/lib/utils/tool/webView_local.dart @@ -0,0 +1,97 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class WebViewLocalPage extends StatefulWidget { + + String url; + final String title; + final bool isLocalUrl; + + WebViewController _webViewController; + + WebViewLocalPage({this.url, this.isLocalUrl = false, this.title}); + + @override + _WebViewLocalPage createState() => _WebViewLocalPage(); + + +} + +class _WebViewLocalPage extends State { + + JavascriptChannel jsBridge(BuildContext context) => JavascriptChannel( + name: 'jsbridge', // 与h5 端的一致 不然收不到消息 + onMessageReceived: (JavascriptMessage message) async{ + debugPrint(message.message); + }); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: _buildAppbar(), + body: _buildBody() + ); + } + + _buildAppbar() { + return AppBar( + elevation: 0, + backgroundColor: Color(0xccd0d7), + title: Text(widget.title, style: TextStyle(color: Colors.black),), + centerTitle: true, + leading: IconButton(icon: Icon(Icons.arrow_back, color: Color(0xFF23ADE5),), onPressed: () { + + }) + ); + } + + _buildBody() { + return Column( + children: [ + SizedBox( + height: 1, + width: double.infinity, + child: const DecoratedBox(decoration: BoxDecoration(color: Color(0xFFEEEEEE))), + ), + Expanded( + flex: 1, + child: WebView( + initialUrl: widget.isLocalUrl ? Uri.dataFromString(widget.url, mimeType: 'text/html', encoding: Encoding.getByName('utf-8')) + .toString(): widget.url, + javascriptMode: JavascriptMode.unrestricted, + javascriptChannels: [ + jsBridge(context) + ].toSet(), + onWebViewCreated: (WebViewController controller){ + widget._webViewController = controller; + if(widget.isLocalUrl){ + _loadHtmlAssets(controller); + }else{ + controller.loadUrl(widget.url); + } + controller.canGoBack().then((value) => debugPrint(value.toString())); + controller.canGoForward().then((value) => debugPrint(value.toString())); + controller.currentUrl().then((value) => debugPrint(value)); + }, + onPageFinished: (String value){ + widget._webViewController.evaluateJavascript('document.title') + .then((title) => debugPrint(title)); + }, + ), + ) + ], + ); + } + +//加载本地文件 + _loadHtmlAssets(WebViewController controller) async { + String htmlPath = await rootBundle.loadString(widget.url); + controller.loadUrl(Uri.dataFromString(htmlPath,mimeType: 'text/html', encoding: Encoding.getByName('utf-8')) + .toString()); + } + +} \ No newline at end of file diff --git a/lib/widgets/goods_item.dart b/lib/widgets/goods_item.dart index 17b71a7..eb8942b 100644 --- a/lib/widgets/goods_item.dart +++ b/lib/widgets/goods_item.dart @@ -462,6 +462,7 @@ class GoodsItemWidget extends StatelessWidget { // color: Colors.red, // ); CustomCacheImage( + borderRadius: BorderRadius.all(Radius.circular(2.rw)), imageUrl: Api.getImgUrl(specialSale[index]), fit: BoxFit.cover, ); @@ -493,6 +494,7 @@ class GoodsItemWidget extends StatelessWidget { // color: Colors.red, // ); CustomCacheImage( + borderRadius: BorderRadius.all(Radius.circular(2.rw)), imageUrl: Api.getImgUrl(specialIcon[index]), fit: BoxFit.cover, ); diff --git a/pubspec.lock b/pubspec.lock index b9e0e08..9dcd364 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -400,13 +400,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" - fijkplayer: - dependency: "direct main" - description: - name: fijkplayer - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.10.0" file: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 7aa9ef2..7831b8a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: recook description: Recook Market App. publish_to: "none" -version: 1.9.1-dev+307 +version: 1.11.0-dev+308 environment: sdk: ">=2.10.0 <3.0.0" @@ -221,6 +221,9 @@ dependencies: #点赞组件 many_like: ^0.0.6 + #加载html + + #展开组件 expandable: ^5.0.1 @@ -230,8 +233,6 @@ dependencies: #极光推送 jpush_flutter: 2.1.4 - fijkplayer: ^0.10.0 - scrollable_positioned_list: ^0.1.7 flutter_markdown: