Commit 7652f70133e79e0dd3940b3630d89496dc4bfc1b
1 parent
9d080046
feat:课程购买UI逻辑
Showing
11 changed files
with
176 additions
and
11 deletions
lib/app/app.dart
| @@ -31,6 +31,7 @@ class App extends StatelessWidget { | @@ -31,6 +31,7 @@ class App extends StatelessWidget { | ||
| 31 | builder: (context,child) => ResponsiveBreakpoints( | 31 | builder: (context,child) => ResponsiveBreakpoints( |
| 32 | breakpoints: const [ | 32 | breakpoints: const [ |
| 33 | Breakpoint(start: 0, end: 450, name: MOBILE), | 33 | Breakpoint(start: 0, end: 450, name: MOBILE), |
| 34 | + Breakpoint(start: 0, end: 450, name: PHONE), | ||
| 34 | Breakpoint(start: 451, end: 800, name: TABLET), | 35 | Breakpoint(start: 451, end: 800, name: TABLET), |
| 35 | Breakpoint(start: 801, end: 1920, name: DESKTOP), | 36 | Breakpoint(start: 801, end: 1920, name: DESKTOP), |
| 36 | Breakpoint(start: 1921, end: double.infinity, name: '4K'), | 37 | Breakpoint(start: 1921, end: double.infinity, name: '4K'), |
lib/home/home_page.dart
| @@ -70,9 +70,6 @@ class _HomePageView extends StatelessWidget { | @@ -70,9 +70,6 @@ class _HomePageView extends StatelessWidget { | ||
| 70 | }, | 70 | }, |
| 71 | itemBuilder: (BuildContext context,int index){ | 71 | itemBuilder: (BuildContext context,int index){ |
| 72 | return const HomeLessonItem(); | 72 | return const HomeLessonItem(); |
| 73 | - // return Container( | ||
| 74 | - // color:index%2==0?Colors.red:Colors.blue | ||
| 75 | - // ); | ||
| 76 | }) | 73 | }) |
| 77 | , | 74 | , |
| 78 | ), | 75 | ), |
lib/home/widgets/home_tab_header_widget.dart
| @@ -24,7 +24,7 @@ class HomeTabHeaderWidget extends StatelessWidget { | @@ -24,7 +24,7 @@ class HomeTabHeaderWidget extends StatelessWidget { | ||
| 24 | @override | 24 | @override |
| 25 | Widget build(BuildContext context) { | 25 | Widget build(BuildContext context) { |
| 26 | return Container( | 26 | return Container( |
| 27 | - height: 45.h, | 27 | + height: 45, |
| 28 | width: double.infinity, | 28 | width: double.infinity, |
| 29 | color: Colors.purple, | 29 | color: Colors.purple, |
| 30 | padding: EdgeInsets.symmetric(horizontal: 9.5.w), | 30 | padding: EdgeInsets.symmetric(horizontal: 9.5.w), |
| @@ -71,11 +71,11 @@ class HomeTabHeaderWidget extends StatelessWidget { | @@ -71,11 +71,11 @@ class HomeTabHeaderWidget extends StatelessWidget { | ||
| 71 | style: BorderStyle.solid | 71 | style: BorderStyle.solid |
| 72 | ), | 72 | ), |
| 73 | ), | 73 | ), |
| 74 | - child: const Text( | 74 | + child: Text( |
| 75 | 'franky', | 75 | 'franky', |
| 76 | style: TextStyle( | 76 | style: TextStyle( |
| 77 | - color: Color(0xFF333333), | ||
| 78 | - fontSize: 16 | 77 | + color: const Color(0xFF333333), |
| 78 | + fontSize: 16.sp | ||
| 79 | ), | 79 | ), |
| 80 | ), | 80 | ), |
| 81 | ), | 81 | ), |
lib/listen/listen_page.dart
| @@ -39,7 +39,7 @@ class _ListenPageView extends StatelessWidget { | @@ -39,7 +39,7 @@ class _ListenPageView extends StatelessWidget { | ||
| 39 | return ListView.builder( | 39 | return ListView.builder( |
| 40 | itemCount: 10, | 40 | itemCount: 10, |
| 41 | scrollDirection: Axis.horizontal, | 41 | scrollDirection: Axis.horizontal, |
| 42 | - padding: EdgeInsets.symmetric(horizontal: 30.w,vertical: 36.h), | 42 | + padding: EdgeInsets.symmetric(horizontal: 30.w,vertical: 30.h), |
| 43 | itemBuilder: (BuildContext context,int index){ | 43 | itemBuilder: (BuildContext context,int index){ |
| 44 | return ListenItemWidget( | 44 | return ListenItemWidget( |
| 45 | isLock: (index < 5), | 45 | isLock: (index < 5), |
lib/practice/chosetopic/topicpicture/bloc/topic_picture_bloc.dart
0 → 100644
| 1 | +import 'dart:async'; | ||
| 2 | + | ||
| 3 | +import 'package:bloc/bloc.dart'; | ||
| 4 | +import 'package:meta/meta.dart'; | ||
| 5 | + | ||
| 6 | +part 'topic_picture_event.dart'; | ||
| 7 | +part '../topic_picture_state.dart'; | ||
| 8 | + | ||
| 9 | +class TopicPictureBloc extends Bloc<TopicPictureEvent, TopicPictureState> { | ||
| 10 | + TopicPictureBloc() : super(TopicPictureInitial()) { | ||
| 11 | + on<TopicPictureEvent>((event, emit) { | ||
| 12 | + // TODO: implement event handler | ||
| 13 | + }); | ||
| 14 | + } | ||
| 15 | +} |
lib/practice/chosetopic/topicpicture/bloc/topic_picture_event.dart
0 → 100644
lib/practice/chosetopic/topicpicture/bloc/topic_picture_page.dart
0 → 100644
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | + | ||
| 3 | +class TopicPicturePage extends StatelessWidget { | ||
| 4 | + const TopicPicturePage({super.key}); | ||
| 5 | + | ||
| 6 | + @override | ||
| 7 | + Widget build(BuildContext context) { | ||
| 8 | + // TODO: implement build | ||
| 9 | + throw UnimplementedError(); | ||
| 10 | + } | ||
| 11 | +} | ||
| 0 | \ No newline at end of file | 12 | \ No newline at end of file |
lib/practice/chosetopic/topicpicture/topic_picture_state.dart
0 → 100644
lib/shop/exchangelist/widgets/exchange_list_item.dart
| @@ -31,8 +31,8 @@ class ExchangeListItem extends StatelessWidget { | @@ -31,8 +31,8 @@ class ExchangeListItem extends StatelessWidget { | ||
| 31 | child: Row( | 31 | child: Row( |
| 32 | children: [ | 32 | children: [ |
| 33 | Container( | 33 | Container( |
| 34 | - width: 70, | ||
| 35 | - height: 70, | 34 | + width: 70.w, |
| 35 | + height: 70.h, | ||
| 36 | decoration: BoxDecoration( | 36 | decoration: BoxDecoration( |
| 37 | borderRadius: BorderRadius.circular(5.r), | 37 | borderRadius: BorderRadius.circular(5.r), |
| 38 | border: Border.all( | 38 | border: Border.all( |
| @@ -47,7 +47,7 @@ class ExchangeListItem extends StatelessWidget { | @@ -47,7 +47,7 @@ class ExchangeListItem extends StatelessWidget { | ||
| 47 | 17.horizontalSpace, | 47 | 17.horizontalSpace, |
| 48 | Expanded( | 48 | Expanded( |
| 49 | child: Column( | 49 | child: Column( |
| 50 | - mainAxisAlignment: MainAxisAlignment.center, | 50 | + mainAxisAlignment: MainAxisAlignment.spaceAround, |
| 51 | children: [ | 51 | children: [ |
| 52 | Row( | 52 | Row( |
| 53 | children: [ | 53 | children: [ |
lib/shop/home/shop_home_page.dart
| @@ -6,6 +6,7 @@ import 'package:wow_english/common/extension/string_extension.dart'; | @@ -6,6 +6,7 @@ import 'package:wow_english/common/extension/string_extension.dart'; | ||
| 6 | import 'package:wow_english/common/widgets/we_app_bar.dart'; | 6 | import 'package:wow_english/common/widgets/we_app_bar.dart'; |
| 7 | import 'package:wow_english/route/route.dart'; | 7 | import 'package:wow_english/route/route.dart'; |
| 8 | import 'package:wow_english/shop/home/bloc/shop_home_bloc.dart'; | 8 | import 'package:wow_english/shop/home/bloc/shop_home_bloc.dart'; |
| 9 | +import 'package:wow_english/shop/home/widgets/lesson_card_item.dart'; | ||
| 9 | 10 | ||
| 10 | class ShopHomePage extends StatelessWidget { | 11 | class ShopHomePage extends StatelessWidget { |
| 11 | const ShopHomePage({super.key}); | 12 | const ShopHomePage({super.key}); |
| @@ -56,6 +57,25 @@ class _ShopHomeView extends StatelessWidget { | @@ -56,6 +57,25 @@ class _ShopHomeView extends StatelessWidget { | ||
| 56 | ) | 57 | ) |
| 57 | ], | 58 | ], |
| 58 | ), | 59 | ), |
| 60 | + body: Center( | ||
| 61 | + child: Padding( | ||
| 62 | + padding: EdgeInsets.symmetric(vertical: 25.h,horizontal: 25.w), | ||
| 63 | + child: GridView.builder( | ||
| 64 | + itemCount: 4, | ||
| 65 | + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( | ||
| 66 | + crossAxisCount: 2, | ||
| 67 | + childAspectRatio: 2, | ||
| 68 | + mainAxisSpacing: 14.h, | ||
| 69 | + crossAxisSpacing : 4.5.w, | ||
| 70 | + ), | ||
| 71 | + itemBuilder: (BuildContext context,int index){ | ||
| 72 | + return LessonCardItem( | ||
| 73 | + onTap: (){ | ||
| 74 | + EasyLoading.showToast('购买'); | ||
| 75 | + }); | ||
| 76 | + }), | ||
| 77 | + ), | ||
| 78 | + ), | ||
| 59 | ); | 79 | ); |
| 60 | }); | 80 | }); |
| 61 | } | 81 | } |
| 62 | \ No newline at end of file | 82 | \ No newline at end of file |
lib/shop/home/widgets/lesson_card_item.dart
0 → 100644
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
| 3 | + | ||
| 4 | +class LessonCardItem extends StatelessWidget { | ||
| 5 | + const LessonCardItem({super.key, required this.onTap}); | ||
| 6 | + | ||
| 7 | + final Function() onTap; | ||
| 8 | + | ||
| 9 | + @override | ||
| 10 | + Widget build(BuildContext context) { | ||
| 11 | + return Container( | ||
| 12 | + decoration: BoxDecoration( | ||
| 13 | + borderRadius: BorderRadius.circular(10.r), | ||
| 14 | + color: Colors.blue, | ||
| 15 | + border: Border.all( | ||
| 16 | + width: 1.0, | ||
| 17 | + color: Colors.black | ||
| 18 | + ) | ||
| 19 | + // image: DecorationImage( | ||
| 20 | + // image: AssetImage( | ||
| 21 | + // ''.assetPng, | ||
| 22 | + // ), | ||
| 23 | + // fit: BoxFit.fill | ||
| 24 | + // ) | ||
| 25 | + ), | ||
| 26 | + padding: EdgeInsets.symmetric(horizontal: 16.w,vertical: 16.h), | ||
| 27 | + child: Row( | ||
| 28 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 29 | + children: [ | ||
| 30 | + Container( | ||
| 31 | + width: 124.w, | ||
| 32 | + decoration: BoxDecoration( | ||
| 33 | + border: Border.all( | ||
| 34 | + width: 1.0, | ||
| 35 | + color: const Color(0xFF333333), | ||
| 36 | + ), | ||
| 37 | + image: const DecorationImage( | ||
| 38 | + fit: BoxFit.fill, | ||
| 39 | + image: NetworkImage('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2Faa1c2213-820a-4223-8757-5f8cee318a28%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1688713226&t=192b18a613683bcdc5bd76f65c9ff032'), | ||
| 40 | + ) | ||
| 41 | + ), | ||
| 42 | + ), | ||
| 43 | + 21.5.horizontalSpace, | ||
| 44 | + Expanded( | ||
| 45 | + child: Column( | ||
| 46 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 47 | + crossAxisAlignment: CrossAxisAlignment.end, | ||
| 48 | + children: [ | ||
| 49 | + Text( | ||
| 50 | + 'Wow English 课程年卡', | ||
| 51 | + softWrap: true, | ||
| 52 | + textAlign: TextAlign.left, | ||
| 53 | + style: TextStyle( | ||
| 54 | + fontSize: 12.sp, | ||
| 55 | + color: const Color(0xFF333333) | ||
| 56 | + ), | ||
| 57 | + ), | ||
| 58 | + RichText( | ||
| 59 | + text: TextSpan( | ||
| 60 | + children:[ | ||
| 61 | + TextSpan( | ||
| 62 | + text: '¥', | ||
| 63 | + style: TextStyle( | ||
| 64 | + fontSize: 21.sp, | ||
| 65 | + color: const Color(0xFFF51A1A), | ||
| 66 | + ) | ||
| 67 | + ), | ||
| 68 | + TextSpan( | ||
| 69 | + text: '998', | ||
| 70 | + style: TextStyle( | ||
| 71 | + fontSize: 40.sp, | ||
| 72 | + color: const Color(0xFFF51A1A), | ||
| 73 | + ), | ||
| 74 | + ) | ||
| 75 | + ] | ||
| 76 | + ), | ||
| 77 | + ), | ||
| 78 | + GestureDetector( | ||
| 79 | + onTap: () { | ||
| 80 | + onTap(); | ||
| 81 | + }, | ||
| 82 | + child: Container( | ||
| 83 | + decoration: BoxDecoration( | ||
| 84 | + color: const Color(0xFFF5C51F), | ||
| 85 | + borderRadius: BorderRadius.circular(5.r), | ||
| 86 | + border: Border.all( | ||
| 87 | + color: const Color(0xFF333333), | ||
| 88 | + width: 1.0, | ||
| 89 | + ) | ||
| 90 | + ), | ||
| 91 | + padding: EdgeInsets.symmetric( | ||
| 92 | + vertical: 1.h, | ||
| 93 | + horizontal: 26.5.w, | ||
| 94 | + ), | ||
| 95 | + child: Text( | ||
| 96 | + '立即购买', | ||
| 97 | + style: TextStyle( | ||
| 98 | + fontSize: 10.sp, | ||
| 99 | + color: const Color(0xFF333333) | ||
| 100 | + ), | ||
| 101 | + ), | ||
| 102 | + ), | ||
| 103 | + ) | ||
| 104 | + ], | ||
| 105 | + ), | ||
| 106 | + ) | ||
| 107 | + ], | ||
| 108 | + ), | ||
| 109 | + ); | ||
| 110 | + } | ||
| 111 | +} | ||
| 0 | \ No newline at end of file | 112 | \ No newline at end of file |