From d9adbe845b0cce00f0abb30d62de5610b5be72c3 Mon Sep 17 00:00:00 2001 From: "1147192855@qq.com" <1147192855@qq.com> Date: Tue, 16 Apr 2024 12:05:27 +0800 Subject: [PATCH] no message --- .../pages/homework_correction/job_home.dart | 307 ++++++++---------- marking_app/lib/pages/mainPage.dart | 3 +- 2 files changed, 133 insertions(+), 177 deletions(-) diff --git a/marking_app/lib/pages/homework_correction/job_home.dart b/marking_app/lib/pages/homework_correction/job_home.dart index 4ee44a9..bab1477 100644 --- a/marking_app/lib/pages/homework_correction/job_home.dart +++ b/marking_app/lib/pages/homework_correction/job_home.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:functional_widget_annotation/functional_widget_annotation.dart'; import 'package:marking_app/common/mixin/common.dart'; @@ -27,15 +28,10 @@ class _JobHomeState extends State with CommonMixin, EventBusMixin, Auto @override bool get wantKeepAlive => true; - late Future _future; - @override void initState() { - _future = getData(); - eventOn(callback: (JobHomeRefreshBus item) { - _future = getData(); - toUpState(setState, () {}, mounted); - }); + getData(); + eventOn(callback: (JobHomeRefreshBus item) => getData()); super.initState(); } @@ -54,7 +50,9 @@ class _JobHomeState extends State with CommonMixin, EventBusMixin, Auto limit: 1, pageType: 0, )); - return _result.data?.total ?? 0; + var data = _result.data?.total ?? 0; + eventFire(model: QuantityToBeReviewedData(data)); + return data; } catch (e) { return 0; } @@ -73,137 +71,42 @@ class _JobHomeState extends State with CommonMixin, EventBusMixin, Auto statusBarIconBrightness: Brightness.dark, statusBarBrightness: Brightness.light, ), - child: Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - centerTitle: true, // 标题居中 - title: quickText('我的作业管理'), - systemOverlayStyle: SystemUiOverlayStyle.dark, - elevation: 0, - ), - backgroundColor: Color.fromRGBO(244, 244, 244, 1), - body: RefreshIndicator( - onRefresh: () async { - _future = getData(); - toUpState(setState, () {}, mounted); - }, - child: MyFutureBuilder.buildFutureBuilderOfSingleInstance(context, _future, (data) { - if (data == null) - return Center( - child: Container( - child: TextButton( - onPressed: () { - _future = getData(); - toUpState(setState, () {}, mounted); - }, - child: quickText('没有获取到数据,点击重试'), - ), + child: RefreshIndicator( + onRefresh: () async => eventFire(model: JobHomeRefreshBus()), + child: ListView( + children: [ + Container( + height: 200.h, + width: double.infinity, + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage('assets/images/job_home_top_bgm.png'), + fit: BoxFit.fill, // 完全填充 ), - ); - - return Container( - child: Column( - children: [ - Container( - height: 200.h, - width: double.infinity, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/job_home_top_bgm.png'), - fit: BoxFit.fill, // 完全填充 - ), - ), - ), - SizedBox(height: 30.h), - $TermRow([ - EntranceModel( - title: '作业批阅', - image: 'assets/images/job_home_marking.png', - navigationUrl: '', - ), - EntranceModel( - title: '学生历史作业', - image: 'assets/images/job_home_history.png', - navigationUrl: '${RouterManager.jobStudentGroupPath}?page=history'), - EntranceModel(title: '知识点点掌握', image: 'assets/images/job_home_knowledge.png', navigationUrl: '') - ], data), - spaceWidth, - $TermRow([ - EntranceModel(title: '答题轨迹', image: 'assets/images/job_home_answer_record.png', navigationUrl: ''), - EntranceModel( - title: '优先批阅设定', image: 'assets/images/job_home_youxian.png', navigationUrl: '${RouterManager.jobStudentGroupPath}?page=set') - ], data), - spaceWidth, - $TermRow([EntranceModel(title: '批阅设置', image: 'assets/images/job_home_marking_set.png', navigationUrl: '')], data), - // Row( - // children: [ - // Expanded(child: Container( - // child: , - // )), - // Expanded(child: Container()), - // ], - // ), - // Expanded( - // child: - // GridView( - // padding: EdgeInsets.symmetric(vertical: 30.h, horizontal: 20.w), - // gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - // crossAxisCount: 2, - // mainAxisSpacing: 24.r, - // crossAxisSpacing: 24.r, - // childAspectRatio: 556 / 200, - // ), - // children: entrances.map((e) { - // bool isJob = e.title == '作业批阅'; - - // return InkWell( - // onTap: () => easyThrottle('GO_TO_JOB_HOME_NAVIGATION', () { - // if (e.page != '') { - // RouterManager.router.navigateTo(context, '${e.navigationUrl}?page=${e.page}', transition: getTransition()); - // } else { - // RouterManager.router.navigateTo(context, e.navigationUrl, transition: getTransition()); - // } - // }), - // child: badges.Badge( - // showBadge: isJob && data > 0, - // ignorePointer: false, - // badgeContent: quickText(data, color: Colors.white), - // badgeAnimation: badges.BadgeAnimation.rotation( - // animationDuration: Duration(seconds: 1), - // colorChangeAnimationDuration: Duration(seconds: 1), - // loopAnimation: false, - // curve: Curves.fastOutSlowIn, - // colorChangeAnimationCurve: Curves.easeInCubic, - // ), - // child: Container( - // decoration: BoxDecoration( - // borderRadius: BorderRadius.all(Radius.circular(6.r)), - // border: Border.all( - // width: 0.5.w, - // color: Color.fromARGB(255, 219, 226, 250), - // ), - // ), - // alignment: Alignment.center, - // child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // children: [ - // // Image(image: e.image), - // Icon( - // const IconData(0xe642, fontFamily: "AlibabaIcon"), - // size: 12.sp, - // ), - // quickText(e.title, size: 12.sp), - // ], - // ), - // ), - // )); - // }).toList(), - // ), - // ), - ], ), - ); - }), + ), + SizedBox(height: 30.h), + SlidingData([ + EntranceModel(title: '作业批阅', image: 'assets/images/job_home_marking.png', navigationUrl: ''), + EntranceModel( + title: '学生历史作业', + image: 'assets/images/job_home_history.png', + navigationUrl: '${RouterManager.jobStudentGroupPath}?page=history', + ), + EntranceModel(title: '知识点点掌握', image: 'assets/images/job_home_knowledge.png', navigationUrl: '') + ]), + spaceWidth, + $TermRow([ + EntranceModel(title: '答题轨迹', image: 'assets/images/job_home_answer_record.png', navigationUrl: ''), + EntranceModel( + title: '优先批阅设定', + image: 'assets/images/job_home_youxian.png', + navigationUrl: '${RouterManager.jobStudentGroupPath}?page=set', + ) + ], 0), + spaceWidth, + $TermRow([EntranceModel(title: '批阅设置', image: 'assets/images/job_home_marking_set.png', navigationUrl: '')], 0), + ], ), ), ); @@ -217,6 +120,11 @@ class EntranceModel extends Object { EntranceModel({required this.title, required this.image, required this.navigationUrl}); } +class QuantityToBeReviewedData extends Object { + int num; + QuantityToBeReviewedData(this.num); +} + @swidget Widget $termRow(BuildContext context, List items, int data) { var leng = items.length; @@ -263,45 +171,92 @@ Widget $termRow(BuildContext context, List items, int data) { @swidget Widget $termItem(BuildContext context, EntranceModel e, int data, {double? theHeight}) { bool isJob = e.title == '作业批阅'; - return InkWell( - onTap: () => easyThrottle('GO_TO_JOB_HOME_NAVIGATION', () { - RouterManager.router.navigateTo(context, e.navigationUrl, transition: getTransition()); - }), - child: badges.Badge( - showBadge: isJob && data > 0, - ignorePointer: false, - badgeContent: quickText(data, color: Colors.white), - badgeAnimation: badges.BadgeAnimation.rotation( - animationDuration: Duration(seconds: 1), - colorChangeAnimationDuration: Duration(seconds: 1), - loopAnimation: false, - curve: Curves.fastOutSlowIn, - colorChangeAnimationCurve: Curves.easeInCubic, - ), - child: Container( - height: theHeight, - padding: EdgeInsets.symmetric(vertical: 18.h), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.all(Radius.circular(6.r)), - boxShadow: [ - BoxShadow( - color: const Color.fromRGBO(231, 231, 231, 1), - offset: Offset(4.w, 6.h), //阴影y轴偏移量 - blurRadius: 8, //阴影模糊程度 - spreadRadius: 0.2, //阴影扩散程度 - ) - ], - // border: Border.all(width: 0.5.w, color: Color.fromARGB(255, 219, 226, 250)), + + return Material( + color: Colors.white, + elevation: 3.r, + shadowColor: const Color.fromRGBO(231, 231, 231, 1), + borderRadius: BorderRadius.all(Radius.circular(8.r)), + child: InkWell( + onTap: () => easyThrottle('GO_TO_JOB_HOME_NAVIGATION', () { + RouterManager.router.navigateTo(context, e.navigationUrl, transition: getTransition()); + }), + + // splashColor: splashColor, + borderRadius: BorderRadius.all(Radius.circular(8.r)), + child: badges.Badge( + showBadge: isJob && data > 0, + ignorePointer: false, + badgeContent: quickText(data, color: Colors.white, size: 10.sp), + badgeAnimation: badges.BadgeAnimation.rotation( + animationDuration: Duration(seconds: 1), + colorChangeAnimationDuration: Duration(seconds: 1), + loopAnimation: false, + curve: Curves.fastOutSlowIn, + colorChangeAnimationCurve: Curves.easeInCubic, ), - alignment: Alignment.center, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset(e.image, height: 32.w, width: 32.w, fit: BoxFit.cover), - quickText(e.title, size: 12.sp, color: Color.fromRGBO(79, 79, 79, 1), fontWeight: FontWeight.w500), - ], + badgeStyle: badges.BadgeStyle( + badgeColor: Color.fromRGBO(255, 105, 105, 1), + shape: badges.BadgeShape.square, + borderRadius: BorderRadius.only(topLeft: Radius.circular(10.r), topRight: Radius.circular(8.5.r), bottomRight: Radius.circular(8.5.r)), + // borderSide: BorderSide(color: Colors.white, width: 2), + elevation: 1, + padding: EdgeInsets.symmetric(horizontal: isPad() ? 11.w : 16.w, vertical: 2.h), ), - ), - )); + position: badges.BadgePosition.topEnd(top: 10.r, end: 10.r), + child: Container( + height: theHeight, + padding: EdgeInsets.symmetric(vertical: 12.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(8.r)), + // boxShadow: [ + // BoxShadow( + // color: const Color.fromRGBO(231, 231, 231, 1), + // offset: Offset(4.w, 6.h), //阴影y轴偏移量 + // blurRadius: 8, //阴影模糊程度 + // spreadRadius: 0.2, //阴影扩散程度 + // ) + // ], + // border: Border.all(width: 0.5.w, color: Color.fromARGB(255, 219, 226, 250)), + ), + alignment: Alignment.center, + child: isJob + ? Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset(e.image, height: 32.r, width: 32.r, fit: BoxFit.cover), + SizedBox(height: 6.r), + quickText(e.title, size: 12.sp, color: Color.fromRGBO(79, 79, 79, 1), fontWeight: FontWeight.w500), + ], + ) + : Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset(e.image, height: 32.r, width: 32.r, fit: BoxFit.cover), + SizedBox(width: 6.r), + quickText(e.title, size: 12.sp, color: Color.fromRGBO(79, 79, 79, 1), fontWeight: FontWeight.w500), + ], + ), + ), + )), + ); +} + +class SlidingData extends HookWidget with EventBusMixin { + final List items; + SlidingData(this.items); + + @override + Widget build(BuildContext context) { + var dataNumber = useState(null); + + useEffect(() { + eventOn(callback: (QuantityToBeReviewedData data) => (dataNumber.value = data)); + return () { + eventCancel(); + }; + }, []); + + return $TermRow(items, dataNumber.value?.num ?? 0); + } } diff --git a/marking_app/lib/pages/mainPage.dart b/marking_app/lib/pages/mainPage.dart index acad5d6..5b7521b 100644 --- a/marking_app/lib/pages/mainPage.dart +++ b/marking_app/lib/pages/mainPage.dart @@ -155,7 +155,8 @@ class TheMainPageState extends ConsumerState with CommonMixin { child: Scaffold( body: PageView( controller: _pageController, - physics: const BouncingScrollPhysics(), + // physics: const BouncingScrollPhysics(), + physics: NeverScrollableScrollPhysics(), onPageChanged: (index) => toUpState(setState, () => tabIndex = index, mounted), children: _bodyList, ),