no message

This commit is contained in:
1147192855@qq.com 2024-04-16 12:05:27 +08:00
parent 4c78d903a1
commit d9adbe845b
2 changed files with 133 additions and 177 deletions

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:functional_widget_annotation/functional_widget_annotation.dart'; import 'package:functional_widget_annotation/functional_widget_annotation.dart';
import 'package:marking_app/common/mixin/common.dart'; import 'package:marking_app/common/mixin/common.dart';
@ -27,15 +28,10 @@ class _JobHomeState extends State<JobHome> with CommonMixin, EventBusMixin, Auto
@override @override
bool get wantKeepAlive => true; bool get wantKeepAlive => true;
late Future<int> _future;
@override @override
void initState() { void initState() {
_future = getData(); getData();
eventOn(callback: (JobHomeRefreshBus item) { eventOn(callback: (JobHomeRefreshBus item) => getData());
_future = getData();
toUpState(setState, () {}, mounted);
});
super.initState(); super.initState();
} }
@ -54,7 +50,9 @@ class _JobHomeState extends State<JobHome> with CommonMixin, EventBusMixin, Auto
limit: 1, limit: 1,
pageType: 0, pageType: 0,
)); ));
return _result.data?.total ?? 0; var data = _result.data?.total ?? 0;
eventFire(model: QuantityToBeReviewedData(data));
return data;
} catch (e) { } catch (e) {
return 0; return 0;
} }
@ -73,36 +71,9 @@ class _JobHomeState extends State<JobHome> with CommonMixin, EventBusMixin, Auto
statusBarIconBrightness: Brightness.dark, statusBarIconBrightness: Brightness.dark,
statusBarBrightness: Brightness.light, statusBarBrightness: Brightness.light,
), ),
child: Scaffold( child: RefreshIndicator(
appBar: AppBar( onRefresh: () async => eventFire(model: JobHomeRefreshBus()),
backgroundColor: Colors.white, child: ListView(
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<int>(context, _future, (data) {
if (data == null)
return Center(
child: Container(
child: TextButton(
onPressed: () {
_future = getData();
toUpState(setState, () {}, mounted);
},
child: quickText('没有获取到数据,点击重试'),
),
),
);
return Container(
child: Column(
children: [ children: [
Container( Container(
height: 200.h, height: 200.h,
@ -115,96 +86,28 @@ class _JobHomeState extends State<JobHome> with CommonMixin, EventBusMixin, Auto
), ),
), ),
SizedBox(height: 30.h), SizedBox(height: 30.h),
$TermRow([ SlidingData([
EntranceModel( EntranceModel(title: '作业批阅', image: 'assets/images/job_home_marking.png', navigationUrl: ''),
title: '作业批阅',
image: 'assets/images/job_home_marking.png',
navigationUrl: '',
),
EntranceModel( EntranceModel(
title: '学生历史作业', title: '学生历史作业',
image: 'assets/images/job_home_history.png', image: 'assets/images/job_home_history.png',
navigationUrl: '${RouterManager.jobStudentGroupPath}?page=history'), navigationUrl: '${RouterManager.jobStudentGroupPath}?page=history',
),
EntranceModel(title: '知识点点掌握', image: 'assets/images/job_home_knowledge.png', navigationUrl: '') EntranceModel(title: '知识点点掌握', image: 'assets/images/job_home_knowledge.png', navigationUrl: '')
], data), ]),
spaceWidth, spaceWidth,
$TermRow([ $TermRow([
EntranceModel(title: '答题轨迹', image: 'assets/images/job_home_answer_record.png', navigationUrl: ''), EntranceModel(title: '答题轨迹', image: 'assets/images/job_home_answer_record.png', navigationUrl: ''),
EntranceModel( EntranceModel(
title: '优先批阅设定', image: 'assets/images/job_home_youxian.png', navigationUrl: '${RouterManager.jobStudentGroupPath}?page=set') title: '优先批阅设定',
], data), image: 'assets/images/job_home_youxian.png',
navigationUrl: '${RouterManager.jobStudentGroupPath}?page=set',
)
], 0),
spaceWidth, spaceWidth,
$TermRow([EntranceModel(title: '批阅设置', image: 'assets/images/job_home_marking_set.png', navigationUrl: '')], data), $TermRow([EntranceModel(title: '批阅设置', image: 'assets/images/job_home_marking_set.png', navigationUrl: '')], 0),
// 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(),
// ),
// ),
], ],
), ),
);
}),
),
), ),
); );
} }
@ -217,6 +120,11 @@ class EntranceModel extends Object {
EntranceModel({required this.title, required this.image, required this.navigationUrl}); EntranceModel({required this.title, required this.image, required this.navigationUrl});
} }
class QuantityToBeReviewedData extends Object {
int num;
QuantityToBeReviewedData(this.num);
}
@swidget @swidget
Widget $termRow(BuildContext context, List<EntranceModel> items, int data) { Widget $termRow(BuildContext context, List<EntranceModel> items, int data) {
var leng = items.length; var leng = items.length;
@ -263,14 +171,23 @@ Widget $termRow(BuildContext context, List<EntranceModel> items, int data) {
@swidget @swidget
Widget $termItem(BuildContext context, EntranceModel e, int data, {double? theHeight}) { Widget $termItem(BuildContext context, EntranceModel e, int data, {double? theHeight}) {
bool isJob = e.title == '作业批阅'; bool isJob = e.title == '作业批阅';
return InkWell(
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', () { onTap: () => easyThrottle('GO_TO_JOB_HOME_NAVIGATION', () {
RouterManager.router.navigateTo(context, e.navigationUrl, transition: getTransition()); RouterManager.router.navigateTo(context, e.navigationUrl, transition: getTransition());
}), }),
// splashColor: splashColor,
borderRadius: BorderRadius.all(Radius.circular(8.r)),
child: badges.Badge( child: badges.Badge(
showBadge: isJob && data > 0, showBadge: isJob && data > 0,
ignorePointer: false, ignorePointer: false,
badgeContent: quickText(data, color: Colors.white), badgeContent: quickText(data, color: Colors.white, size: 10.sp),
badgeAnimation: badges.BadgeAnimation.rotation( badgeAnimation: badges.BadgeAnimation.rotation(
animationDuration: Duration(seconds: 1), animationDuration: Duration(seconds: 1),
colorChangeAnimationDuration: Duration(seconds: 1), colorChangeAnimationDuration: Duration(seconds: 1),
@ -278,30 +195,68 @@ Widget $termItem(BuildContext context, EntranceModel e, int data, {double? theHe
curve: Curves.fastOutSlowIn, curve: Curves.fastOutSlowIn,
colorChangeAnimationCurve: Curves.easeInCubic, colorChangeAnimationCurve: Curves.easeInCubic,
), ),
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( child: Container(
height: theHeight, height: theHeight,
padding: EdgeInsets.symmetric(vertical: 18.h), padding: EdgeInsets.symmetric(vertical: 12.h),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(8.r)),
borderRadius: BorderRadius.all(Radius.circular(6.r)), // boxShadow: [
boxShadow: [ // BoxShadow(
BoxShadow( // color: const Color.fromRGBO(231, 231, 231, 1),
color: const Color.fromRGBO(231, 231, 231, 1), // offset: Offset(4.w, 6.h), //y轴偏移量
offset: Offset(4.w, 6.h), //y轴偏移量 // blurRadius: 8, //
blurRadius: 8, // // spreadRadius: 0.2, //
spreadRadius: 0.2, // // )
) // ],
],
// border: Border.all(width: 0.5.w, color: Color.fromARGB(255, 219, 226, 250)), // border: Border.all(width: 0.5.w, color: Color.fromARGB(255, 219, 226, 250)),
), ),
alignment: Alignment.center, alignment: Alignment.center,
child: Row( child: isJob
? Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Image.asset(e.image, height: 32.w, width: 32.w, fit: BoxFit.cover), 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), quickText(e.title, size: 12.sp, color: Color.fromRGBO(79, 79, 79, 1), fontWeight: FontWeight.w500),
], ],
), ),
), ),
)); )),
);
}
class SlidingData extends HookWidget with EventBusMixin {
final List<EntranceModel> items;
SlidingData(this.items);
@override
Widget build(BuildContext context) {
var dataNumber = useState<QuantityToBeReviewedData?>(null);
useEffect(() {
eventOn(callback: (QuantityToBeReviewedData data) => (dataNumber.value = data));
return () {
eventCancel();
};
}, []);
return $TermRow(items, dataNumber.value?.num ?? 0);
}
} }

View File

@ -155,7 +155,8 @@ class TheMainPageState extends ConsumerState<TheMainPage> with CommonMixin {
child: Scaffold( child: Scaffold(
body: PageView( body: PageView(
controller: _pageController, controller: _pageController,
physics: const BouncingScrollPhysics(), // physics: const BouncingScrollPhysics(),
physics: NeverScrollableScrollPhysics(),
onPageChanged: (index) => toUpState(setState, () => tabIndex = index, mounted), onPageChanged: (index) => toUpState(setState, () => tabIndex = index, mounted),
children: _bodyList, children: _bodyList,
), ),