From baf40d492792d42fe97cd4a6257cee677c35bc50 Mon Sep 17 00:00:00 2001 From: w-R <953969641@qq.com> Date: Tue, 2 Nov 2021 23:30:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/image/2x/home_coupon.png | Bin 0 -> 10951 bytes assets/image/2x/home_order.png | Bin 0 -> 8146 bytes assets/image/2x/home_recharge.png | Bin 0 -> 11180 bytes assets/image/3x/home_coupon.png | Bin 0 -> 20626 bytes assets/image/3x/home_order.png | Bin 0 -> 15140 bytes assets/image/3x/home_recharge.png | Bin 0 -> 21635 bytes assets/image/home_coupon.png | Bin 0 -> 4485 bytes assets/image/home_order.png | Bin 0 -> 3460 bytes assets/image/home_recharge.png | Bin 0 -> 4341 bytes lib/community/community_course.dart | 78 ++- .../community_view/class_details.dart | 634 ++++++++++++++++++ lib/community/community_view/home_class.dart | 139 ++-- lib/home/home_page.dart | 10 +- lib/home/home_view/quick_order.dart | 2 +- lib/home/home_view/shortcut_operation.dart | 158 +++++ lib/main.dart | 2 +- lib/order/exchange_order_page.dart | 313 +++++++-- lib/retrofit/data/chapter.dart | 136 ++++ lib/retrofit/data/collect_class_list.dart | 114 ++++ lib/retrofit/data/course_details.dart | 152 +++++ lib/retrofit/retrofit_api.dart | 17 +- lib/retrofit/retrofit_api.g.dart | 101 ++- lib/web/web_view/comment_list.dart | 34 +- 23 files changed, 1742 insertions(+), 148 deletions(-) create mode 100644 assets/image/2x/home_coupon.png create mode 100644 assets/image/2x/home_order.png create mode 100644 assets/image/2x/home_recharge.png create mode 100644 assets/image/3x/home_coupon.png create mode 100644 assets/image/3x/home_order.png create mode 100644 assets/image/3x/home_recharge.png create mode 100644 assets/image/home_coupon.png create mode 100644 assets/image/home_order.png create mode 100644 assets/image/home_recharge.png create mode 100644 lib/community/community_view/class_details.dart create mode 100644 lib/home/home_view/shortcut_operation.dart create mode 100644 lib/retrofit/data/chapter.dart create mode 100644 lib/retrofit/data/collect_class_list.dart create mode 100644 lib/retrofit/data/course_details.dart diff --git a/assets/image/2x/home_coupon.png b/assets/image/2x/home_coupon.png new file mode 100644 index 0000000000000000000000000000000000000000..ae9a63ca73f16ca3528e20d5c0a5e119daa7a004 GIT binary patch literal 10951 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 literal 0 HcmV?d00001 diff --git a/assets/image/2x/home_order.png b/assets/image/2x/home_order.png new file mode 100644 index 0000000000000000000000000000000000000000..336121703157c806ffdd1d18588afffdb7405e94 GIT binary patch literal 8146 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 literal 0 HcmV?d00001 diff --git a/assets/image/2x/home_recharge.png b/assets/image/2x/home_recharge.png new file mode 100644 index 0000000000000000000000000000000000000000..9f8380c8b7cc011d37b3cc7218cfbf937b027ed6 GIT binary patch literal 11180 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 udK6{AN@G literal 0 HcmV?d00001 diff --git a/assets/image/3x/home_coupon.png b/assets/image/3x/home_coupon.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2d35e63ed072026a224749231ccc8a85cb989f GIT binary patch literal 20626 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 literal 0 HcmV?d00001 diff --git a/assets/image/3x/home_order.png b/assets/image/3x/home_order.png new file mode 100644 index 0000000000000000000000000000000000000000..715c6bb072643a0f9f05c98b565c4504069ba4bc GIT binary patch literal 15140 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 literal 0 HcmV?d00001 diff --git a/assets/image/home_order.png b/assets/image/home_order.png new file mode 100644 index 0000000000000000000000000000000000000000..861a96f7b7f3e35e2021e04d06c306b47d67a4da GIT binary patch literal 3460 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 List classSelectList = []; List classList = []; List classTabList = []; + List collectList = []; + List collect = []; int checkIndex = 0; @override @@ -58,10 +62,13 @@ class _CommunityCourse extends State } }); classListAsync(); + collectionList(); + // courseDetails("1451753512101740544"); } ///课程分类列表 - classListAsync() async { + classListAsync() async + { if (apiService == null) { SharedPreferences value = await SharedPreferences.getInstance(); apiService = ApiService( @@ -122,6 +129,48 @@ class _CommunityCourse extends State } } + ///课程的合集列表 + collectionList() async { + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + ); + } + BaseData> baseData = await apiService.collectList().catchError((onError) {}); + if (baseData != null && baseData.isSuccess) { + setState(() { + collectList.clear(); + collectList.addAll(baseData.data); + if(collectList.length > 0) + collectCourse(collectList[0].id); + }); + } + EasyLoading.dismiss(); + } + + ///合集包含的课程列表 + collectCourse(collectId) async { + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + ); + } + BaseData> baseData = await apiService.collect(collectId).catchError((error) { + }); + if (baseData != null && baseData.isSuccess) { + setState(() { + collect.clear(); + collect.addAll(baseData.data); + }); + } + } + _onRefresh(){ classListAsync(); } @@ -188,9 +237,7 @@ class _CommunityCourse extends State SizedBox(height: 28), ///回乡小课堂 - HomeClass(classList), - - SizedBox(height: 28), + HomeClass(collect,collectList), ///课程导航栏 ClassTitleTab(classSelectList,(index){ @@ -203,32 +250,9 @@ class _CommunityCourse extends State ]; - // if (brands == null) return widgets; - // brands.forEach((value) { - // widgets.add( - // Container( - // key: globaKeys[brands.indexOf(value)], - // child: Container( - // child: Html( - // data: value.content, - // customImageRenders: { - // assetUriMatcher(): assetImageRender(), - // networkSourceMatcher(extension: "svg"): svgNetworkImageRender(), - // networkSourceMatcher(): networkImageRender( - // loadingWidget: () { - // return Container(); - // }, - // ), - // }, - // ), - // ), - // ), - // ); - // }); return widgets; } - @override bool get wantKeepAlive => true; } diff --git a/lib/community/community_view/class_details.dart b/lib/community/community_view/class_details.dart new file mode 100644 index 00000000..376645f9 --- /dev/null +++ b/lib/community/community_view/class_details.dart @@ -0,0 +1,634 @@ +import 'package:chewie/chewie.dart'; +import 'package:dio/dio.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/base_data.dart'; +import 'package:huixiang/retrofit/data/chapter.dart'; +import 'package:huixiang/retrofit/data/course_details.dart'; +import 'package:huixiang/retrofit/data/member_comment_list.dart'; +import 'package:huixiang/retrofit/data/page.dart'; +import 'package:huixiang/retrofit/retrofit_api.dart'; +import 'package:huixiang/utils/font_weight.dart'; +import 'package:huixiang/view_widget/custom_image.dart'; +import 'package:chewie/src/chewie_progress_colors.dart' as chewie; +import 'package:huixiang/view_widget/tips_dialog.dart'; +import 'package:huixiang/web/web_view/comment_list.dart'; +import 'package:huixiang/web/web_view/input_comment.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:video_player/video_player.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class ClassDetails extends StatefulWidget { + final Map arguments; + + ClassDetails({this.arguments}); + @override + State createState() { + return _ClassDetails(); + } +} + +class _ClassDetails extends State with WidgetsBindingObserver{ + VideoPlayerController videoPlayerController; + Chewie chewies; + ChewieController chewieAudioController; + ApiService apiService; + final GlobalKey commentKey = GlobalKey(); + final ScrollController scrollController = ScrollController(); + bool isKeyBoardShow = false; + var commentFocus = FocusNode(); + String parenId = "0"; + String hintText = S.current.liuxianinjingcaidepinglunba; + List memberList = []; + final GlobalKey inputKey = GlobalKey(); + final TextEditingController commentTextController = TextEditingController(); + int commentTotal = 0; + double commentHeight = 60.h; + CourseDetails course; + List chapterList = []; + bool isShowImg = true; + int chapterIndex = 0; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addObserver(this); + courseDetails(widget.arguments["id"]); + queryChapterList(widget.arguments["id"]); + } + + ///课程章节列表 + queryChapterList(courseId) async { + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + ); + } + BaseData> baseData = await apiService.catalogList(courseId).catchError((onError) {}); + if (baseData != null && baseData.isSuccess) { + setState(() { + chapterList.clear(); + chapterList.addAll(baseData.data); + chapterIndex = 0; + initVideo(chapterList[chapterIndex].content.fileUrl); + }); + + } + EasyLoading.dismiss(); + } + + ///课程详情 + courseDetails(id) async { + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + ); + } + BaseData baseData = await apiService.course(id).catchError((error) {}); + if (baseData != null && baseData.isSuccess) { + setState(() { + course = baseData.data; + }); + } + } + + + @override + void dispose() { + /** + * 页面销毁时,视频播放器也销毁 + */ + + if (chewieAudioController != null) { + chewieAudioController.pause(); + chewieAudioController.dispose(); + chewieAudioController = null; + } + if (videoPlayerController != null) { + videoPlayerController.pause(); + videoPlayerController.dispose(); + } + super.dispose(); + } + + @override + void didChangeMetrics() { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (!mounted) return; + if (MediaQuery + .of(context) + .viewInsets + .bottom == 0) { + if (isKeyBoardShow) { + FocusScope.of(context).requestFocus(FocusNode()); + if (mounted) + setState(() { + hintText = S.current.liuxianinjingcaidepinglunba; + isKeyBoardShow = false; + }); + } + } else { + if (mounted) + setState(() { + isKeyBoardShow = true; + }); + } + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + child: SingleChildScrollView( + physics: BouncingScrollPhysics(), + child: Column( + children: [ + Stack( + children: [ + videoWidget( + MediaQuery.of(context).size.width, + videoPlayerController != null + ? (MediaQuery.of(context).size.width) / + videoPlayerController.value.aspectRatio + : MediaQuery.of(context).size.width / 2, + chapterList.length>chapterIndex?chapterList[chapterIndex].content.coverImg:"", + ), + Container( + margin: EdgeInsets.only(top: 40.h, left: 16.w, right: 16.w), + decoration: BoxDecoration( + color: Colors.transparent, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GestureDetector( + child: Icon( + Icons.arrow_back_ios, + color: Colors.white, + size: 24, + ), + onTap: () { + Navigator.of(context).pop(); + }, + ), + ], + ), + ), + ], + ), + Container( + height: 123, + margin: EdgeInsets.only(bottom: 16.h), + padding: EdgeInsets.only(left: 16,top: 16,right: 10), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(12), + offset: Offset(0, 2), + blurRadius: 14, + spreadRadius: 0, + ) + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + height: 22.h, + width: 40.w, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(2), + border: Border.all( + width: 1, + color: Color(0xFFFF7A1A), + style: BorderStyle.solid, + ), + ), + child: Text( + ( course?.tags != null && course.tags.length > 0 )?course.tags[0] : "", + style: TextStyle( + fontSize: 14.sp, + fontWeight: MyFontWeight.medium, + color: Color(0xFFFF7A1A), + ), + ), + ), + SizedBox( + width: 6.w, + ), + Expanded( + child: Text( + course != null ?course.subject:"", + overflow: TextOverflow.ellipsis, + maxLines: 2, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF1A1A1A), + ), + ), + flex: 1, + ) + ], + ), + SizedBox( + height:10.h, + ), + Padding(padding: EdgeInsets.only(right: 16), + child: Row( + children: [ + Expanded( + child: Text( + "讲师:${course !=null ? course.author.name :""}", + overflow: TextOverflow.ellipsis, + maxLines: 2, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: Colors.black, + ), + )), + Text( + "播放次数", + overflow: TextOverflow.ellipsis, + maxLines: 2, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xFF808080), + ), + ), + SizedBox( + width:4, + ), + Text( + course != null ? course.viewers.toString() :"", + overflow: TextOverflow.ellipsis, + maxLines: 2, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xFF808080), + ), + ), + ], + ),), + SizedBox( + height:10.h, + ), + Text( + course != null ?course.introduce:"", + overflow: TextOverflow.ellipsis, + maxLines: 2, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: Colors.black, + ), + ), + ], + ), + ), + anthology(), + CommentList( + commentKey, + course?.likes ?? course?.likes?? 0, + course?.id ?? course?.id ??"", + isKeyBoardShow, + _reply, + _delCommentTips, + 12.sp, + ), + if (memberList == null || memberList.length == 0) + Container( + width: double.infinity, + alignment: Alignment.topCenter, + margin: EdgeInsets.only(top: 40), + padding: EdgeInsets.all(22.h), + child: Text( + S + .of(context) + .zanwupinglun, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: Color(0xFFA0A0A0), + ), + ), + ), + /// 富文本评论的输入框 + InputComment( + inputKey, + hintText, + isKeyBoardShow, + commentFocus, + commentTextController, + _toComment, + _queryMemberComment, + _queryInformationLikes, + isLike: false, + ), + ], + ), + ), + ), + ); + } + + initVideo(videoUrl) async { + videoPlayerController = VideoPlayerController.network( + videoUrl, + )..initialize().then((value) { + chewieAudioController = ChewieController( + videoPlayerController: videoPlayerController, + aspectRatio: videoPlayerController.value.aspectRatio, + //宽高比 + autoPlay: false, + //自动播放 + looping: false, + //循环播放 + allowFullScreen: true, + // 拖动条样式颜色 + materialProgressColors: chewie.ChewieProgressColors( + playedColor: Colors.white, + handleColor: Colors.white, + backgroundColor: Colors.grey, + bufferedColor: Colors.transparent, + ), + autoInitialize: true, + ); + chewieAudioController.addListener(_fullScreenListener); + if (mounted) setState(() {}); + }); + } + + Future _fullScreenListener() async { + if (!chewieAudioController.isFullScreen) { + Future.delayed(Duration(seconds: 1), () { + }); + } + } + + Widget videoWidget(double width, double height, src) { + print("src : $src"); + return MediaQuery( + data: MediaQuery.of(context).copyWith( + textScaleFactor: 0.9, + ), + child: !isShowImg + ? (chewieAudioController != null + ? Container( + width: width, + height: height, + child: chewies = Chewie( + controller: chewieAudioController, + ), + ) + : Container( + width: width, + height: height, + )) + : GestureDetector( + onTap: (){ + setState(() { + isShowImg = false; + }); + }, + child: Container( + width: width, + height: width / 7 * 5, + color: Colors.black, + child: Stack( + children: [ + Center( + child: MImage( + src, + fit: BoxFit.cover, + errorSrc: "assets/image/default_2_1.png", + fadeSrc: "assets/image/default_2_1.png", + ), + ), + Center( + child: Icon( + Icons.play_circle_outline, + color: Colors.white, + size: 60, + ), + ), + ], + ), + ), + ), + ); + } + + Widget anthology() { + return Container( + color: Colors.white, + margin: EdgeInsets.only(bottom: 16), + padding: EdgeInsets.all(16), + child: Column( + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "选集", + style: TextStyle( + fontSize: 15.sp, + fontWeight: MyFontWeight.medium, + color: Color(0xFF1A1A1A), + ), + ), + Text( + "共${chapterList.length}集", + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.regular, + color: Color(0xFF1A1A1A), + ), + ), + ], + ), + Container( + height: 70.h, + margin: EdgeInsets.only(top:10), + child: ListView.builder( + scrollDirection: Axis.horizontal, + physics: BouncingScrollPhysics(), + itemCount:chapterList.length, + itemBuilder: (context, position) { + return GestureDetector( + onTap: () { + setState(() { + chapterIndex = position; + isShowImg = true; + initVideo(chapterList[position].content.fileUrl); + }); + }, + child: classSelectItem(chapterList[position],position), + ); + }, + ), + ), + ], + ), + ); + } + + Widget classSelectItem(Chapter chapterList,position) { + return Container( + width: 106.w, + alignment: Alignment.center, + margin: EdgeInsets.symmetric( + horizontal: 6.w, + vertical: 3, + ), + padding: EdgeInsets.all(8), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + color: position==chapterIndex ? Color(0xFF32A060): Color(0xFFE5E5E5), + ), + child: Text( + chapterList?.name ?? chapterList.name ?? "", + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: position == chapterIndex ? Colors.white :Color(0xFF7C7C7C), + ), + ), + ); + } + + contentHeight() { + double contentHeight = MediaQuery + .of(context) + .size + .height - + kToolbarHeight - + MediaQuery + .of(context) + .padding + .top - + 160.h; + if ((contentHeight - 60.h) > (128.h * memberList.length)) { + commentHeight = contentHeight - (128.h * memberList.length); + } + } + + ///给文章/活动点赞 + _queryInformationLikes() async { + BaseData baseData = await apiService.informationLikes("1455102859841372160"); + if (baseData != null && baseData.isSuccess) { + commentKey.currentState.setState(() {}); + setState(() { + // if (comunity.selfLike ?? false) + // comunity.likes -= 1; + // else + // comunity.likes += 1; + // comunity.selfLike = !comunity.selfLike ?? false; + }); + } else { + // SmartDialog.showToast(baseData.msg, alignment: Alignment.center); + } + } + + ///发布评论 + _queryMemberComment(String content) async { + BaseData baseData = await apiService.memberComment({ + "content": content, + "parentId": parenId, + "relationalId":course.id, + "relationalType": 1 + }).catchError((error) {}); + if (baseData != null && baseData.isSuccess) { + CommentListState state = commentKey.currentState; + state.queryMemberCommentList(); + commentTextController.text = ""; + FocusScope.of(context).unfocus(); + _queryMemberCommentList(); + } + } + + ///评论列表 + _queryMemberCommentList() async { + SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); + if (apiService == null) + apiService = ApiService( + Dio(), + context: context, + token: sharedPreferences.getString("token"), + showLoading: false, + ); + BaseData> baseData = + await apiService.memberCommentList({ + "pageNum": 1, + "pageSize": 100, + "relationalId":course.id, + "relationalType": 1, + }).catchError((error) {}); + if (baseData != null && baseData.isSuccess) { + commentTotal = baseData.data.size; + memberList = baseData.data.list; + contentHeight(); + if (mounted) setState(() {}); + } + } + + ///滑动到评论列表 + _toComment() { + if (commentKey.currentContext == null) return; + RenderBox firstRenderBox = commentKey.currentContext.findRenderObject(); + Offset first = firstRenderBox.localToGlobal(Offset.zero); + scrollController.animateTo( + first.dy + + scrollController.offset - + (kToolbarHeight + MediaQuery + .of(context) + .padding + .top), + duration: Duration(milliseconds: 300), + curve: Curves.easeIn, + ); + } + + ///评论 回复 + _reply(memberComment) { + FocusScope.of(context).requestFocus(commentFocus); + parenId = memberComment.id; + hintText = S.of(context).huifu_("${memberComment.username}"); + } + + ///删除评论 + delComment(memberComment) async { + BaseData baseData = await apiService.delComment(memberComment.id); + if (baseData != null && baseData.isSuccess) { + CommentListState state = commentKey.currentState; + state.queryMemberCommentList(); + } + } + + ///删除评论的提示 + _delCommentTips(memberComment) { + SmartDialog.show(widget: Tips(() { + delComment(memberComment); + })); + } +} diff --git a/lib/community/community_view/home_class.dart b/lib/community/community_view/home_class.dart index 2f4c13ad..b7b19f0c 100644 --- a/lib/community/community_view/home_class.dart +++ b/lib/community/community_view/home_class.dart @@ -1,18 +1,18 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart'; -import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart'; +import 'package:huixiang/retrofit/data/collect_class_list.dart'; import 'package:huixiang/retrofit/data/course_list.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/custom_image.dart'; -import 'package:huixiang/view_widget/item_title.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class HomeClass extends StatefulWidget { - final List classList; + final List collect; + final List collectList; - HomeClass(this.classList); + HomeClass(this.collect,this.collectList); @override State createState() { return _HomeClass(); @@ -23,7 +23,6 @@ class _HomeClass extends State { ApiService apiService; BMFCoordinate latLng; - BMFMapController _mapController; final TextEditingController editingController = TextEditingController(); @override @@ -33,35 +32,63 @@ class _HomeClass extends State { @override Widget build(BuildContext context) { - return Column( - children: [ - ItemTitle( - text: "回乡小课堂", - imgPath: "assets/image/ketang.png", - ), - Container( - height: 189, - margin: EdgeInsets.only(top:10), - child: ListView.builder( - scrollDirection: Axis.horizontal, - physics: BouncingScrollPhysics(), - padding: EdgeInsets.symmetric(horizontal: 10), - itemCount:widget.classList == null ? 0 : widget.classList.length, - itemBuilder: (context, position) { - return GestureDetector( - onTap: () { - Navigator.of(context).pushNamed('/router/class_details'); - }, - child: classItem(widget.classList[position]), - ); - }, + return ListView.builder( + padding: EdgeInsets.zero, + itemCount:widget.collectList == null ? 0 : widget.collectList.length, + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemBuilder: (context, position) { + return collectItem(widget.collectList[position]); + }, + ); + } + + Widget collectItem(CollectClassList collectList) { + return Container( + width: 168, + height: 230, + margin: EdgeInsets.symmetric( + horizontal: 6.w, + vertical:10, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding(padding: EdgeInsets.only(left: 16,top: 5), + child: Text( + collectList.name, + style: TextStyle( + fontSize: 15.sp, + fontWeight: MyFontWeight.medium, + color: Colors.black, + ), + ),), + Container( + height: 189, + margin: EdgeInsets.only(top:10), + child: ListView.builder( + scrollDirection: Axis.horizontal, + physics: BouncingScrollPhysics(), + padding: EdgeInsets.symmetric(horizontal: 10), + itemCount:widget.collect == null ? 0 : widget.collect.length, + itemBuilder: (context, position) { + return GestureDetector( + onTap: () { + Navigator.of(context).pushNamed('/router/class_details', + arguments: {"id":widget.collect[position].id}); + }, + child: classItem(widget.collect[position]), + ); + }, + ), ), - ), - ], + ], + ), ); } - Widget classItem(CourseList classList) { + Widget classItem(CourseList collect) { return Container( width: 168, height: 189, @@ -79,7 +106,7 @@ class _HomeClass extends State { color: Color.fromARGB(80, 0, 0, 0), child: ClipRRect( child: MImage( - classList.coverImg, + collect.coverImg, width: double.infinity, height: 120, fit: BoxFit.cover, @@ -107,7 +134,7 @@ class _HomeClass extends State { ), SizedBox(width:5), Text( - classList.likes.toString(), + collect.likes.toString(), style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, @@ -117,32 +144,32 @@ class _HomeClass extends State { ], ), SizedBox(width:8), - Row( - children: [ - Image.asset( - "assets/image/ketang_message.png", - width: 16.w, - height: 16.h, - color: Colors.white, - ), - SizedBox(width:5), - Text( - classList.viewers.toString(), - style: TextStyle( - fontSize: 12.sp, - fontWeight: MyFontWeight.regular, - color: Colors.white, - ), - ), - ], - ), + // Row( + // children: [ + // Image.asset( + // "assets/image/ketang_message.png", + // width: 16.w, + // height: 16.h, + // color: Colors.white, + // ), + // SizedBox(width:5), + // Text( + // collect.viewers.toString(), + // style: TextStyle( + // fontSize: 12.sp, + // fontWeight: MyFontWeight.regular, + // color: Colors.white, + // ), + // ), + // ], + // ), ], ), ), ], ), Container( - padding: EdgeInsets.only(left: 3,top: 2), + padding: EdgeInsets.only(left:4,top: 2), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, @@ -153,7 +180,7 @@ class _HomeClass extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - height: 15.h, + height: 16.h, width: 30.w, alignment: Alignment.center, decoration: BoxDecoration( @@ -166,7 +193,7 @@ class _HomeClass extends State { ), ), child: Text( - ( classList?.tags != null && classList.tags.length > 0 )?classList.tags[0] : "", + ( collect?.tags != null && collect.tags.length > 0 )?collect.tags[0] : "", style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.medium, @@ -176,7 +203,7 @@ class _HomeClass extends State { ), SizedBox(width:5), Expanded(child: Text( - classList.subject, + collect.subject, style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.medium, @@ -187,7 +214,7 @@ class _HomeClass extends State { ), SizedBox(height:3), Text( - "讲师:${classList.author.name}", + "讲师:${collect.author.name}", style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart index 0ff917ce..22ffdc79 100644 --- a/lib/home/home_page.dart +++ b/lib/home/home_page.dart @@ -32,6 +32,8 @@ import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'home_view/shortcut_operation.dart'; + class HomePage extends StatefulWidget { final GestureTapCallback callback; @@ -264,6 +266,9 @@ class _HomePage extends State with AutomaticKeepAliveClientMixin { ///banner HomeBanner(bannerData, controller), + ///快捷操作 + ShortcutOperation(), + ///签到 SignView(isSigned,(value){setState(() { isSigned = value; @@ -276,10 +281,11 @@ class _HomePage extends State with AutomaticKeepAliveClientMixin { // ///品牌介绍 // BrandView(brandData), - ///快捷下单 + ///店铺推荐 QuickOrder(), - CouponView(), + ///超级优惠券 + // CouponView(), ///积分商城 HomeIntegralStore(gooods, callback), diff --git a/lib/home/home_view/quick_order.dart b/lib/home/home_view/quick_order.dart index 5b0dd87a..3fd1a771 100644 --- a/lib/home/home_view/quick_order.dart +++ b/lib/home/home_view/quick_order.dart @@ -161,7 +161,7 @@ class _QuickOrder extends State { return Column( children: [ ItemTitle( - text: "快捷下单", + text: "店铺推荐", imgPath: "assets/image/icon_points_mall.png", ), Container( diff --git a/lib/home/home_view/shortcut_operation.dart b/lib/home/home_view/shortcut_operation.dart new file mode 100644 index 00000000..e7675d63 --- /dev/null +++ b/lib/home/home_view/shortcut_operation.dart @@ -0,0 +1,158 @@ +import 'package:dio/dio.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/activity.dart'; +import 'package:huixiang/retrofit/data/base_data.dart'; +import 'package:huixiang/retrofit/data/page.dart'; +import 'package:huixiang/retrofit/retrofit_api.dart'; +import 'package:huixiang/utils/font_weight.dart'; +import 'package:huixiang/view_widget/item_title.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class ShortcutOperation extends StatefulWidget { + @override + State createState() { + return _ShortcutOperation(); + } +} + +class _ShortcutOperation extends State { + ApiService apiService; + + @override + void initState() { + super.initState(); + } + + + @override + Widget build(BuildContext context) { + return Container( + height: 150.h, + margin: EdgeInsets.only(bottom:15), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + onTap: (){ + + }, + child: Container( + width: 106, + color: Colors.white, + margin: EdgeInsets.only(left: 15,right: 15), + padding: EdgeInsets.only(top: 8,bottom: 8), + child: Column( + children: [ + Text( + "现在下单", + style: TextStyle( + fontWeight: MyFontWeight.semi_bold, + fontSize: 15.sp, + color: Colors.black, + ), + ), + SizedBox(height: 5), + Text( + "美味等你来!", + style: TextStyle( + fontWeight: MyFontWeight.regular, + fontSize: 12.sp, + color: Colors.black, + ), + ), + SizedBox(height: 20), + Image.asset( + "assets/image/home_order.png", + width:70, + height:70, + ), + ], + ), + ), + ), + GestureDetector( + onTap: (){ + + }, + child: Container( + width: 106, + color: Colors.white, + margin: EdgeInsets.only(left: 15,right: 15), + padding: EdgeInsets.only(top: 8,bottom: 8), + child: Column( + children: [ + Text( + "平台储值", + style: TextStyle( + fontWeight: MyFontWeight.semi_bold, + fontSize: 15.sp, + color: Colors.black, + ), + ), + SizedBox(height: 5), + Text( + "充值送会员!", + style: TextStyle( + fontWeight: MyFontWeight.regular, + fontSize: 12.sp, + color: Colors.black, + ), + ), + SizedBox(height: 20), + Image.asset( + "assets/image/home_recharge.png", + width:70, + height:70, + ), + ], + ), + ), + ), + GestureDetector( + onTap: (){ + Navigator.of(context).pushNamed('/router/roll_center_page'); + }, + child:Container( + width: 106, + color: Colors.white, + margin: EdgeInsets.only(left: 15,right: 15), + padding: EdgeInsets.only(top: 8,bottom: 8), + child: Column( + children: [ + Text( + "天天有劵", + style: TextStyle( + fontWeight: MyFontWeight.semi_bold, + fontSize: 15.sp, + color: Colors.black, + ), + ), + SizedBox(height: 5), + Text( + "来领超值好劵!", + style: TextStyle( + fontWeight: MyFontWeight.regular, + fontSize: 12.sp, + color: Colors.black, + ), + ), + SizedBox(height: 20), + Image.asset( + "assets/image/home_coupon.png", + width:70, + height:70, + ), + ], + ), + ), + ), + ], + ), + ); + } + +} diff --git a/lib/main.dart b/lib/main.dart index 02623816..5f02f6b1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -308,5 +308,5 @@ Map routers = { '/router/communityFollow': (context, {arguments}) => CommunityFollow(), '/router/releasePage': (context, {arguments}) => ReleasePage(), '/router/activity_list': (context, {arguments}) => ActivityList(), - '/router/class_details': (context, {arguments}) => ClassDetails(), + '/router/class_details': (context, {arguments}) => ClassDetails(arguments: arguments), }; diff --git a/lib/order/exchange_order_page.dart b/lib/order/exchange_order_page.dart index d06bb26d..5701cc22 100644 --- a/lib/order/exchange_order_page.dart +++ b/lib/order/exchange_order_page.dart @@ -8,6 +8,7 @@ import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/user_info.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; +import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -26,6 +27,9 @@ class ExchangeOrderPage extends StatefulWidget { class _ExchangeOrderPage extends State { ApiService apiService; + String money = "0"; + String balance = "0"; + var checkIndex = 1; @override void initState() { @@ -51,14 +55,15 @@ class _ExchangeOrderPage extends State { background: Color(0xFFFAFAFA), leadingColor: Colors.black, ), - body: Column( + body: SingleChildScrollView( + physics: BouncingScrollPhysics(), + child: Column( children: [ - Expanded( - child: Column( + Column( children: [ Container( margin: - EdgeInsets.only(left: 16, right: 16, top: 26, bottom: 8), + EdgeInsets.only(left: 16, right: 16, top: 26, bottom: 8), padding: EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, @@ -110,8 +115,8 @@ class _ExchangeOrderPage extends State { widget.arguments["useTyped"] == 1 ? S.of(context).ziti : widget.arguments["useTyped"] == 2 - ? S.of(context).peisong - : S.of(context).xianshangfafang, + ? S.of(context).peisong + : S.of(context).xianshangfafang, style: TextStyle( fontSize: 14.sp, color: Color(0xFF353535), @@ -153,13 +158,13 @@ class _ExchangeOrderPage extends State { (address != null && address != "") ? address : widget.arguments["useTyped"] == 1 - ? S.of(context).qingxuanzhemendian - : widget.arguments["useTyped"] == - 2 - ? S - .of(context) - .qingxuanzeshouhuodizhi - : S.of(context).xuni, + ? S.of(context).qingxuanzhemendian + : widget.arguments["useTyped"] == + 2 + ? S + .of(context) + .qingxuanzeshouhuodizhi + : S.of(context).xuni, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, @@ -205,8 +210,8 @@ class _ExchangeOrderPage extends State { widget.arguments["useTyped"] == 1 ? S.of(context).duihuanhouwugegongzuori : widget.arguments["useTyped"] == 2 - ? S.of(context).duihuanhoufahuo - : S.of(context).feishiwushangpin, + ? S.of(context).duihuanhoufahuo + : S.of(context).feishiwushangpin, style: TextStyle( fontSize: 14.sp, color: widget.arguments["useTyped"] == 3 @@ -220,7 +225,7 @@ class _ExchangeOrderPage extends State { ), Container( margin: - EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16), + EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16), padding: EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, @@ -356,33 +361,265 @@ class _ExchangeOrderPage extends State { ], ), ), - ], - )), - GestureDetector( - onTap: () { - if (!storeIsSelected) return; - creditOrder(); - }, - child: Container( - padding: EdgeInsets.only(top: 16, bottom: 16), - decoration: BoxDecoration( - color: MaterialStateColor.resolveWith((states) => + Container( + margin: + EdgeInsets.only(left: 16, right: 16, bottom: 8), + padding: EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(12), + offset: Offset(0, 3), + blurRadius: 14, + spreadRadius: 0, + ) + ], + borderRadius: BorderRadius.all(Radius.circular(8)), + ), + child: Column( + children: [ + Row( + children: [ + Expanded(child: Text( + "兑换数量", + style: TextStyle( + fontWeight: MyFontWeight.regular, + fontSize: 14.sp, + color: Color(0xFF353535)), + )), + InkWell( + onTap: () { + }, + child: Image.asset( + "assets/image/reduce.png", + width: 22, + height: 22, + ), + ), + Container( + width: 30, + alignment: Alignment.center, + child: Text( + "1", + style: TextStyle( + color: Colors.black, + fontSize: 14.sp, + fontWeight: MyFontWeight.medium, + ), + ), + ), + InkWell( + onTap: () { + }, + child: Image.asset( + "assets/image/add.png", + width: 22, + height: 22, + ), + ), + ], + ), + ], + ), + ), + Container( + width: double.infinity, + margin: EdgeInsets.only( + left: 16.w, + right: 16.w, + top: 12.h, + bottom:5.h, + ), + padding: EdgeInsets.only( + left: 16.w, + right: 16.w, + top: 20.h, + bottom: 20.h, + ), + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color(0x000000).withAlpha(25), + offset: Offset(0, 1), + blurRadius: 12.0, + ), + ], + color: Colors.white, + borderRadius: BorderRadius.circular(8), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 16.h), + child: Text( + S.of(context).zhifufangshi, + style: TextStyle( + fontSize: 16.sp, + color: Colors.black, + fontWeight: MyFontWeight.regular, + ), + ), + ), + GestureDetector( + onTap: () { + setState(() { + checkIndex = 1; + }); + // widget.payChannelCheck(4); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + checkPayView(1), + Expanded( + child: Container(), + flex: 1, + ), + Text( + "¥$money", + style: TextStyle( + fontSize: 14.sp, + color: Color(0xff353535), + fontWeight: MyFontWeight.semi_bold, + ), + ), + SizedBox( + width: 10, + ), + Text( + S.of(context).pingtaiyue, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xff353535), + fontWeight: MyFontWeight.semi_bold, + ), + ), + ], + ), + ), + SizedBox( + height: 10, + ), + GestureDetector( + onTap: () { + setState(() { + checkIndex = 2; + }); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + checkPayView(2), + Expanded( + child: Container(), + flex: 1, + ), + Text( + "¥$balance", + style: TextStyle( + fontSize: 14.sp, + color: Color(0xff353535), + fontWeight: MyFontWeight.semi_bold, + ), + ), + SizedBox( + width: 10, + ), + Text( + S.of(context).dianpuyue, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xff353535), + fontWeight: MyFontWeight.semi_bold, + ), + ), + ], + ), + ), + SizedBox( + height: 10, + ), + GestureDetector( + onTap: () { + setState(() { + checkIndex = 3; + }); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + checkPayView(3), + Spacer(), + Image.asset("assets/image/icon_we_chat.png"), + Padding( + padding: EdgeInsets.only(left: 8.w), + child: Text( + S.of(context).weixinzhifu, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xff353535), + fontWeight: MyFontWeight.semi_bold, + ), + ), + ), + ], + ), + ), + ], + ), + ), + GestureDetector( + onTap: () { + if (!storeIsSelected) return; + creditOrder(); + }, + child: Container( + padding: EdgeInsets.only(top: 16, bottom: 16), + decoration: BoxDecoration( + color: MaterialStateColor.resolveWith((states) => storeIsSelected ? Color(0xFF32A060) : Color(0xFFD8D8D8)), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(4), - topRight: Radius.circular(4))), - alignment: Alignment.center, - child: Text( - S.of(context).querenduihuan, - style: TextStyle( - fontSize: 16.sp, - color: MaterialStateColor.resolveWith((states) => + borderRadius: BorderRadius.only( + topLeft: Radius.circular(4), + topRight: Radius.circular(4))), + alignment: Alignment.center, + child: Text( + S.of(context).querenduihuan, + style: TextStyle( + fontSize: 16.sp, + color: MaterialStateColor.resolveWith((states) => storeIsSelected ? Colors.white : Color(0xFFA0A0A0)), - fontWeight: FontWeight.bold), + fontWeight: FontWeight.bold), + ), + ), ), - ), + ], ), + + // Expanded( + // child: + // ), + ], + ) ,), + ); + } + + Widget checkPayView(var index) { + return Container( + padding: EdgeInsets.only(right: 16.w), + alignment: Alignment.center, + child: Image.asset( + checkIndex != index + ? "assets/image/icon_radio_unselected.png" + : "assets/image/icon_radio_selected.png", + width: 15.w, + height: 15.h, ), ); } diff --git a/lib/retrofit/data/chapter.dart b/lib/retrofit/data/chapter.dart new file mode 100644 index 00000000..f4111ac1 --- /dev/null +++ b/lib/retrofit/data/chapter.dart @@ -0,0 +1,136 @@ +/// id : "1452530820865589248" +/// createTime : "2021-10-25 15:01:49" +/// createUser : "1" +/// updateTime : "2021-11-02 17:09:56" +/// updateUser : "1" +/// courseId : "1452472611438067712" +/// name : "111" +/// content : {"coverImg":"https://pos.upload.gznl.top/0000/2021/11/3e014154-57cc-441e-9d02-aa53975979f5.png","remark":"11111111","fileUrl":"https://pos.upload.gznl.top/0000/2021/11/d87dd996-e269-46eb-b7ef-f8ceddfabef2.mp4"} +/// sort : 0 +/// isDelete : 0 + +class Chapter { + Chapter({ + String id, + String createTime, + String createUser, + String updateTime, + String updateUser, + String courseId, + String name, + Content content, + int sort, + int isDelete,}){ + _id = id; + _createTime = createTime; + _createUser = createUser; + _updateTime = updateTime; + _updateUser = updateUser; + _courseId = courseId; + _name = name; + _content = content; + _sort = sort; + _isDelete = isDelete; +} + + Chapter.fromJson(dynamic json) { + _id = json['id']; + _createTime = json['createTime']; + _createUser = json['createUser']; + _updateTime = json['updateTime']; + _updateUser = json['updateUser']; + _courseId = json['courseId']; + _name = json['name']; + _content = json['content'] != null ? Content.fromJson(json['content']) : null; + _sort = json['sort']; + _isDelete = json['isDelete']; + } + String _id; + String _createTime; + String _createUser; + String _updateTime; + String _updateUser; + String _courseId; + String _name; + Content _content; + int _sort; + int _isDelete; + + String get id => _id; + String get createTime => _createTime; + String get createUser => _createUser; + String get updateTime => _updateTime; + String get updateUser => _updateUser; + String get courseId => _courseId; + String get name => _name; + Content get content => _content; + int get sort => _sort; + int get isDelete => _isDelete; + + Map toJson() { + final map = {}; + map['id'] = _id; + map['createTime'] = _createTime; + map['createUser'] = _createUser; + map['updateTime'] = _updateTime; + map['updateUser'] = _updateUser; + map['courseId'] = _courseId; + map['name'] = _name; + if (_content != null) { + map['content'] = _content.toJson(); + } + map['sort'] = _sort; + map['isDelete'] = _isDelete; + return map; + } + +} + +/// coverImg : "https://pos.upload.gznl.top/0000/2021/11/3e014154-57cc-441e-9d02-aa53975979f5.png" +/// remark : "11111111" +/// fileUrl : "https://pos.upload.gznl.top/0000/2021/11/d87dd996-e269-46eb-b7ef-f8ceddfabef2.mp4" + +class Content { + Content({ + String coverImg, + String remark, + String fileUrl,}){ + _coverImg = coverImg; + _remark = remark; + _fileUrl = fileUrl; +} + + Content.fromJson(dynamic json) { + _coverImg = json['coverImg']; + _remark = json['remark']; + _fileUrl = json['fileUrl']; + } + String _coverImg; + String _remark; + String _fileUrl; + + String get coverImg => _coverImg; + String get remark => _remark; + String get fileUrl => _fileUrl; + + + set coverImg(String value) { + _coverImg = value; + } + + Map toJson() { + final map = {}; + map['coverImg'] = _coverImg; + map['remark'] = _remark; + map['fileUrl'] = _fileUrl; + return map; + } + + set remark(String value) { + _remark = value; + } + + set fileUrl(String value) { + _fileUrl = value; + } +} \ No newline at end of file diff --git a/lib/retrofit/data/collect_class_list.dart b/lib/retrofit/data/collect_class_list.dart new file mode 100644 index 00000000..be69a97d --- /dev/null +++ b/lib/retrofit/data/collect_class_list.dart @@ -0,0 +1,114 @@ +/// id : "1454326699855446016" +/// createTime : "2021-10-30 13:58:00" +/// createUser : "1" +/// updateTime : "2021-10-30 13:58:00" +/// updateUser : "1" +/// name : "111" +/// sort : 0 +/// enabled : true +/// isDelete : 0 + +class CollectClassList { + CollectClassList({ + String id, + String createTime, + String createUser, + String updateTime, + String updateUser, + String name, + int sort, + bool enabled, + int isDelete,}){ + _id = id; + _createTime = createTime; + _createUser = createUser; + _updateTime = updateTime; + _updateUser = updateUser; + _name = name; + _sort = sort; + _enabled = enabled; + _isDelete = isDelete; +} + + CollectClassList.fromJson(dynamic json) { + _id = json['id']; + _createTime = json['createTime']; + _createUser = json['createUser']; + _updateTime = json['updateTime']; + _updateUser = json['updateUser']; + _name = json['name']; + _sort = json['sort']; + _enabled = json['enabled']; + _isDelete = json['isDelete']; + } + String _id; + String _createTime; + String _createUser; + String _updateTime; + String _updateUser; + String _name; + int _sort; + bool _enabled; + int _isDelete; + + String get id => _id; + String get createTime => _createTime; + String get createUser => _createUser; + String get updateTime => _updateTime; + String get updateUser => _updateUser; + String get name => _name; + int get sort => _sort; + bool get enabled => _enabled; + int get isDelete => _isDelete; + + + set id(String value) { + _id = value; + } + + Map toJson() { + final map = {}; + map['id'] = _id; + map['createTime'] = _createTime; + map['createUser'] = _createUser; + map['updateTime'] = _updateTime; + map['updateUser'] = _updateUser; + map['name'] = _name; + map['sort'] = _sort; + map['enabled'] = _enabled; + map['isDelete'] = _isDelete; + return map; + } + + set createTime(String value) { + _createTime = value; + } + + set createUser(String value) { + _createUser = value; + } + + set updateTime(String value) { + _updateTime = value; + } + + set updateUser(String value) { + _updateUser = value; + } + + set name(String value) { + _name = value; + } + + set sort(int value) { + _sort = value; + } + + set enabled(bool value) { + _enabled = value; + } + + set isDelete(int value) { + _isDelete = value; + } +} \ No newline at end of file diff --git a/lib/retrofit/data/course_details.dart b/lib/retrofit/data/course_details.dart new file mode 100644 index 00000000..5edf03e5 --- /dev/null +++ b/lib/retrofit/data/course_details.dart @@ -0,0 +1,152 @@ +/// id : "1455102859841372160" +/// createTime : "2021-11-01 17:22:11" +/// createUser : "1" +/// updateTime : "2021-11-01 17:22:11" +/// updateUser : "1" +/// categoryId : "1452472226421932032" +/// subject : "后会无期" +/// tags : ["11"] +/// coverImg : "https://pos.upload.gznl.top/0000/2021/11/d8305d15-1a39-4b08-a172-eba7f18b9968.jpg" +/// author : {"name":"1","avatar":"1"} +/// introduce : "1" +/// viewers : 0 +/// likes : 0 +/// state : true +/// isDelete : 0 + +class CourseDetails { + CourseDetails({ + String id, + String createTime, + String createUser, + String updateTime, + String updateUser, + String categoryId, + String subject, + List tags, + String coverImg, + Author author, + String introduce, + int viewers, + int likes, + bool state, + int isDelete,}){ + _id = id; + _createTime = createTime; + _createUser = createUser; + _updateTime = updateTime; + _updateUser = updateUser; + _categoryId = categoryId; + _subject = subject; + _tags = tags; + _coverImg = coverImg; + _author = author; + _introduce = introduce; + _viewers = viewers; + _likes = likes; + _state = state; + _isDelete = isDelete; +} + + CourseDetails.fromJson(dynamic json) { + _id = json['id']; + _createTime = json['createTime']; + _createUser = json['createUser']; + _updateTime = json['updateTime']; + _updateUser = json['updateUser']; + _categoryId = json['categoryId']; + _subject = json['subject']; + _tags = json['tags'] != null ? json['tags'].cast() : []; + _coverImg = json['coverImg']; + _author = json['author'] != null ? Author.fromJson(json['author']) : null; + _introduce = json['introduce']; + _viewers = json['viewers']; + _likes = json['likes']; + _state = json['state']; + _isDelete = json['isDelete']; + } + String _id; + String _createTime; + String _createUser; + String _updateTime; + String _updateUser; + String _categoryId; + String _subject; + List _tags; + String _coverImg; + Author _author; + String _introduce; + int _viewers; + int _likes; + bool _state; + int _isDelete; + + String get id => _id; + String get createTime => _createTime; + String get createUser => _createUser; + String get updateTime => _updateTime; + String get updateUser => _updateUser; + String get categoryId => _categoryId; + String get subject => _subject; + List get tags => _tags; + String get coverImg => _coverImg; + Author get author => _author; + String get introduce => _introduce; + int get viewers => _viewers; + int get likes => _likes; + bool get state => _state; + int get isDelete => _isDelete; + + Map toJson() { + final map = {}; + map['id'] = _id; + map['createTime'] = _createTime; + map['createUser'] = _createUser; + map['updateTime'] = _updateTime; + map['updateUser'] = _updateUser; + map['categoryId'] = _categoryId; + map['subject'] = _subject; + map['tags'] = _tags; + map['coverImg'] = _coverImg; + if (_author != null) { + map['author'] = _author.toJson(); + } + map['introduce'] = _introduce; + map['viewers'] = _viewers; + map['likes'] = _likes; + map['state'] = _state; + map['isDelete'] = _isDelete; + return map; + } + +} + +/// name : "1" +/// avatar : "1" + +class Author { + Author({ + String name, + String avatar,}){ + _name = name; + _avatar = avatar; +} + + Author.fromJson(dynamic json) { + _name = json['name']; + _avatar = json['avatar']; + } + String _name; + String _avatar; + + String get name => _name; + String get avatar => _avatar; + + Map toJson() { + final map = {}; + map['name'] = _name; + map['avatar'] = _avatar; + return map; + } + +} \ No newline at end of file diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart index 6ad80563..007c9611 100644 --- a/lib/retrofit/retrofit_api.dart +++ b/lib/retrofit/retrofit_api.dart @@ -21,6 +21,9 @@ import 'data/address.dart'; import 'data/banner.dart'; import 'data/brand_data.dart'; import 'data/category_select_list.dart'; +import 'data/chapter.dart'; +import 'data/collect_class_list.dart'; +import 'data/course_details.dart'; import 'data/course_list.dart'; import 'data/exchange_order.dart'; import 'data/follow_list.dart'; @@ -397,10 +400,22 @@ abstract class ApiService { ///课程章节列表 @GET("/course/catalogList/{courseId}") - Future catalogList(@Path("courseId") String courseId); + Future>> catalogList(@Path("courseId") String courseId); /// 课程列表 @POST("/course/list") Future>> courseList(@Body() Map map); + ///课程的合集列表 + @GET("/course/collectList") + Future>> collectList(); + + ///合集包含的课程列表 + @GET("/course/collect/{collectId}") + Future>> collect(@Path("collectId") String collectId); + + ///课程详情 + @GET("/course/{id}") + Future> course(@Path("id") String id); + } diff --git a/lib/retrofit/retrofit_api.g.dart b/lib/retrofit/retrofit_api.g.dart index 63ddb880..cfab0889 100644 --- a/lib/retrofit/retrofit_api.g.dart +++ b/lib/retrofit/retrofit_api.g.dart @@ -1369,7 +1369,7 @@ class _ApiService implements ApiService { } @override - Future> catalogList(courseId) async { + Future>> catalogList(courseId) async { ArgumentError.checkNotNull(courseId, 'courseId'); const _extra = {}; final queryParameters = {}; @@ -1383,13 +1383,37 @@ class _ApiService implements ApiService { extra: _extra, baseUrl: baseUrl), data: _data); - final value = BaseData.fromJson( - _result.data, - (json) => json as dynamic, - ); + final value = BaseData>.fromJson( + _result.data, + (json) => (json as List) + .map((i) => Chapter.fromJson(i as Map)) + .toList()); return value; } + // + // @override + // Future> catalogList(courseId) async { + // ArgumentError.checkNotNull(courseId, 'courseId'); + // const _extra = {}; + // final queryParameters = {}; + // final _data = {}; + // final _result = await _dio.request>( + // '/course/catalogList/$courseId', + // queryParameters: queryParameters, + // options: RequestOptions( + // method: 'GET', + // headers: {}, + // extra: _extra, + // baseUrl: baseUrl), + // data: _data); + // final value = BaseData.fromJson( + // _result.data, + // (json) => json as dynamic, + // ); + // return value; + // } + @override Future>> courseList(map) async { ArgumentError.checkNotNull(map, 'map'); @@ -1416,4 +1440,71 @@ class _ApiService implements ApiService { return value; } + @override + Future>> collectList() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/course/collectList', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData>.fromJson( + _result.data, + (json) => (json as List) + .map((i) => CollectClassList.fromJson(i as Map)) + .toList()); + return value; + } + + @override + Future>> collect(collectId) async { + ArgumentError.checkNotNull(collectId, 'collectId'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/course/collect/$collectId', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData>.fromJson( + _result.data, + (json) => (json as List) + .map((i) => CourseList.fromJson(i as Map)) + .toList()); + return value; + } + + @override + Future> course(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/course/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson( + _result.data, + (json) => CourseDetails.fromJson(json), + ); + return value; + } + } diff --git a/lib/web/web_view/comment_list.dart b/lib/web/web_view/comment_list.dart index 10dd6fd0..06619ee5 100644 --- a/lib/web/web_view/comment_list.dart +++ b/lib/web/web_view/comment_list.dart @@ -159,23 +159,23 @@ class CommentListState extends State { ), ), ), - if (memberList == null || memberList.length == 0) - Container( - width: double.infinity, - height: MediaQuery.of(context).size.height - kToolbarHeight - - MediaQuery.of(context).padding.top - 160.h, - alignment: Alignment.topCenter, - color: Color(0xFFF2F2F2), - padding: EdgeInsets.only(top: 22.h), - child: Text( - S.of(context).zanwupinglun, - style: TextStyle( - fontSize: widget.fontSize + 2, - fontWeight: FontWeight.bold, - color: Color(0xFFA0A0A0), - ), - ), - ), + // if (memberList == null || memberList.length == 0) + // Container( + // width: double.infinity, + // height: MediaQuery.of(context).size.height - kToolbarHeight + // - MediaQuery.of(context).padding.top - 160.h, + // alignment: Alignment.topCenter, + // color: Color(0xFFF2F2F2), + // padding: EdgeInsets.only(top: 22.h), + // child: Text( + // S.of(context).zanwupinglun, + // style: TextStyle( + // fontSize: widget.fontSize + 2, + // fontWeight: FontWeight.bold, + // color: Color(0xFFA0A0A0), + // ), + // ), + // ), ], ), ),