From d1ab5cb2c18b4e9964006ef6c8a9ed3e96032807 Mon Sep 17 00:00:00 2001 From: wuqifeng <540416539@qq.com> Date: Sun, 4 Aug 2024 16:43:40 +0800 Subject: [PATCH] feat:绘本跟读页上方进度信息改成进度条呈现 --- lib/pages/reading/bloc/reading_bloc.dart | 4 +++- lib/pages/reading/reading_page.dart | 66 ++++++++++++++++++++++++++++++++++-------------------------------- lib/pages/section/section_page.dart | 7 ++++--- lib/route/route.dart | 4 +++- 4 files changed, 44 insertions(+), 37 deletions(-) diff --git a/lib/pages/reading/bloc/reading_bloc.dart b/lib/pages/reading/bloc/reading_bloc.dart index beeacc7..6049b0d 100644 --- a/lib/pages/reading/bloc/reading_bloc.dart +++ b/lib/pages/reading/bloc/reading_bloc.dart @@ -89,7 +89,9 @@ class ReadingPageBloc final BuildContext context; - ReadingPageBloc(this.context, this.pageController, this.courseLessonId) + final Color? moduleColor; + + ReadingPageBloc(this.context, this.pageController, this.courseLessonId, this.moduleColor) : super(ReadingPageInitial()) { on(_pageControllerChange); on(_playModeChange); diff --git a/lib/pages/reading/reading_page.dart b/lib/pages/reading/reading_page.dart index 53c6d28..bcb02c7 100644 --- a/lib/pages/reading/reading_page.dart +++ b/lib/pages/reading/reading_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/pages/reading/widgets/ReadingModeType.dart'; import 'package:wow_english/pages/reading/widgets/reading_dialog_widget.dart'; @@ -8,7 +9,6 @@ import 'package:wow_english/route/route.dart'; import '../../common/core/app_consts.dart'; import '../../common/core/user_util.dart'; -import '../../common/widgets/record_playback_widget.dart'; import '../../common/widgets/recorder_widget.dart'; import '../../common/widgets/speaker_widget.dart'; import '../../models/course_process_entity.dart'; @@ -17,23 +17,25 @@ import 'bloc/reading_bloc.dart'; ///绘本页 class ReadingPage extends StatelessWidget { - const ReadingPage({super.key, this.courseLessonId}); + const ReadingPage({super.key, this.courseLessonId, this.moduleColor}); final String? courseLessonId; + final Color? moduleColor; + @override Widget build(BuildContext context) { return BlocProvider( - create: (_) => - ReadingPageBloc(context, PageController(), courseLessonId ?? '') - ..add(InitBlocEvent()) - ..add(RequestDataEvent()) - ..add(XSVoiceInitEvent({ - 'appKey': AppConsts.xsAppKey, - 'service': AppConsts.xsAppService, - 'secretKey': AppConsts.xsAppSecretKey, - 'userId': UserUtil.getUser()!.id.toString(), - })), + create: (_) => ReadingPageBloc( + context, PageController(), courseLessonId ?? '', moduleColor) + ..add(InitBlocEvent()) + ..add(RequestDataEvent()) + ..add(XSVoiceInitEvent({ + 'appKey': AppConsts.xsAppKey, + 'service': AppConsts.xsAppService, + 'secretKey': AppConsts.xsAppSecretKey, + 'userId': UserUtil.getUser()!.id.toString(), + })), child: _ReadingPage(), ); } @@ -102,20 +104,20 @@ class _ReadingPage extends StatelessWidget { )), ), Container( - height: 32.h, - padding: EdgeInsets.symmetric(horizontal: 27.w), - decoration: BoxDecoration( - color: const Color(0xFF00B6F1), - borderRadius: BorderRadius.circular(15.r), - border: Border.all( - width: 1.0, - color: const Color(0xFF140C10), - ), - ), + height: 10.h, + width: 150.w, alignment: Alignment.center, - child: Text( - '${bloc.currentPage}/${bloc.dataCount()}', - style: TextStyle(fontSize: 20.sp, color: Colors.white), + child: LinearPercentIndicator( + animation: true, + lineHeight: 10.h, + animationDuration: 250, + animateFromLastPercent: true, + percent: bloc.dataCount() > 0 + ? bloc.currentPage / bloc.dataCount() + : 0, + // center: Text('$progress/$total}'), + barRadius: const Radius.circular(5), + progressColor: bloc.moduleColor, ), ), @@ -175,14 +177,14 @@ class _ReadingPage extends StatelessWidget { width: 10.w, ), Expanded( - child: RichText( - text: TextSpan( - style: DefaultTextStyle.of(context).style, - children: bloc.displayContent(), - ), - maxLines: 2, - overflow: TextOverflow.ellipsis, + child: RichText( + text: TextSpan( + style: DefaultTextStyle.of(context).style, + children: bloc.displayContent(), ), + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), ), SizedBox( width: 10.w, diff --git a/lib/pages/section/section_page.dart b/lib/pages/section/section_page.dart index 282dfd4..b1a5190 100644 --- a/lib/pages/section/section_page.dart +++ b/lib/pages/section/section_page.dart @@ -111,9 +111,10 @@ class _SectionPageView extends StatelessWidget { await clickController.playMusicAndPerformAction( context, AudioPlayerUtilType.readingTime, () async { await bloc.requestEnterClass(courseLessonId, () { - pushNamed(AppRouteName.reading, - arguments: {'courseLessonId': courseLessonId}) - .then((value) { + pushNamed(AppRouteName.reading, arguments: { + 'courseLessonId': courseLessonId, + 'moduleColor': ModuleCache.instance.getCurrentThemeColor() + }).then((value) { if (value != null) { Map dataMap = value as Map; diff --git a/lib/route/route.dart b/lib/route/route.dart index 7cbc566..277184f 100644 --- a/lib/route/route.dart +++ b/lib/route/route.dart @@ -247,12 +247,14 @@ class AppRouter { transitionsBuilder: (_, __, ___, child) => child); case AppRouteName.reading: var courseLessonId = ''; + Color? moduleColor; if (settings.arguments != null) { courseLessonId = (settings.arguments as Map)['courseLessonId'] as String; + moduleColor = (settings.arguments as Map)['moduleColor'] as Color?; } return CupertinoPageRoute( - builder: (_) => ReadingPage(courseLessonId: courseLessonId)); + builder: (_) => ReadingPage(courseLessonId: courseLessonId, moduleColor: moduleColor)); default: return CupertinoPageRoute( builder: (_) => Scaffold( -- libgit2 0.22.2