From 644f8f78cdc44782f2ea9cf8594e8471b4fd95e5 Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Wed, 3 Apr 2024 09:38:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/default_user_dead.png | Bin 0 -> 5734 bytes assets/images/ic_home_normal.png | Bin 0 -> 529 bytes assets/images/ic_home_press.png | Bin 0 -> 792 bytes assets/images/ic_work_normal.png | Bin 0 -> 481 bytes assets/images/ic_work_press.png | Bin 0 -> 1107 bytes assets/images/personal_bgi.png | Bin 0 -> 26222 bytes .../global_widget/bottom_navigation_bar.dart | 82 +++++ lib/page/global_widget/global_scaffold.dart | 36 ++ lib/page/home_page/children/my_info.dart | 327 ++++++++++++++++++ lib/page/home_page/home_logic.dart | 8 + lib/page/home_page/home_state.dart | 5 + lib/page/home_page/home_view.dart | 17 +- lib/page/home_page/widget/top_user_info.dart | 72 ++++ lib/page/work_page/work_binding.dart | 10 + lib/page/work_page/work_logic.dart | 7 + lib/page/work_page/work_state.dart | 5 + lib/page/work_page/work_view.dart | 39 +++ lib/routes/app_pages.dart | 5 + lib/routes/app_routes.dart | 2 + pubspec.lock | 220 ++++++------ 20 files changed, 714 insertions(+), 121 deletions(-) create mode 100644 assets/images/default_user_dead.png create mode 100644 assets/images/ic_home_normal.png create mode 100644 assets/images/ic_home_press.png create mode 100644 assets/images/ic_work_normal.png create mode 100644 assets/images/ic_work_press.png create mode 100644 assets/images/personal_bgi.png create mode 100644 lib/page/global_widget/bottom_navigation_bar.dart create mode 100644 lib/page/global_widget/global_scaffold.dart create mode 100644 lib/page/home_page/children/my_info.dart create mode 100644 lib/page/home_page/widget/top_user_info.dart create mode 100644 lib/page/work_page/work_binding.dart create mode 100644 lib/page/work_page/work_logic.dart create mode 100644 lib/page/work_page/work_state.dart create mode 100644 lib/page/work_page/work_view.dart diff --git a/assets/images/default_user_dead.png b/assets/images/default_user_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..2c68da12881c577336c138e684122b3690b33753 GIT binary patch literal 5734 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 Y|EUhp==1_zQvd(}07*qoM6N<$f+E@B82|tP literal 0 HcmV?d00001 diff --git a/assets/images/ic_home_normal.png b/assets/images/ic_home_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..30eefd219b6e9da0555e0abb1336d24808fd32dc GIT binary patch literal 529 zcmV+s0`C2ZP)kV9id0$(s)&wWr`-y;T>i0EC=|iwbU`9<9fcR!NIiLjSSdm(ZGr(!A4D!< z?YYOSUfnh5i^or&IK`xKo&d?~0h_e0JfAhHd-?SRj*oV|``U?d9qm3PZH(fA2!|qd@{-_ T6(Wi200000NkvXXu0mjfK1trF literal 0 HcmV?d00001 diff --git a/assets/images/ic_home_press.png b/assets/images/ic_home_press.png new file mode 100644 index 0000000000000000000000000000000000000000..efff317c8edc00b22de3f5d334eecf2dc5727dac GIT binary patch literal 792 zcmV+z1LypSP)6|)VqQ(|&3$~wa}$N!q%AE9E}n4s_#XLv|L@N^7x-7f%oil5@Haz%lb+&Y z-r^v#l1cn&2xQvwm@`|y;zHa+SiUnb)99NQ_0BzZ;+KlZgW4+9%JL=Yh%i{?w zbX(fK@T6DAe4i19MkAuq4aatSWe}!r}+--t6;AV`3S!FPMl*GOYfdM>NK0 z!o$g9+&okiXs)cVQS`AXV@?!5%{n(7J#uDy^kBuI7>W5vM1Ay|3Z`6AwG_VpkSrN!IO_>PlT~aT$)(9eV`jXai_q>C%ifc_{F% zOIRuDFmLBuEoCT|y?Yoh9t8dv?*V#c)pA=!9$eIG5@J!3HA0`OA<<9J#U@|W zvaCsua0e$0mdbc7jWTob6sCiD&o*dYg1ck^{B z4&Z4S(#=VlwQ~hBjt}p~uwmXN*6+)H(4}Im*7TYM%1U*C_w4gfq!#q#Sjrf3ts!rx z=c+J92$~`vD)`9*ST``2eN1ad1Gl7WNKMnk7^pg&p|dB()#9>zLejx!q}$*B5sIG~ WdVwL}ww*Bm0000JM{*7gSs{0LI6! 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 literal 0 HcmV?d00001 diff --git a/lib/page/global_widget/bottom_navigation_bar.dart b/lib/page/global_widget/bottom_navigation_bar.dart new file mode 100644 index 0000000..3d4d075 --- /dev/null +++ b/lib/page/global_widget/bottom_navigation_bar.dart @@ -0,0 +1,82 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/store/user_store.dart'; +import 'package:school_asignment_app/routes/app_pages.dart'; + +const _items = [ + { + 'id': 1, + 'title': '首页', + 'img': 'assets/images/ic_home_normal.png', + 'activeImg': 'assets/images/ic_home_press.png', + 'route': Routes.home, + 'isBigger': false, + }, + { + 'id': 2, + 'title': '作业', + 'img': 'assets/images/ic_work_normal.png', + 'activeImg': 'assets/images/ic_work_press.png', + 'route': Routes.work, + }, +]; + +/// 底部导航栏 +class MyBottomNavigationBar extends StatelessWidget { + final UserStore userStore = UserStore.to; + final int active; + + MyBottomNavigationBar({Key? key, this.active = 1}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + height: 50.r, + margin: EdgeInsets.only(bottom: Get.mediaQuery.padding.bottom), + decoration: BoxDecoration( + color:Colors.white, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: _items + .map((e) => InkWell( + onTap: () async { + if (active == e['id']) { + return; + } + Get.offAllNamed(e['route'] as String); + }, + child: Container( + width: 60.r, + color: Colors.transparent, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + e['img'] == null + ? SizedBox( + width: 22.r, + height: 21.r, + ) + : Image.asset( + active == (e['id'] as int) ? e['activeImg'] as String : e['img'] as String, + width: 22.r, + height: 22.r, + fit: BoxFit.fill, + ), + Text( + e['title'] as String, + style: TextStyle( + color: active == (e['id'] as int) ? const Color(0xFF6888FD) : const Color(0xFF767676), + fontSize: 11.sp,), + strutStyle: StrutStyle(fontSize: 16.sp), + ) + ], + ), + ), + )) + .toList(), + ), + ); + } +} diff --git a/lib/page/global_widget/global_scaffold.dart b/lib/page/global_widget/global_scaffold.dart new file mode 100644 index 0000000..fe76e82 --- /dev/null +++ b/lib/page/global_widget/global_scaffold.dart @@ -0,0 +1,36 @@ + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/utils/toast_utils.dart'; +import 'package:school_asignment_app/page/global_widget/bottom_navigation_bar.dart'; + +class GlobalScaffold extends StatelessWidget { + final AppBar? appBar; + final Widget body; + final int active; + DateTime? lastPopTime; + + GlobalScaffold({Key? key, required this.body, this.appBar, required this.active}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: appBar, + backgroundColor: const Color.fromRGBO(245, 245, 245, 1), + body: WillPopScope( + onWillPop: () { + // 点击返回键的操作 + if (lastPopTime == null || DateTime.now().difference(lastPopTime!) > const Duration(seconds: 2)) { + lastPopTime = DateTime.now(); + ToastUtils.showInfo('再按一次退出'); + return Future.value(false); + } else { + return Future.value(true); + } + }, + child: body), + bottomNavigationBar: MyBottomNavigationBar(active: active), + ); + } +} diff --git a/lib/page/home_page/children/my_info.dart b/lib/page/home_page/children/my_info.dart new file mode 100644 index 0000000..2760979 --- /dev/null +++ b/lib/page/home_page/children/my_info.dart @@ -0,0 +1,327 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/store/app_storage_key.dart'; +import 'package:school_asignment_app/common/utils/storage.dart'; +import 'package:school_asignment_app/page/global_widget/my_text.dart'; +import 'package:school_asignment_app/page/home_page/home_logic.dart'; +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:school_asignment_app/routes/app_pages.dart'; + +class MyInfo extends StatelessWidget { + MyInfo({Key? key}) : super(key: key); + final controller = Get.find; + final state = Get.find().state; + + // 确认对话框 + _showAlertDialog(context1) async { + await showDialog( + // 表示点击灰色背景的时候是否消失弹出框 + barrierDismissible: false, + context: context1, + builder: (context) { + return AlertDialog(title: quickText("提示信息"), content: quickText("您确定要退出登录吗?"), actions: [ + TextButton( + child: quickText("取消"), + onPressed: () { + Navigator.pop(context, 'Cancle'); + }, + ), + TextButton( + child: quickText("确定"), + onPressed: () { + /* ref.read(markingKeyboardProvider.notifier).clean(); + ref.read(markingSubtopicSwitchingProvider.notifier).clean(); + ref.read(userTokenProvider.notifier).clean(); + ref.read(userProvider.notifier).clean();*/ + StorageService.to.remove(AppStorageKey.STORAGE_USER_TOKEN); + StorageService.to.remove(AppStorageKey.STORAGE_USER_INFO); + Navigator.pop(context, "Ok"); + Get.offAllNamed(Routes.login); + }) + ]); + }); + } + + @override + Widget build(BuildContext context) { + final personalInfoTitleStly = TextStyle( + color: const Color.fromRGBO(80, 87, 103, 1), + fontSize: 16.sp, + ); + final personalInfoValStly = TextStyle( + color: const Color.fromRGBO(148, 163, 182, 1), + fontSize: 16.sp, + ); + + return AnnotatedRegion( + value: const SystemUiOverlayStyle( + statusBarColor: Colors.transparent, + systemNavigationBarIconBrightness: Brightness.light, + statusBarIconBrightness: Brightness.light, + statusBarBrightness: Brightness.dark, + ), + child: Stack( + children: [ + SizedBox( + height: double.infinity, + child: Column( + children: [ + Container( + height: 240.h, + width: double.infinity, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage('assets/images/personal_bgi.png'), + fit: BoxFit.cover, + ), + ), + ), + Expanded( + child: Container( + color: const Color.fromRGBO(248, 248, 248, 1), + )) + ], + ), + ), + SafeArea( + child: Scaffold( + backgroundColor: Colors.transparent, + body: Column( + children: [ + Stack( + alignment: const FractionalOffset(0.04, 0.1), + children: [ + Container( + height: 200.h, + alignment: Alignment.center, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(80.w), + child: Container( + width: 80.w, + height: 80.w, + padding: EdgeInsets.all(4.w), + decoration: BoxDecoration( + border: Border.all( + width: 1.w, + color: Colors.white, + ), + borderRadius: BorderRadius.all( + Radius.circular(40.w), + ), + boxShadow: [ + BoxShadow( + color: const Color.fromRGBO(46, 91, 255, 0.2), + offset: Offset(4.w, 6.h), //阴影y轴偏移量 + blurRadius: 8, //阴影模糊程度 + spreadRadius: 0.2, //阴影扩散程度 + ) + ], + ), + child: CachedNetworkImage( + fit: BoxFit.cover, + imageUrl:'', + placeholder: (context, url) => Image.asset('assets/images/default_user_dead.png'), + errorWidget: (context, url, error) => + Image.asset('assets/images/default_user_dead.png'), + ), + ), + ), + InkWell( + onTap: () { + /*if (tokenState == '' || userState.id == '') { + toLoginPage(context); + }*/ + }, + child: Container( + margin: EdgeInsets.only(top: 16.h), + child: Text( + state.userInfo.value!.givenname != '' ? state.userInfo.value!.givenname : '请前往登录', + style: TextStyle(fontSize: 16.sp, color: Colors.white), + ), + ), + ), + ], + ), + ), + InkWell( + onTap: () => Get.back(), + child: Icon(Icons.arrow_back_ios_new_rounded, color: Colors.white, size: 24.sp), + ), + ], + ), + SizedBox(height: 14.h), + Container( + margin: EdgeInsets.symmetric(vertical: 22.h, horizontal: 16.w), + padding: EdgeInsets.symmetric(vertical: 22.h, horizontal: 16.w), + height: 310.h, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(6.w)), + color: Colors.white, + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(46, 91, 255, 0.1), + offset: Offset.zero, //阴影y轴偏移量 + blurRadius: 20, //阴影模糊程度 + spreadRadius: 10, //阴影扩散程度 + ) + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('账号', style: personalInfoTitleStly), + Text(state.userInfo.value!.givenname, style: personalInfoValStly) + ], + ), + Container( + height: 1.w, + color: const Color.fromRGBO(240, 243, 255, 1), + ), + /* Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('所在学校', style: personalInfoTitleStly), + Text(userState.schoolName, style: personalInfoValStly) + ], + ), + Container( + height: 1.w, + color: const Color.fromRGBO(240, 243, 255, 1), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('担任职位', style: personalInfoTitleStly), + SizedBox(width: 20.w), + Expanded( + child: Text( + userState.positionNames.map((e) => e).toList().join(','), + maxLines: 2, + textAlign: TextAlign.right, + overflow: TextOverflow.ellipsis, + style: personalInfoValStly, + ), + ) + ], + ), + Container(height: 1.w, color: const Color.fromRGBO(240, 243, 255, 1)), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('所授科目', style: personalInfoTitleStly), + Expanded( + child: Text( + userState.subjectIds.map((e) => getSubjectEnumName(e)).toList().join(','), + maxLines: 2, + textAlign: TextAlign.right, + overflow: TextOverflow.ellipsis, + style: personalInfoValStly, + ), + ) + ], + ), + Container(height: 1.w, color: const Color.fromRGBO(240, 243, 255, 1)), + Padding( + padding: EdgeInsets.only(top: 10.h), + child: InkWell( + onTap: () { + RouterManager.router.navigateTo( + context, + RouterManager.ohterMainPagePath, + transition: TransitionType.custom, + transitionBuilder: (context, animation, secondaryAnimation, child) { + return SkewTransition( + turns: Tween( + begin: -0.06, + end: 0.0, + ).animate(animation), + child: child); + }, + ); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('其他', style: personalInfoTitleStly), + Icon( + Icons.arrow_forward_ios, + color: const Color.fromRGBO(80, 87, 103, 1), + size: 16.sp, + ) + ], + ), + ), + )*/ + ], + ), + ), + Expanded( + child: Column( + children: [ + const Expanded(child: SizedBox()), + Container( + margin: EdgeInsets.only(bottom: 40.h), + alignment: Alignment.bottomCenter, + child: InkWell( + child: Container( + padding: EdgeInsets.symmetric(vertical: 14.h), + margin: EdgeInsets.only(right: 16.w, left: 16.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(6.w), + ), + color: Colors.white, + boxShadow: [ + BoxShadow( + color: const Color.fromRGBO(46, 91, 255, 0.2), + offset: Offset(2.w, 2.h), //阴影y轴偏移量 + blurRadius: 14, //阴影模糊程度 + spreadRadius: 0.5, //阴影扩散程度 + ) + ], + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + Icons.exit_to_app_outlined, + size: 16.sp, + color: const Color.fromRGBO(148, 163, 182, 1), + ), + Container( + width: 6.w, + ), + Text( + '退出登录', + style: TextStyle(color: const Color.fromRGBO(148, 163, 182, 1), fontSize: 16.sp), + ), + ], + ), + ), + onTap: () { + _showAlertDialog(context); + }, + ), + ), + ], + ), + ), + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/page/home_page/home_logic.dart b/lib/page/home_page/home_logic.dart index 749bfab..ffbb6ff 100644 --- a/lib/page/home_page/home_logic.dart +++ b/lib/page/home_page/home_logic.dart @@ -1,7 +1,15 @@ import 'package:get/get.dart'; +import 'package:school_asignment_app/common/store/user_store.dart'; import 'home_state.dart'; class HomeLogic extends GetxController { final HomeState state = HomeState(); + + @override + void onInit(){ + super.onInit(); + state.userInfo = UserStore.to.userInfo; + print(state.userInfo.value.obs); + } } diff --git a/lib/page/home_page/home_state.dart b/lib/page/home_page/home_state.dart index 6953451..2ad292a 100644 --- a/lib/page/home_page/home_state.dart +++ b/lib/page/home_page/home_state.dart @@ -1,5 +1,10 @@ +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/job/user_info.dart'; + class HomeState { HomeState() { ///Initialize variables } + + late Rx userInfo; } diff --git a/lib/page/home_page/home_view.dart b/lib/page/home_page/home_view.dart index 25dedd1..e8df097 100644 --- a/lib/page/home_page/home_view.dart +++ b/lib/page/home_page/home_view.dart @@ -3,6 +3,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:school_asignment_app/common/store/app_storage_key.dart'; import 'package:school_asignment_app/common/utils/storage.dart'; +import 'package:school_asignment_app/page/global_widget/global_scaffold.dart'; +import 'package:school_asignment_app/page/home_page/widget/top_user_info.dart'; import 'package:school_asignment_app/routes/app_pages.dart'; import 'home_logic.dart'; @@ -20,18 +22,11 @@ class _HomePageState extends State { @override Widget build(BuildContext context) { - return Padding( - padding: EdgeInsets.only(top: 20.r), - child: Column( + return GlobalScaffold( + active: 1, + body: Column( children: [ - Text('home',style: TextStyle(fontSize: 20.sp,color: Colors.red),), - InkWell( - onTap: (){ - StorageService.to.remove(AppStorageKey.STORAGE_USER_TOKEN); - StorageService.to.remove(AppStorageKey.STORAGE_USER_INFO); - Get.offAllNamed(Routes.login); - }, - child: Text('退出',style: TextStyle(fontSize: 20.sp,color: Colors.black),)), + TopUserInfo(), ], ), ); diff --git a/lib/page/home_page/widget/top_user_info.dart b/lib/page/home_page/widget/top_user_info.dart new file mode 100644 index 0000000..9a34a61 --- /dev/null +++ b/lib/page/home_page/widget/top_user_info.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:school_asignment_app/page/home_page/home_logic.dart'; +import 'package:school_asignment_app/routes/app_pages.dart'; + +class TopUserInfo extends StatelessWidget { + TopUserInfo({Key? key}) : super(key: key); + final controller = Get.find; + final state = Get.find().state; + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + Get.toNamed(Routes.myInfo); + }, + child: Container( + color: Colors.white, + padding: EdgeInsets.only( + top: MediaQuery.of(context).padding.top + 4.h, + left: 14.w, + right: 14.w, + bottom: 19.h), + child: Row( + children: [ + Container( + decoration: BoxDecoration( + color: const Color.fromRGBO(245, 246, 251, 1), + borderRadius: BorderRadius.circular(30.r), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(50.w), + child: Container( + alignment: Alignment.center, + color: const Color.fromRGBO(163, 211, 255, 1), + padding: EdgeInsets.all(1.r), + child: Image.asset('assets/images/logo.png', + width: 32.w, height: 32.w), + ), + ), + Container( + margin: EdgeInsets.only(left: 10.h), + child: Text( + state.userInfo.value!.givenname, + style: TextStyle( + fontSize: 15.sp, + color: const Color.fromRGBO(45, 56, 76, 0.9)), + ), + ), + Container( + padding: EdgeInsets.symmetric(horizontal: 4.w), + child: Icon( + Icons.arrow_forward_ios_rounded, + size: 12.sp, + color: const Color.fromRGBO(45, 56, 76, 0.9), + ), + ), + SizedBox(width: 5.w) + ], + ), + ), + const Expanded(child: SizedBox()) + ], + ), + ), + ); + } +} diff --git a/lib/page/work_page/work_binding.dart b/lib/page/work_page/work_binding.dart new file mode 100644 index 0000000..fb0cfd8 --- /dev/null +++ b/lib/page/work_page/work_binding.dart @@ -0,0 +1,10 @@ +import 'package:get/get.dart'; + +import 'work_logic.dart'; + +class WorkBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => WorkLogic()); + } +} diff --git a/lib/page/work_page/work_logic.dart b/lib/page/work_page/work_logic.dart new file mode 100644 index 0000000..ee7a8d5 --- /dev/null +++ b/lib/page/work_page/work_logic.dart @@ -0,0 +1,7 @@ +import 'package:get/get.dart'; + +import 'work_state.dart'; + +class WorkLogic extends GetxController { + final WorkState state = WorkState(); +} diff --git a/lib/page/work_page/work_state.dart b/lib/page/work_page/work_state.dart new file mode 100644 index 0000000..a1046e9 --- /dev/null +++ b/lib/page/work_page/work_state.dart @@ -0,0 +1,5 @@ +class WorkState { + WorkState() { + ///Initialize variables + } +} diff --git a/lib/page/work_page/work_view.dart b/lib/page/work_page/work_view.dart new file mode 100644 index 0000000..ed1d0c0 --- /dev/null +++ b/lib/page/work_page/work_view.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:school_asignment_app/page/global_widget/global_scaffold.dart'; + +import 'work_logic.dart'; + +class WorkPage extends StatefulWidget { + const WorkPage({Key? key}) : super(key: key); + + @override + State createState() => _WorkPageState(); +} + +class _WorkPageState extends State { + final logic = Get.find(); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + return GlobalScaffold( + active: 2, + appBar: AppBar( + title: Text('作业'), + centerTitle: true, + ), + body: Column( + children: [ + Text('作业页面'), + ], + ), + ); + } + + @override + void dispose() { + Get.delete(); + super.dispose(); + } +} \ No newline at end of file diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index f39a1a3..ca21922 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -1,10 +1,13 @@ import 'package:get/get.dart'; import 'package:school_asignment_app/page/global_widget/start_page.dart'; +import 'package:school_asignment_app/page/home_page/children/my_info.dart'; import 'package:school_asignment_app/page/home_page/home_binding.dart'; import 'package:school_asignment_app/page/home_page/home_view.dart'; import 'package:school_asignment_app/page/login_page/children/agreement_page.dart'; import 'package:school_asignment_app/page/login_page/login_binding.dart'; import 'package:school_asignment_app/page/login_page/login_view.dart'; +import 'package:school_asignment_app/page/work_page/work_binding.dart'; +import 'package:school_asignment_app/page/work_page/work_view.dart'; part 'app_routes.dart'; abstract class AppPages { static final pages=[ @@ -12,5 +15,7 @@ static final pages=[ GetPage(name: Routes.agreementPage, page: () => const AgreementPage(), binding: LoginBinding(), transition: Transition.noTransition), GetPage(name: Routes.home, page: () => const HomePage(), binding: HomeBinding(), transition: Transition.noTransition), GetPage(name: Routes.startPage, page: () => const StartPage(), transition: Transition.noTransition), + GetPage(name: Routes.myInfo, page: () => MyInfo(), transition: Transition.noTransition), + GetPage(name: Routes.work, page: () => const WorkPage(), binding: WorkBinding(), transition: Transition.noTransition), ]; } \ No newline at end of file diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index bc6f86c..655aeef 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -5,4 +5,6 @@ abstract class Routes { static const agreementPage = '/agreementPage'; static const home = '/home'; static const startPage = '/startPage'; + static const myInfo = '/myInfo'; + static const work = '/work'; } \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 6cdc55a..2c96fb0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: _fe_analyzer_shared sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "64.0.0" analyzer: @@ -14,7 +14,7 @@ packages: description: name: analyzer sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.2.0" args: @@ -22,7 +22,7 @@ packages: description: name: args sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.2" async: @@ -30,7 +30,7 @@ packages: description: name: async sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.11.0" boolean_selector: @@ -38,7 +38,7 @@ packages: description: name: boolean_selector sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" build: @@ -46,7 +46,7 @@ packages: description: name: build sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.1" build_config: @@ -54,7 +54,7 @@ packages: description: name: build_config sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.1" build_daemon: @@ -62,7 +62,7 @@ packages: description: name: build_daemon sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.1" build_resolvers: @@ -70,7 +70,7 @@ packages: description: name: build_resolvers sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.2" build_runner: @@ -78,7 +78,7 @@ packages: description: name: build_runner sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.9" build_runner_core: @@ -86,7 +86,7 @@ packages: description: name: build_runner_core sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.3.0" built_collection: @@ -94,7 +94,7 @@ packages: description: name: built_collection sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: @@ -102,7 +102,7 @@ packages: description: name: built_value sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "8.9.1" cached_network_image: @@ -110,7 +110,7 @@ packages: description: name: cached_network_image sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.3.1" cached_network_image_platform_interface: @@ -118,7 +118,7 @@ packages: description: name: cached_network_image_platform_interface sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.0" cached_network_image_web: @@ -126,7 +126,7 @@ packages: description: name: cached_network_image_web sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.1" characters: @@ -134,7 +134,7 @@ packages: description: name: characters sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.0" checked_yaml: @@ -142,7 +142,7 @@ packages: description: name: checked_yaml sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.3" clock: @@ -150,7 +150,7 @@ packages: description: name: clock sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: @@ -158,7 +158,7 @@ packages: description: name: code_builder sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.10.0" collection: @@ -166,7 +166,7 @@ packages: description: name: collection sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.17.1" connectivity_plus: @@ -174,7 +174,7 @@ packages: description: name: connectivity_plus sha256: b74247fad72c171381dbe700ca17da24deac637ab6d43c343b42867acb95c991 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.6" connectivity_plus_platform_interface: @@ -182,7 +182,7 @@ packages: description: name: connectivity_plus_platform_interface sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.4" convert: @@ -190,7 +190,7 @@ packages: description: name: convert sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.1" crypto: @@ -198,7 +198,7 @@ packages: description: name: crypto sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.3" csslib: @@ -206,7 +206,7 @@ packages: description: name: csslib sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.0" cupertino_icons: @@ -214,7 +214,7 @@ packages: description: name: cupertino_icons sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.6" dart_style: @@ -222,7 +222,7 @@ packages: description: name: dart_style sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.6" dbus: @@ -230,7 +230,7 @@ packages: description: name: dbus sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.7.10" dio: @@ -238,7 +238,7 @@ packages: description: name: dio sha256: "0978e9a3e45305a80a7210dbeaf79d6ee8bee33f70c8e542dc654c952070217f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.4.2+1" fake_async: @@ -246,7 +246,7 @@ packages: description: name: fake_async sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: @@ -254,7 +254,7 @@ packages: description: name: ffi sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" file: @@ -262,7 +262,7 @@ packages: description: name: file sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.0.0" fixnum: @@ -270,7 +270,7 @@ packages: description: name: fixnum sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" flutter: @@ -283,7 +283,7 @@ packages: description: name: flutter_cache_manager sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.3.1" flutter_easyloading: @@ -291,7 +291,7 @@ packages: description: name: flutter_easyloading sha256: ba21a3c883544e582f9cc455a4a0907556714e1e9cf0eababfcb600da191d17c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.0.5" flutter_easyrefresh: @@ -299,7 +299,7 @@ packages: description: name: flutter_easyrefresh sha256: "5d161ee5dcac34da9065116568147d742dd25fb9bff3b10024d9054b195087ad" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.2" flutter_lints: @@ -307,7 +307,7 @@ packages: description: name: flutter_lints sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.3" flutter_screenutil: @@ -315,7 +315,7 @@ packages: description: name: flutter_screenutil sha256: "0a122936b450324cbdfd51be0819cc6fcebb093eb65585e9cd92263f7a1a8a39" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.7.0" flutter_spinkit: @@ -323,7 +323,7 @@ packages: description: name: flutter_spinkit sha256: d2696eed13732831414595b98863260e33e8882fc069ee80ec35d4ac9ddb0472 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.2.1" flutter_test: @@ -341,7 +341,7 @@ packages: description: name: flutter_widget_from_html_core sha256: "22140caa191cb4bba0fe4d5e4ad875c7e8a9ba47d61517f56d733019cf76396d" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.10.6" fluttertoast: @@ -349,7 +349,7 @@ packages: description: name: fluttertoast sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "8.2.4" frontend_server_client: @@ -357,7 +357,7 @@ packages: description: name: frontend_server_client sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.0" functional_widget_annotation: @@ -365,7 +365,7 @@ packages: description: name: functional_widget_annotation sha256: f0612079cb7e226b7be32b473bdaf85fe680370886c0c13ea69a102ccc17a0c7 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.10.0" get: @@ -373,7 +373,7 @@ packages: description: name: get sha256: "2ba20a47c8f1f233bed775ba2dd0d3ac97b4cf32fc17731b3dfc672b06b0e92a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.6.5" get_storage: @@ -381,7 +381,7 @@ packages: description: name: get_storage sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" glob: @@ -389,7 +389,7 @@ packages: description: name: glob sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.2" graphs: @@ -397,7 +397,7 @@ packages: description: name: graphs sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.1" html: @@ -405,7 +405,7 @@ packages: description: name: html sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.15.4" http: @@ -413,7 +413,7 @@ packages: description: name: http sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" http_multi_server: @@ -421,7 +421,7 @@ packages: description: name: http_multi_server sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: @@ -429,7 +429,7 @@ packages: description: name: http_parser sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.0.2" io: @@ -437,7 +437,7 @@ packages: description: name: io sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" js: @@ -445,7 +445,7 @@ packages: description: name: js sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.6.7" json_annotation: @@ -453,7 +453,7 @@ packages: description: name: json_annotation sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.8.1" json_serializable: @@ -461,7 +461,7 @@ packages: description: name: json_serializable sha256: aa1f5a8912615733e0fdc7a02af03308933c93235bdc8d50d0b0c8a8ccb0b969 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.7.1" lints: @@ -469,7 +469,7 @@ packages: description: name: lints sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" logger: @@ -477,7 +477,7 @@ packages: description: name: logger sha256: "7ad7215c15420a102ec687bb320a7312afd449bac63bfb1c60d9787c27b9767f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.0" logging: @@ -485,7 +485,7 @@ packages: description: name: logging sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.0" matcher: @@ -493,7 +493,7 @@ packages: description: name: matcher sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.12.15" material_color_utilities: @@ -501,7 +501,7 @@ packages: description: name: material_color_utilities sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.2.0" meta: @@ -509,7 +509,7 @@ packages: description: name: meta sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.9.1" mime: @@ -517,7 +517,7 @@ packages: description: name: mime sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" nm: @@ -525,7 +525,7 @@ packages: description: name: nm sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.5.0" octo_image: @@ -533,7 +533,7 @@ packages: description: name: octo_image sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.0" package_config: @@ -541,7 +541,7 @@ packages: description: name: package_config sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" package_info: @@ -549,7 +549,7 @@ packages: description: name: package_info sha256: "6c07d9d82c69e16afeeeeb6866fe43985a20b3b50df243091bfc4a4ad2b03b75" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.2" path: @@ -557,7 +557,7 @@ packages: description: name: path sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.8.3" path_provider: @@ -565,7 +565,7 @@ packages: description: name: path_provider sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.2" path_provider_android: @@ -573,7 +573,7 @@ packages: description: name: path_provider_android sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.2" path_provider_foundation: @@ -581,7 +581,7 @@ packages: description: name: path_provider_foundation sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.2" path_provider_linux: @@ -589,7 +589,7 @@ packages: description: name: path_provider_linux sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.1" path_provider_platform_interface: @@ -597,7 +597,7 @@ packages: description: name: path_provider_platform_interface sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.2" path_provider_windows: @@ -605,7 +605,7 @@ packages: description: name: path_provider_windows sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.2.1" petitparser: @@ -613,7 +613,7 @@ packages: description: name: petitparser sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.4.0" photo_view: @@ -621,7 +621,7 @@ packages: description: name: photo_view sha256: "8036802a00bae2a78fc197af8a158e3e2f7b500561ed23b4c458107685e645bb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.14.0" platform: @@ -629,7 +629,7 @@ packages: description: name: platform sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.4" plugin_platform_interface: @@ -637,7 +637,7 @@ packages: description: name: plugin_platform_interface sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.8" pool: @@ -645,7 +645,7 @@ packages: description: name: pool sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.5.1" pub_semver: @@ -653,7 +653,7 @@ packages: description: name: pub_semver sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.4" pubspec_parse: @@ -661,7 +661,7 @@ packages: description: name: pubspec_parse sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.3" retrofit: @@ -669,7 +669,7 @@ packages: description: name: retrofit sha256: "13a2865c0d97da580ea4e3c64d412d81f365fd5b26be2a18fca9582e021da37a" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.1.0" retrofit_generator: @@ -677,7 +677,7 @@ packages: description: name: retrofit_generator sha256: "9499eb46b3657a62192ddbc208ff7e6c6b768b19e83c1ee6f6b119c864b99690" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.0.8" rxdart: @@ -685,7 +685,7 @@ packages: description: name: rxdart sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.27.7" shelf: @@ -693,7 +693,7 @@ packages: description: name: shelf sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.4.1" shelf_web_socket: @@ -701,7 +701,7 @@ packages: description: name: shelf_web_socket sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" sky_engine: @@ -714,7 +714,7 @@ packages: description: name: source_gen sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.5.0" source_helper: @@ -722,7 +722,7 @@ packages: description: name: source_helper sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.4" source_span: @@ -730,7 +730,7 @@ packages: description: name: source_span sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.9.1" sprintf: @@ -738,7 +738,7 @@ packages: description: name: sprintf sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "7.0.0" sqflite: @@ -746,7 +746,7 @@ packages: description: name: sqflite sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.3.2" sqflite_common: @@ -754,7 +754,7 @@ packages: description: name: sqflite_common sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.5.3" stack_trace: @@ -762,7 +762,7 @@ packages: description: name: stack_trace sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.11.0" stream_channel: @@ -770,7 +770,7 @@ packages: description: name: stream_channel sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.1" stream_transform: @@ -778,7 +778,7 @@ packages: description: name: stream_transform sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.0" string_scanner: @@ -786,7 +786,7 @@ packages: description: name: string_scanner sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.0" synchronized: @@ -794,7 +794,7 @@ packages: description: name: synchronized sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.0+1" term_glyph: @@ -802,7 +802,7 @@ packages: description: name: term_glyph sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: @@ -810,7 +810,7 @@ packages: description: name: test_api sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "0.5.1" timing: @@ -818,7 +818,7 @@ packages: description: name: timing sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.1" tuple: @@ -826,7 +826,7 @@ packages: description: name: tuple sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.0.2" typed_data: @@ -834,7 +834,7 @@ packages: description: name: typed_data sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.3.2" uuid: @@ -842,7 +842,7 @@ packages: description: name: uuid sha256: "22c94e5ad1e75f9934b766b53c742572ee2677c56bc871d850a57dad0f82127f" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "4.2.2" vector_math: @@ -850,7 +850,7 @@ packages: description: name: vector_math sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.1.4" watcher: @@ -858,7 +858,7 @@ packages: description: name: watcher sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.1.0" web_socket_channel: @@ -866,7 +866,7 @@ packages: description: name: web_socket_channel sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "2.4.0" win32: @@ -874,7 +874,7 @@ packages: description: name: win32 sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "5.0.9" xdg_directories: @@ -882,7 +882,7 @@ packages: description: name: xdg_directories sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "1.0.4" xml: @@ -890,7 +890,7 @@ packages: description: name: xml sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "6.3.0" yaml: @@ -898,7 +898,7 @@ packages: description: name: yaml sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.flutter-io.cn" + url: "https://pub.dev" source: hosted version: "3.1.2" sdks: