Просмотр исходного кода

Demo入口与配置
网络请求测试
页面路由的监听Log 与 Provider的监听Log

liukai месяцев назад: 4
Родитель
Сommit
c751250794
39 измененных файлов с 631 добавлено и 159 удалено
  1. 1 4
      app/lib/main.dart
  2. 0 1
      app/lib/modules/splash/page/splash_page.dart
  3. 1 11
      app/lib/modules/splash/vm/splash_view_model.dart
  4. 1 1
      app/lib/modules/splash/vm/splash_view_model.g.dart
  5. 63 4
      packages/cpt_main/lib/modules/feedback/page/feedback_page.dart
  6. 62 10
      packages/cpt_main/lib/modules/home/page/home_page.dart
  7. 4 0
      packages/cpt_main/lib/modules/main/page/main_page.dart
  8. 7 0
      packages/cpt_main/lib/modules/me/page/me_page.dart
  9. 113 5
      packages/cpt_main/lib/modules/visitor/page/visitor_page.dart
  10. 19 0
      packages/cpt_main/lib/modules/visitor/vm/visitor_state.dart
  11. 34 0
      packages/cpt_main/lib/modules/visitor/vm/visitor_view_model.dart
  12. 26 0
      packages/cpt_main/lib/modules/visitor/vm/visitor_view_model.g.dart
  13. 6 2
      packages/cpt_profile/lib/modules/profile_edit/page/Profile_edit_page.dart
  14. 13 0
      packages/cpt_profile/lib/modules/profile_edit/vm/profile_edit_view_model.dart
  15. 27 0
      packages/cpt_profile/lib/modules/profile_edit/vm/profile_edit_view_model.g.dart
  16. 7 1
      packages/cs_domain/lib/constants/api_constants.dart
  17. 63 0
      packages/cs_domain/lib/repository/demo_repository.dart
  18. 27 0
      packages/cs_domain/lib/repository/demo_repository.g.dart
  19. 33 6
      packages/cs_domain/pubspec.yaml
  20. 23 21
      packages/cs_plugin_basic/lib/dio_interceptors/interceptor_auth_dio.dart
  21. 2 1
      packages/cs_plugin_basic/lib/modules/preview_photo_page.dart
  22. 4 4
      app/lib/obs/my_navigator_observer.dart
  23. 5 5
      app/lib/obs/riverpod_observer.dart
  24. 34 32
      packages/cs_plugin_basic/lib/provider/app_config/app_config_service.dart
  25. 1 1
      packages/cs_plugin_basic/lib/provider/app_config/app_config_service.g.dart
  26. 5 1
      packages/cs_plugin_basic/lib/provider/global_provider_container.dart
  27. 3 4
      packages/cs_plugin_basic/lib/provider/http_provider/http_provider.dart
  28. 8 8
      packages/cs_plugin_basic/lib/provider/http_provider/http_provider.g.dart
  29. 10 22
      packages/cs_plugin_basic/lib/provider/user_config/user_config.dart
  30. 9 2
      packages/cs_plugin_basic/lib/provider/user_config/user_config_service.dart
  31. 1 1
      packages/cs_plugin_basic/lib/provider/user_config/user_config_service.g.dart
  32. 2 1
      packages/cs_plugin_platform/lib/engine/network/network_engine.dart
  33. 1 1
      packages/cs_plugin_platform/lib/http/dio/interceptor_cache_controller.dart
  34. 3 3
      packages/cs_plugin_platform/lib/http/http_provider.dart
  35. 5 4
      packages/cs_widgets/lib/my_appbar.dart
  36. 1 1
      packages/cs_widgets/lib/my_load_image.dart
  37. 3 1
      packages/cs_widgets/lib/shatter/custom_check_box.dart
  38. 1 1
      packages/cs_widgets/lib/shatter/custom_radio_check.dart
  39. 3 0
      packages/cs_widgets/pubspec.yaml

+ 1 - 4
app/lib/main.dart

@@ -9,7 +9,7 @@ import 'package:cs_resources/local/theme/theme_config.dart';
 import 'package:plugin_basic/provider/global_provider_container.dart';
 import 'package:router/componentRouter/component_service_manager.dart';
 import 'package:cpt_profile/router/component/profile_service_provider.dart';
-
+import 'package:plugin_basic/obs/my_navigator_observer.dart';
 import 'package:widgets/dialog/custom_toast_widget.dart';
 import 'package:widgets/dialog/custom_error_widget.dart';
 import 'package:widgets/dialog/custom_failure_widget.dart';
@@ -17,9 +17,7 @@ import 'package:widgets/dialog/custom_success_widget.dart';
 import 'package:widgets/dialog/custom_loading_widget.dart';
 import 'package:widgets/widget_export.dart';
 
-import 'obs/my_navigator_observer.dart';
 import 'router/page/app_page_router.dart';
-import 'obs/riverpod_observer.dart';
 import 'router/component/app_service_provider.dart';
 
 void main() async {
@@ -36,7 +34,6 @@ void main() async {
 
   runApp(ProviderScope(
     parent: globalContainer,
-    observers: [RiverpodObserver()],
     child: MyApp(),
   ));
   // });

+ 0 - 1
app/lib/modules/splash/page/splash_page.dart

@@ -22,7 +22,6 @@ class SplashPage extends HookConsumerWidget {
 
    final viewModel = ref.watch(splashViewModelProvider.notifier)..setContext(context);
 
-
     return Scaffold(
       body: Container(
         decoration: const BoxDecoration(

+ 1 - 11
app/lib/modules/splash/vm/splash_view_model.dart

@@ -14,7 +14,7 @@ class SplashViewModel extends _$SplashViewModel {
   @override
   void build() {
     // 初始构建逻辑
-    Log.d("初始构建逻辑");
+    Log.d("SplashViewModel - 初始构建逻辑");
     _gotoNextPage();
   }
 
@@ -49,18 +49,8 @@ class SplashViewModel extends _$SplashViewModel {
 
     String? token = SPUtil.getString(AppConstant.storageToken);
     final userConfigService = UserConfigService.getInstance();
-    Log.d("userConfigService对象:$userConfigService");
     userConfigService.setToken(token);
 
-    final userConfigServiceByRef = UserConfigService.getInstance(ref: ref);
-    Log.d("userConfigServiceByRef对象:$userConfigServiceByRef");
-    Log.d("两个UserConfigService是一个对象吗:${userConfigService == userConfigServiceByRef}");
-
-    final appService = ComponentServiceManager().appService;
-    final mainService = ComponentServiceManager().mainService;
-    Log.d("appService:$appService mainService:$mainService");
-
-
     if (UserConfigService.getState().haslogin == true) {
       //去Attendance页面签到
       Log.d("已经登录,去首页页面");

+ 1 - 1
app/lib/modules/splash/vm/splash_view_model.g.dart

@@ -6,7 +6,7 @@ part of 'splash_view_model.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$splashViewModelHash() => r'fd8dcc6ad224bff4e340d7a877cf1bc570779af0';
+String _$splashViewModelHash() => r'02eb67ae5dfea66ff110a13da9b5f424b46abe01';
 
 /// See also [SplashViewModel].
 @ProviderFor(SplashViewModel)

+ 63 - 4
packages/cpt_main/lib/modules/feedback/page/feedback_page.dart

@@ -1,18 +1,77 @@
+import 'package:cpt_main/modules/home/page/home_page.dart';
+import 'package:cpt_main/modules/main/page/main_page.dart';
+import 'package:cs_resources/generated/assets.dart';
 import 'package:flutter/material.dart';
 import 'package:auto_route/auto_route.dart';
+import 'package:shared/utils/ext_dart.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/shatter/custom_check_box.dart';
+import 'package:widgets/shatter/custom_radio_check.dart';
 
 @RoutePage()
 class FeedbackPage extends StatelessWidget {
-
   const FeedbackPage({Key? key}) : super(key: key);
 
   @override
   Widget build(BuildContext context) {
     return Scaffold(
-      appBar: AppBar(title: Text("Feedback")),
+      appBar: MyAppBar.appBar(context, "自定义Appbar",backgroundColor: context.theme.primaryColorDark),
       body: Center(
-        child: Text("Feedback Page"),
+        child: Column(
+          mainAxisSize: MainAxisSize.max,
+          crossAxisAlignment: CrossAxisAlignment.center,
+          children: [
+            Text("文本使用").marginOnly(top: 10),
+            MyTextView(
+              "推荐使用统一方案管理",
+              textColor: Colors.black,
+              isFontMedium: true,
+              fontSize: 15,
+            ),
+            Text("图片的使用").marginOnly(top: 10),
+            Row(
+              mainAxisSize: MainAxisSize.max,
+              mainAxisAlignment: MainAxisAlignment.center,
+              children: [
+                MyAssetImage(Assets.baseServicePageNoData, width: 80, height: 80),
+                MyLoadImage("https://pic.quanjing.com/cz/8s/QJ8856274343.jpg@%21794ws", width: 80, height: 80),
+              ],
+            ),
+            Text("Check/Radio 单选/多选").marginOnly(top: 10),
+            //真实开发肯定是后台配置,就算写死的也应该在State中定义状态
+            //多选
+            CustomCheckBox(
+              options: ["中文", "英文", "法语"],
+              onOptionsSelected: (selected) {
+                Log.d("当前选中的索引:$selected");
+              },
+              selectedOptions: ["中文", "英文"],
+              textColor: Colors.black,
+            ).marginOnly(left: 15, right: 15, top: 10),
+
+            //单选
+            CustomRadioCheck(
+              options: ["是", "否"],
+              onOptionSelected: (index, text) {
+                Log.d("当前选中的索引:$index");
+              },
+              textColor: Colors.black,
+              selectedPosition: 1,
+            ).marginOnly(left: 15, right: 15, top: 10),
+
+
+            ElevatedButton(
+              onPressed: () {},
+              child: Text('Loading页面状态'),
+            ).marginOnly(top: 10),
+
+          ],
+        ),
       ),
     );
   }
-}
+}

+ 62 - 10
packages/cpt_main/lib/modules/home/page/home_page.dart

@@ -1,23 +1,75 @@
+import 'package:cpt_main/modules/visitor/page/visitor_page.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/src/widgets/framework.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:auto_route/auto_route.dart';
+import 'package:widgets/ext/ex_widget.dart';
 
 @RoutePage()
-class HomePage extends HookConsumerWidget{
-
+class HomePage extends HookConsumerWidget {
   const HomePage({super.key});
 
   @override
   Widget build(BuildContext context, WidgetRef ref) {
-    return Center(
-      child: ElevatedButton(
-        onPressed: () {
-
-        },
-        child: Text('Go to Details Page'),
+    return Scaffold(
+      appBar: AppBar(title: Text("Home")),
+      body: Center(
+        child: Column(
+          children: [
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Payment'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Rewards'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Notification'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Facility'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Form'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Notice Board'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Property'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Service'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('Community'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+          ],
+        ),
       ),
     );
   }
-
-}
+}

+ 4 - 0
packages/cpt_main/lib/modules/main/page/main_page.dart

@@ -30,6 +30,10 @@ class MainPage extends HookConsumerWidget {
         FeedbackPageRoute(),
         MePageRoute(),
       ],
+      transitionBuilder: (context, child, animation) => FadeTransition(
+        opacity: animation,
+        child: child,
+      ),
       bottomNavigationBuilder: (context, tabsRouter) {
         return BottomNavigationBar(
           unselectedItemColor: Colors.grey[500],

+ 7 - 0
packages/cpt_main/lib/modules/me/page/me_page.dart

@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:auto_route/auto_route.dart';
 import 'package:plugin_basic/modules/global_web_page.dart';
+import 'package:plugin_basic/provider/user_config/user_config_service.dart';
 import 'package:router/componentRouter/component_service_manager.dart';
 
 @RoutePage()
@@ -16,6 +17,12 @@ class MePage extends StatelessWidget {
           children: [
             ElevatedButton(
               onPressed: () {
+                UserConfigService.getInstance().setUserInfo("李四");
+              },
+              child: const Text('跨页面修改用户信息'),
+            ),
+            ElevatedButton(
+              onPressed: () {
                ComponentServiceManager().profileService.startEditProfilePage(context: context);
               },
               child: const Text('Go to Edit Profile Page'),

+ 113 - 5
packages/cpt_main/lib/modules/visitor/page/visitor_page.dart

@@ -1,18 +1,126 @@
+import 'package:cpt_main/modules/visitor/vm/visitor_view_model.dart';
 import 'package:flutter/material.dart';
 import 'package:auto_route/auto_route.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:plugin_basic/provider/user_config/user_config_service.dart';
+import 'package:widgets/dialog/app_default_dialog.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
 
 @RoutePage()
-class VisitorPage extends StatelessWidget {
-
+class VisitorPage extends HookConsumerWidget {
   const VisitorPage({Key? key}) : super(key: key);
 
   @override
-  Widget build(BuildContext context) {
+  Widget build(BuildContext context, WidgetRef ref) {
+    final _userService = UserConfigService.getInstance(ref: ref);
+    final _userConfig = UserConfigService.getState(ref: ref);
+    final _viewModel = ref.watch(visitorViewModelProvider.notifier);
+
     return Scaffold(
       appBar: AppBar(title: Text("Visitor")),
       body: Center(
-        child: Text("Visitor Page"),
+        child: Column(
+          children: [
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                Text("当前的用户:${_userConfig.userName}"),
+                ElevatedButton(
+                  onPressed: () {
+                    _userService.setUserInfo("张三");
+                  },
+                  child: Text('修改用户信息'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {
+                    _viewModel.fetchServerTime();
+                  },
+                  child: Text('网络请求'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('吐司/气泡'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('成功/失败通知'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('弹窗'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('时间选择'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('条件选择'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('相机拍照'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('相册选择'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('App动态权限申请'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('App的沙盒路径'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('缓存用法'),
+                ),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('图片预览'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('图片加载'),
+                ),
+                MyLoadImage("https://pic.quanjing.com/cz/8s/QJ8856274343.jpg@%21794ws", width: 80, height: 80),
+                ElevatedButton(
+                  onPressed: () {},
+                  child: Text('图片预览'),
+                ),
+              ],
+            ).marginOnly(top: 10),
+          ],
+        ),
       ),
     );
   }
-}
+}

+ 19 - 0
packages/cpt_main/lib/modules/visitor/vm/visitor_state.dart

@@ -0,0 +1,19 @@
+import 'package:domain/entity/server_time.dart';
+
+class VisitorState{
+
+  ServerTime? serverTime;
+
+  VisitorState({
+    this.serverTime,
+  });
+
+  VisitorState copyWith({
+    ServerTime? serverTime,
+  }) {
+    return VisitorState(
+      serverTime: serverTime ?? this.serverTime,
+    );
+  }
+
+}

+ 34 - 0
packages/cpt_main/lib/modules/visitor/vm/visitor_view_model.dart

@@ -0,0 +1,34 @@
+import 'package:domain/repository/demo_repository.dart';
+import 'package:flutter/material.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+
+import 'package:shared/utils/log_utils.dart';
+
+import 'visitor_state.dart';
+
+part 'visitor_view_model.g.dart';
+
+@riverpod
+class VisitorViewModel extends _$VisitorViewModel {
+  late DemoRepository demoRepository;
+
+  @override
+  VisitorState build() {
+    demoRepository = ref.read(demoRepositoryProvider);
+    return VisitorState();
+  }
+
+  /// 获取服务器时间测试
+  void fetchServerTime() async {
+    //请求网络
+    final result = await demoRepository.fetchServerTime("");
+    //校验成功失败
+    if (result.isSuccess) {
+      state = state.copyWith(serverTime: result.data);
+      ToastEngine.show("当前服务器时间戳:${result.data?.timestamps}");
+    } else {
+      ToastEngine.show(result.errorMsg ?? "Network Load Error");
+    }
+  }
+}

+ 26 - 0
packages/cpt_main/lib/modules/visitor/vm/visitor_view_model.g.dart

@@ -0,0 +1,26 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'visitor_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$visitorViewModelHash() => r'496ab8e33fb5e8d204ca64fd59a3c2833aeea426';
+
+/// See also [VisitorViewModel].
+@ProviderFor(VisitorViewModel)
+final visitorViewModelProvider =
+    AutoDisposeNotifierProvider<VisitorViewModel, VisitorState>.internal(
+  VisitorViewModel.new,
+  name: r'visitorViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$visitorViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$VisitorViewModel = AutoDisposeNotifier<VisitorState>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 6 - 2
packages/cpt_profile/lib/modules/profile_edit/page/Profile_edit_page.dart

@@ -1,10 +1,12 @@
+import 'package:cpt_profile/modules/profile_edit/vm/profile_edit_view_model.dart';
 import 'package:cpt_profile/router/page/profile_page_router.dart';
 import 'package:flutter/material.dart';
 import 'package:auto_route/auto_route.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:router/ext/auto_router_extensions.dart';
 
 @RoutePage()
-class ProfileEditPage extends StatelessWidget {
+class ProfileEditPage extends HookConsumerWidget {
   const ProfileEditPage({Key? key}) : super(key: key);
 
   //启动当前页面
@@ -17,7 +19,9 @@ class ProfileEditPage extends StatelessWidget {
   }
 
   @override
-  Widget build(BuildContext context) {
+  Widget build(BuildContext context, WidgetRef ref) {
+    final _viewModel = ref.watch(profileEditViewModelProvider.notifier);
+
     return Scaffold(
       appBar: AppBar(title: Text("Profile Edit Page")),
       body: Center(

+ 13 - 0
packages/cpt_profile/lib/modules/profile_edit/vm/profile_edit_view_model.dart

@@ -0,0 +1,13 @@
+
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+part 'profile_edit_view_model.g.dart';
+
+@riverpod
+class ProfileEditViewModel extends _$ProfileEditViewModel {
+
+  @override
+  void build(){
+
+  }
+
+}

+ 27 - 0
packages/cpt_profile/lib/modules/profile_edit/vm/profile_edit_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'profile_edit_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$profileEditViewModelHash() =>
+    r'acfbe7986503c631d7107a9309c85e768b1067f2';
+
+/// See also [ProfileEditViewModel].
+@ProviderFor(ProfileEditViewModel)
+final profileEditViewModelProvider =
+    AutoDisposeNotifierProvider<ProfileEditViewModel, void>.internal(
+  ProfileEditViewModel.new,
+  name: r'profileEditViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$profileEditViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$ProfileEditViewModel = AutoDisposeNotifier<void>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 7 - 1
packages/cs_domain/lib/constants/api_constants.dart

@@ -5,7 +5,7 @@ class ApiConstants {
   static const isServerRelease = false;
 
   //新加坡的域名
-  static const baseUrl = isServerRelease ? 'https://www.casualabour.com' : 'http://singapore-dev.casualabour.com';
+  static const baseUrl = isServerRelease ? 'https://www.casualabour.com' : 'http://yyjobs-api-dev.guadoutech.com';
 
   // =========================== 用户相关 ↓=========================================
 
@@ -298,4 +298,10 @@ class ApiConstants {
 
   // 考勤的批量拒绝
   static const apiAttendanceReviewReject = "/index.php/api/v1/hotel/att-review/reject";
+
+// =========================== 其他 ↓=========================================
+
+  //服务器时间
+  static const apiServerTime = "/index.php/api/employee/extra/time";
+
 }

+ 63 - 0
packages/cs_domain/lib/repository/demo_repository.dart

@@ -0,0 +1,63 @@
+import 'package:domain/entity/server_time.dart';
+import 'package:plugin_platform/dio_export.dart';
+import 'package:plugin_platform/http/dio_engine.dart';
+import 'package:plugin_platform/http/http_result.dart';
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:shared/utils/util.dart';
+
+import '../constants/api_constants.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:plugin_basic/provider/http_provider/http_provider.dart';
+
+part 'demo_repository.g.dart';
+
+@Riverpod(keepAlive: true)
+DemoRepository demoRepository(Ref ref) {
+  final dioEngine = ref.watch(dioEngineProvider);
+  return DemoRepository(dioEngine: dioEngine);
+}
+
+/*
+ * 测试用的数据仓库
+ */
+class DemoRepository {
+  DioEngine dioEngine;
+
+  DemoRepository({required this.dioEngine});
+
+  Future<HttpResult<ServerTime>> fetchServerTime(
+    String? type, {
+    CancelToken? cancelToken,
+  }) async {
+    Map<String, String> params = {};
+
+    if (!Utils.isEmpty(type)) {
+      params["type"] = type!;
+    }
+
+    Map<String, String> headers = {};
+
+    headers["Content-Type"] = "application/x-www-form-urlencoded";
+    headers["Accept"] = "application/x.yyjobs-api.v1+json";
+
+    final result = await dioEngine.requestNetResult(
+      ApiConstants.apiServerTime,
+      params: params,
+      headers: headers,
+      method: HttpMethod.GET,
+      isShowLoadingDialog: true,  //是否展示默认的Loading弹窗
+      networkDebounce: true,   //是否防抖防止重复请求
+      cancelToken: cancelToken,
+    );
+
+    //根据返回的结果,封装原始数据为Bean/Entity对象
+    if (result.isSuccess) {
+      //重新赋值data或list
+      final json = result.getDataJson();
+      var data = ServerTime.fromJson(json!);
+      //重新赋值data或list
+      return result.convert<ServerTime>(data: data);
+    }
+    return result.convert();
+  }
+}

+ 27 - 0
packages/cs_domain/lib/repository/demo_repository.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'demo_repository.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$demoRepositoryHash() => r'e777a23ad750b13b09ce23ebe0e2ac940f0dfad4';
+
+/// See also [demoRepository].
+@ProviderFor(demoRepository)
+final demoRepositoryProvider = Provider<DemoRepository>.internal(
+  demoRepository,
+  name: r'demoRepositoryProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$demoRepositoryHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+@Deprecated('Will be removed in 3.0. Use Ref instead')
+// ignore: unused_element
+typedef DemoRepositoryRef = ProviderRef<DemoRepository>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 33 - 6
packages/cs_domain/pubspec.yaml

@@ -14,12 +14,6 @@ dependencies:
   flutter:
     sdk: flutter
 
-  # Riverpod核心库
-  flutter_riverpod: ^2.5.1
-
-  # Riverpod注解
-  riverpod_annotation: ^2.3.5
-
   # json 序列化和反序列化
   json_annotation: ^4.8.0
 
@@ -29,6 +23,39 @@ dependencies:
   plugin_platform:
     path: ../cs_plugin_platform
 
+  plugin_basic:
+    path: ../cs_plugin_basic
+
+  # Riverpod核心库
+  flutter_riverpod: ^2.5.1
+
+  # Riverpod注解
+  riverpod_annotation: ^2.3.5
+
+  # Hooks 简化 Flutter 页面
+  flutter_hooks: ^0.20.5
+
+  # Hooks 简化 Riverpod 获取
+  hooks_riverpod: ^2.5.1
+
+dev_dependencies:
+  flutter_test:
+    sdk: flutter
+
+  flutter_lints: ^4.0.0
+
+  # Dart代码生成文件
+  build_runner: ^2.4.12
+
+  # Riverpod代码生成器
+  riverpod_generator: ^2.4.3
+
+  # 专为Riverpod设计的一套lint规则
+  riverpod_lint: ^2.3.13
+
+  # AutoRouter 生成代码
+  auto_route_generator: ^8.0.0
+
 flutter:
   uses-material-design: true
 

+ 23 - 21
packages/cs_plugin_basic/lib/dio_interceptors/interceptor_auth_dio.dart

@@ -1,11 +1,11 @@
 import 'package:dio/dio.dart';
+import 'package:plugin_basic/provider/app_config/app_config_service.dart';
 import 'package:shared/utils/device_utils.dart';
 import 'package:shared/utils/log_utils.dart';
 import 'package:shared/utils/util.dart';
 
 import '../provider/user_config/user_config_service.dart';
 
-
 /*
  * 用户授权加密等相关处理的拦截器
  */
@@ -15,27 +15,29 @@ class AuthDioInterceptors extends Interceptor {
     //拿到现有的Headers
     Map<String, dynamic> headers = options.headers;
 
-    headers['accept'] = 'application/json';
+    if (Utils.isEmpty(headers['accept'])) {
+      headers['accept'] = 'application/json';
+    }
 
     // 设置需要添加平台信息,App版本信息等
-    // if (DeviceUtils.isIOS) {
-    //   final systemVersion = ConfigService.to.iosDeviceInfo?.systemVersion;
-    //   final appVersion = ConfigService.to.version;
-    //   const platform = 'ios';
-    //
-    //   final agent = 'platform:$platform systemVersion:$systemVersion appVersion:$appVersion}';
-    //   headers['User-Agent'] = agent;
-    // } else if (DeviceUtils.isAndroid) {
-    //   final device = '${ConfigService.to.androidDeviceInfo?.brand}-${ConfigService.to.androidDeviceInfo?.device}';
-    //   final systemVersion = ConfigService.to.androidDeviceInfo?.version.release;
-    //   final appVersion = ConfigService.to.version;
-    //   const platform = 'android';
-    //
-    //   final agent = 'platform:$platform device:$device systemVersion:$systemVersion appVersion:$appVersion';
-    //   headers['User-Agent'] = agent;
-    // } else {
-    //   headers['User-Agent'] = 'Mozilla/5.0';
-    // }
+    if (DeviceUtils.isIOS) {  
+      final systemVersion = AppConfigService.getState().iosDeviceInfo?.systemVersion;
+      final appVersion = AppConfigService.getState().version;
+      const platform = 'ios';
+
+      final agent = 'platform:$platform systemVersion:$systemVersion appVersion:$appVersion}';
+      headers['User-Agent'] = agent;
+    } else if (DeviceUtils.isAndroid) {
+      final device = '${AppConfigService.getState().androidDeviceInfo?.brand}-${AppConfigService.getState().androidDeviceInfo?.device}';
+      final systemVersion = AppConfigService.getState().androidDeviceInfo?.version.release;
+      final appVersion = AppConfigService.getState().version;
+      const platform = 'android';
+
+      final agent = 'platform:$platform device:$device systemVersion:$systemVersion appVersion:$appVersion';
+      headers['User-Agent'] = agent;
+    } else {
+      headers['User-Agent'] = 'Mozilla/5.0';
+    }
 
     //每个接口添加自定义的设备UUID标识
     // final uuid = SPUtil.getString(AppConstant.storageDeviceUUID);
@@ -44,7 +46,7 @@ class AuthDioInterceptors extends Interceptor {
     // }
 
     //如果有通行令牌,都带上通行令牌
-    String? token =  UserConfigService.getState().token;
+    String? token = UserConfigService.getState().token;
     Log.d("AuthDioInterceptors 添加用户授权Token:$token");
     if (!Utils.isEmpty(token)) {
       headers['Authorization'] = 'Bearer $token';

+ 2 - 1
packages/cs_plugin_basic/lib/modules/preview_photo_page.dart

@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
 import 'package:cs_resources/generated/assets.dart';
 import 'package:flutter_hooks/flutter_hooks.dart';
 import 'package:plugin_basic/router/basic_page_router.dart';
+import 'package:router/ext/auto_router_extensions.dart';
 import 'package:router/path/router_path.dart';
 import 'package:shared/utils/screen_util.dart';
 import 'package:widgets/my_load_image.dart';
@@ -65,7 +66,7 @@ class PreviewPhotoPage extends HookConsumerWidget {
 
                 InkWell(
                   onTap: () {
-                    Navigator.pop(context);
+                    appRouter.maybePop();
                   },
                   child: const MyAssetImage(
                     Assets.baseLibDialogDeleteIcon,

+ 4 - 4
app/lib/obs/my_navigator_observer.dart

@@ -7,7 +7,7 @@ class MyNavigatorObserver extends NavigatorObserver {
   void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
     super.didPush(route, previousRoute);
 
-    Log.d('NavigationLogmanRecord{route: ${getRouteName(route)}, action: didPush ,'
+    Log.d('NavigationRecord{route: ${getRouteName(route)}, action: didPush ,'
         ' previousRoute: ${getPreviousRouteName(previousRoute)}, '
         'parameters: ${getParameters(route)}}');
   }
@@ -15,7 +15,7 @@ class MyNavigatorObserver extends NavigatorObserver {
   @override
   void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
     super.didPop(route, previousRoute);
-    Log.d('NavigationLogmanRecord{route: ${getRouteName(route)}, action: didPush ,'
+    Log.d('NavigationRecord{route: ${getRouteName(route)}, action: didPush ,'
         ' previousRoute: ${getPreviousRouteName(previousRoute)}, '
         'parameters: ${getParameters(route)}}');
   }
@@ -23,7 +23,7 @@ class MyNavigatorObserver extends NavigatorObserver {
   @override
   void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {
     super.didRemove(route, previousRoute);
-    Log.d('NavigationLogmanRecord{route: ${getRouteName(route)}, action: didPush ,'
+    Log.d('NavigationRecord{route: ${getRouteName(route)}, action: didPush ,'
         ' previousRoute: ${getPreviousRouteName(previousRoute)}, '
         'parameters: ${getParameters(route)}}');
   }
@@ -31,7 +31,7 @@ class MyNavigatorObserver extends NavigatorObserver {
   @override
   void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
     super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
-    Log.d('NavigationLogmanRecord{route: ${getRouteName(newRoute)}, action: didPush ,'
+    Log.d('NavigationRecord{route: ${getRouteName(newRoute)}, action: didPush ,'
         ' previousRoute: ${getPreviousRouteName(oldRoute)}, '
         'parameters: ${getParameters(newRoute)}}');
   }

+ 5 - 5
app/lib/obs/riverpod_observer.dart

@@ -1,7 +1,7 @@
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 import 'package:shared/utils/log_utils.dart';
 
-class RiverpodObserver extends ProviderObserver {
+class MyRiverpodObserver extends ProviderObserver {
 
   @override
   void didAddProvider(
@@ -9,7 +9,7 @@ class RiverpodObserver extends ProviderObserver {
       Object? value,
       ProviderContainer container,
       ) {
-    Log.d('Provider Did Add -> $provider was initialized with $value');
+    Log.d('Riverpod Provider Did Add -> $provider was initialized with $value');
   }
 
   @override
@@ -17,7 +17,7 @@ class RiverpodObserver extends ProviderObserver {
       ProviderBase<Object?> provider,
       ProviderContainer container,
       ) {
-    Log.d('Provider Did Dispose -> $provider was disposed');
+    Log.d('Riverpod Provider Did Dispose -> $provider was disposed');
   }
 
   @override
@@ -28,7 +28,7 @@ class RiverpodObserver extends ProviderObserver {
       ProviderContainer container,
       ) {
     Log.d(
-      'Provider Did Update -> $provider updated from $previousValue to $newValue',
+      'Riverpod Provider Did Update -> $provider updated from $previousValue to $newValue',
     );
   }
 
@@ -39,6 +39,6 @@ class RiverpodObserver extends ProviderObserver {
       StackTrace stackTrace,
       ProviderContainer container,
       ) {
-    Log.d('Provider Did Fail -> $provider threw $error at $stackTrace');
+    Log.d('Riverpod Provider Did Fail -> $provider threw $error at $stackTrace');
   }
 }

+ 34 - 32
packages/cs_plugin_basic/lib/provider/app_config/app_config_service.dart

@@ -57,42 +57,44 @@ class AppConfigService extends _$AppConfigService {
   }
 
   void initSize(BuildContext context) {
-    //屏幕大小
-    final size = MediaQuery.of(context).size;
-    //密度
-    final ratio = MediaQuery.of(context).devicePixelRatio;
-    //设备像素 px
-    final width = size.width * ratio;
-    final height = size.height * ratio;
+    if (state.mSize == null) {
+      //屏幕大小
+      final size = MediaQuery.of(context).size;
+      //密度
+      final ratio = MediaQuery.of(context).devicePixelRatio;
+      //设备像素 px
+      final width = size.width * ratio;
+      final height = size.height * ratio;
 
-    var configState = state.copyWith(
-      mSize: size,
-      mRatio: ratio,
-      width: width,
-      height: height,
-      whRatio: height / width,
-      isFullScreenDevice: (height / width) > 1.9,
-      topPadding: MediaQuery.of(context).padding.top,
-      bottomPadding: MediaQuery.of(context).padding.bottom,
-      textScaleFactor: MediaQuery.of(context).textScaleFactor,
-      platformBrightness: MediaQuery.of(context).platformBrightness,
-      viewInsets: MediaQuery.of(context).viewInsets,
-      padding: MediaQuery.of(context).padding,
-      alwaysUse24HourFormat: MediaQuery.of(context).alwaysUse24HourFormat,
-      accessibleNavigation: MediaQuery.of(context).accessibleNavigation,
-      invertColors: MediaQuery.of(context).invertColors,
-      disableAnimations: MediaQuery.of(context).disableAnimations,
-      boldText: MediaQuery.of(context).boldText,
-      orientation: MediaQuery.of(context).orientation,
-      density: MediaQuery.devicePixelRatioOf(context),
-    );
+      var configState = state.copyWith(
+        mSize: size,
+        mRatio: ratio,
+        width: width,
+        height: height,
+        whRatio: height / width,
+        isFullScreenDevice: (height / width) > 1.9,
+        topPadding: MediaQuery.of(context).padding.top,
+        bottomPadding: MediaQuery.of(context).padding.bottom,
+        textScaleFactor: MediaQuery.of(context).textScaleFactor,
+        platformBrightness: MediaQuery.of(context).platformBrightness,
+        viewInsets: MediaQuery.of(context).viewInsets,
+        padding: MediaQuery.of(context).padding,
+        alwaysUse24HourFormat: MediaQuery.of(context).alwaysUse24HourFormat,
+        accessibleNavigation: MediaQuery.of(context).accessibleNavigation,
+        invertColors: MediaQuery.of(context).invertColors,
+        disableAnimations: MediaQuery.of(context).disableAnimations,
+        boldText: MediaQuery.of(context).boldText,
+        orientation: MediaQuery.of(context).orientation,
+        density: MediaQuery.devicePixelRatioOf(context),
+      );
 
-    state = configState;
+      state = configState;
 
-    //初始化Flustarts工具类中 ScreenUtils 工具,可以设置设计稿的大小,可以选择性的使用 getAdapterSizeCtx 适配大小屏不同尺寸的展示
-    setDesignWHD(375, 667, density: configState.density);
+      //初始化Flustarts工具类中 ScreenUtils 工具,可以设置设计稿的大小,可以选择性的使用 getAdapterSizeCtx 适配大小屏不同尺寸的展示
+      setDesignWHD(375, 667, density: configState.density);
 
-    printAppConfig();
+      printAppConfig();
+    }
   }
 
   /// 测试并打印数据

+ 1 - 1
packages/cs_plugin_basic/lib/provider/app_config/app_config_service.g.dart

@@ -6,7 +6,7 @@ part of 'app_config_service.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$appConfigServiceHash() => r'133b41e8af51e41f3d4e8b123da40a9b73a4da61';
+String _$appConfigServiceHash() => r'7bf641d7421f160146c33fda60fcbf628069a6bc';
 
 /// See also [AppConfigService].
 @ProviderFor(AppConfigService)

+ 5 - 1
packages/cs_plugin_basic/lib/provider/global_provider_container.dart

@@ -1,4 +1,8 @@
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 
+import '../obs/my_riverpod_observer.dart';
+
 //全局单例的Provider 用于非UI无ref对象的场景引入
-final globalContainer = ProviderContainer();
+final globalContainer = ProviderContainer(
+  observers: [MyRiverpodObserver()],
+);

+ 3 - 4
packages/cs_plugin_basic/lib/provider/http_provider/http_provider.dart

@@ -1,7 +1,7 @@
 import 'package:domain/constants/api_constants.dart';
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
-import 'package:plugin_platform/http/http_provider.dart';
+import 'package:plugin_platform/http/dio_engine.dart';
 
 import '../../dio_interceptors/interceptor_auth_dio.dart';
 import '../../dio_interceptors/interceptor_status_code_dio.dart';
@@ -9,9 +9,8 @@ import '../../dio_interceptors/interceptor_status_code_dio.dart';
 part 'http_provider.g.dart';
 
 @Riverpod(keepAlive: true)
-HttpProvider http(Ref ref) {
-
-  return HttpProvider(
+DioEngine dioEngine(Ref ref) {
+  return DioEngine(
     ApiConstants.baseUrl,
     interceptors: [StatusCodeDioInterceptors(), AuthDioInterceptors()], //需要加上与App关联的一些拦截处理
   );

+ 8 - 8
packages/cs_plugin_basic/lib/provider/http_provider/http_provider.g.dart

@@ -6,21 +6,21 @@ part of 'http_provider.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$httpHash() => r'7a58e9288487d9685e6b32abb754a1a84ba1844e';
+String _$dioEngineHash() => r'40d34389e14a169d08a71a8ceb430ab71779d35f';
 
-/// See also [http].
-@ProviderFor(http)
-final httpProvider = Provider<HttpProvider>.internal(
-  http,
-  name: r'httpProvider',
+/// See also [dioEngine].
+@ProviderFor(dioEngine)
+final dioEngineProvider = Provider<DioEngine>.internal(
+  dioEngine,
+  name: r'dioEngineProvider',
   debugGetCreateSourceHash:
-      const bool.fromEnvironment('dart.vm.product') ? null : _$httpHash,
+      const bool.fromEnvironment('dart.vm.product') ? null : _$dioEngineHash,
   dependencies: null,
   allTransitiveDependencies: null,
 );
 
 @Deprecated('Will be removed in 3.0. Use Ref instead')
 // ignore: unused_element
-typedef HttpRef = ProviderRef<HttpProvider>;
+typedef DioEngineRef = ProviderRef<DioEngine>;
 // ignore_for_file: type=lint
 // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 10 - 22
packages/cs_plugin_basic/lib/provider/user_config/user_config.dart

@@ -2,6 +2,7 @@
 class UserConfig {
   //用户的详情信息
   // UserProfile userProfile;
+  String? userName;
 
   //用户的登录Token
   String? token;
@@ -15,13 +16,14 @@ class UserConfig {
   //用户的未读消息数量
   int unreadNotificationsCount = 0;
 
-// ===================================  插件自动生成-无需手动修改  ↓  ===================================
+  /// ===================================  插件自动生成-无需手动修改  ↓  ===================================
 
-  //<editor-fold desc="Data Methods">
+//<editor-fold desc="Data Methods">
   UserConfig({
+    this.userName,
     this.token,
     required this.haslogin,
-    required this.registrationId,
+    this.registrationId,
     required this.unreadNotificationsCount,
   });
 
@@ -30,17 +32,19 @@ class UserConfig {
       identical(this, other) ||
       (other is UserConfig &&
           runtimeType == other.runtimeType &&
+          userName == other.userName &&
           token == other.token &&
           haslogin == other.haslogin &&
           registrationId == other.registrationId &&
           unreadNotificationsCount == other.unreadNotificationsCount);
 
   @override
-  int get hashCode => token.hashCode ^ haslogin.hashCode ^ registrationId.hashCode ^ unreadNotificationsCount.hashCode;
+  int get hashCode => userName.hashCode ^ token.hashCode ^ haslogin.hashCode ^ registrationId.hashCode ^ unreadNotificationsCount.hashCode;
 
   @override
   String toString() {
     return 'UserConfig{' +
+        ' userName: $userName,' +
         ' token: $token,' +
         ' haslogin: $haslogin,' +
         ' registrationId: $registrationId,' +
@@ -49,12 +53,14 @@ class UserConfig {
   }
 
   UserConfig copyWith({
+    String? userName,
     String? token,
     bool? haslogin,
     String? registrationId,
     int? unreadNotificationsCount,
   }) {
     return UserConfig(
+      userName: userName ?? this.userName,
       token: token ?? this.token,
       haslogin: haslogin ?? this.haslogin,
       registrationId: registrationId ?? this.registrationId,
@@ -62,23 +68,5 @@ class UserConfig {
     );
   }
 
-  Map<String, dynamic> toMap() {
-    return {
-      'token': this.token,
-      'haslogin': this.haslogin,
-      'registrationId': this.registrationId,
-      'unreadNotificationsCount': this.unreadNotificationsCount,
-    };
-  }
-
-  factory UserConfig.fromMap(Map<String, dynamic> map) {
-    return UserConfig(
-      token: map['token'] as String,
-      haslogin: map['haslogin'] as bool,
-      registrationId: map['registrationId'] as String,
-      unreadNotificationsCount: map['unreadNotificationsCount'] as int,
-    );
-  }
-
 //</editor-fold>
 }

+ 9 - 2
packages/cs_plugin_basic/lib/provider/user_config/user_config_service.dart

@@ -1,3 +1,5 @@
+import 'dart:ffi';
+
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 import 'package:plugin_basic/provider/user_config/user_config.dart';
 import 'package:plugin_platform/engine/sp/sp_util.dart';
@@ -17,7 +19,7 @@ part 'user_config_service.g.dart';
 class UserConfigService extends _$UserConfigService {
 
   /// 静态方法获取当前单例对象
-  static UserConfigService getInstance({Ref? ref}) {
+  static UserConfigService getInstance({WidgetRef? ref}) {
     if (ref != null) {
       return ref.watch(userConfigServiceProvider.notifier);
     } else {
@@ -25,7 +27,7 @@ class UserConfigService extends _$UserConfigService {
     }
   }
 
-  static UserConfig getState({Ref? ref}){
+  static UserConfig getState({WidgetRef? ref}){
     if (ref != null) {
       return ref.watch(userConfigServiceProvider);
     } else {
@@ -40,6 +42,11 @@ class UserConfigService extends _$UserConfigService {
     return UserConfig(token: token, haslogin: false, registrationId: null, unreadNotificationsCount: 0);
   }
 
+  /// 设置用户信息
+  void setUserInfo(String? userName){
+    state = state.copyWith(userName: userName);
+  }
+
   /// 设置全局的Token,同时更新 hasLogin 的值,赋值时机如下
   void setToken(String? token) {
     UserConfig configState = state.copyWith(token: token);

+ 1 - 1
packages/cs_plugin_basic/lib/provider/user_config/user_config_service.g.dart

@@ -6,7 +6,7 @@ part of 'user_config_service.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$userConfigServiceHash() => r'1d0099a11d7e56306197ff341b4cce4aa8e91a81';
+String _$userConfigServiceHash() => r'9cb0a6024c41d061fe49b24ccf54dd8952279272';
 
 /// See also [UserConfigService].
 @ProviderFor(UserConfigService)

+ 2 - 1
packages/cs_plugin_platform/lib/engine/network/network_engine.dart

@@ -9,10 +9,11 @@ import 'package:shared/utils/reg_utils.dart';
 import 'dart:typed_data';
 import '../../http/dio/interceptor_cache_controller.dart';
 import '../../http/dio/interceptor_network_debounce.dart';
-import '../../http/http_provider.dart';
+import '../../http/dio_engine.dart';
 
 /*
  * 网络请求引擎封装,目前使用的是 Dio 框架
+ * 不直接使用此类,由 DioEngine 提供服务
  */
 class NetworkEngine {
   late Dio dio;

+ 1 - 1
packages/cs_plugin_platform/lib/http/dio/interceptor_cache_controller.dart

@@ -2,7 +2,7 @@ import 'package:dio/dio.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:plugin_platform/engine/cache/local_cache_manager.dart';
 import 'package:shared/utils/log_utils.dart';
-import '../http_provider.dart';
+import '../dio_engine.dart';
 
 /*
  * Http的缓存策略与处理

+ 3 - 3
packages/cs_plugin_platform/lib/http/http_provider.dart

@@ -17,12 +17,12 @@ enum CacheControl {
 // ignore: constant_identifier_names
 enum HttpMethod { GET, POST }
 
-///Dio封装管理,网络请求引擎类
-class HttpProvider {
+///Dio封装管理,网络请求引擎类,具体逻辑由NetworkEngine执行
+class DioEngine {
   late NetworkEngine networkEngine;
 
   //构造需要传递BaseUrl 和 需要添加的拦截器
-  HttpProvider(String baseUrl, {List<Interceptor>? interceptors}) {
+  DioEngine(String baseUrl, {List<Interceptor>? interceptors}) {
     //具体的执行网络请求逻辑在引擎类中
     networkEngine = NetworkEngine(baseUrl, interceptors);
   }

+ 5 - 4
packages/cs_widgets/lib/my_appbar.dart

@@ -4,6 +4,7 @@ import 'package:flutter/services.dart';
 import 'package:flutter/widgets.dart';
 import 'package:cs_resources/generated/assets.dart';
 import 'package:cs_resources/constants/color_constants.dart';
+import 'package:router/ext/auto_router_extensions.dart';
 import 'my_load_image.dart';
 import 'search_app_bar.dart';
 
@@ -31,7 +32,7 @@ class MyAppBar {
           if (backCallback != null) {
             backCallback();
           } else {
-            Navigator.pop(context);
+            appRouter.maybePop();
           }
         },
       ),
@@ -102,7 +103,7 @@ class MyAppBar {
           if (backCallback != null) {
             backCallback();
           } else {
-            Navigator.pop(context);
+           appRouter.maybePop();
           }
         },
       ),
@@ -169,7 +170,7 @@ class MyAppBar {
                       if (backCallback != null) {
                         backCallback();
                       } else {
-                        Navigator.pop(context);
+                        appRouter.maybePop();
                       }
                     },
                   ),
@@ -268,7 +269,7 @@ class MyAppBar {
                     if (backCallback != null) {
                       backCallback();
                     } else {
-                      Navigator.pop(context);
+                      appRouter.maybePop();
                     }
                   },
                 ),

+ 1 - 1
packages/cs_widgets/lib/my_load_image.dart

@@ -59,7 +59,7 @@ class MyLoadImage extends StatelessWidget {
             color:const Color(0xffE0E0E0),
             alignment: Alignment.center,
             child: const MyAssetImage(
-              "Assets.baseLibImageDefaultPlaceholder",
+              Assets.baseLibImageDefaultPlaceholder,
               width: 38,
               height: 32,
             ),

+ 3 - 1
packages/cs_widgets/lib/shatter/custom_check_box.dart

@@ -10,11 +10,13 @@ class CustomCheckBox extends StatefulWidget {
   final List<String> options;
   final Function(List<int> selectedIndexes) onOptionsSelected; // 选中项的索引回调
   final List<String> selectedOptions; // 已选中的选项列表
+  final Color textColor;
 
   CustomCheckBox({
     required this.options,
     required this.onOptionsSelected,
     required this.selectedOptions,
+    this.textColor = Colors.white, // 默认可用
   });
 
   @override
@@ -105,7 +107,7 @@ class _CustomCheckBoxState extends State<CustomCheckBox> {
         const SizedBox(width: 10),
         MyTextView(
           text,
-          textColor: ColorConstants.white,
+          textColor: widget.textColor,
           fontSize: 14,
           isFontRegular: true,
         ),

+ 1 - 1
packages/cs_widgets/lib/shatter/custom_radio_check.dart

@@ -88,7 +88,7 @@ class _CustomRadioCheckState extends State<CustomRadioCheck> {
       mainAxisSize: MainAxisSize.min,
       children: <Widget>[
         MyAssetImage(path, width: 22, height: 22),
-        SizedBox(width: 10),
+        const SizedBox(width: 10),
         MyTextView(
           text,
           textColor: widget.enable ? widget.textColor : ColorConstants.gray, // 根据 enable 改变文本颜色

+ 3 - 0
packages/cs_widgets/pubspec.yaml

@@ -24,6 +24,9 @@ dependencies:
   shared:
     path: ../cs_shared
 
+  router:
+    path: ../cs_router
+
   # Riverpod核心库
   flutter_riverpod: ^2.5.1