diff --git a/app/lib/constants/sp_keys.dart b/app/lib/constants/sp_keys.dart index 846f957..e3140a4 100644 --- a/app/lib/constants/sp_keys.dart +++ b/app/lib/constants/sp_keys.dart @@ -1,4 +1,5 @@ class SPKeys { static final String brightnessMode = 'BRIGHTNESS_MODE'; + static final String appliedSchemeId = 'APPLIED_SCHEME_ID'; static final String userLanguage = 'USER_LANGUAGE'; } diff --git a/app/lib/models/configs.dart b/app/lib/models/configs.dart index 7df082f..691756b 100644 --- a/app/lib/models/configs.dart +++ b/app/lib/models/configs.dart @@ -13,8 +13,12 @@ class Configs { @ProviderModelProp() BrightnessMode? brightnessMode; + @ProviderModelProp() + String? appliedSchemeId; + Configs() { this.brightnessMode = BrightnessMode.values[H().sp.getInt(SPKeys.brightnessMode)?.clamp(0, BrightnessMode.values.length - 1) ?? 0]; + this.appliedSchemeId = H().sp.getString(SPKeys.appliedSchemeId); } } diff --git a/app/lib/pages/local_manager.dart b/app/lib/pages/local_manager.dart index aded155..5e7dc57 100644 --- a/app/lib/pages/local_manager.dart +++ b/app/lib/pages/local_manager.dart @@ -1,13 +1,19 @@ +import 'package:collection/collection.dart'; import 'package:dde_gesture_manager/constants/constants.dart'; +import 'package:dde_gesture_manager/constants/sp_keys.dart'; import 'package:dde_gesture_manager/extensions.dart'; +import 'package:dde_gesture_manager/models/configs.provider.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart'; +import 'package:dde_gesture_manager/models/local_schemes.dart'; import 'package:dde_gesture_manager/models/local_schemes_provider.dart'; import 'package:dde_gesture_manager/models/scheme.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart'; import 'package:dde_gesture_manager/models/settings.provider.dart'; +import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:uuid/uuid.dart'; class LocalManager extends StatefulWidget { const LocalManager({ @@ -27,9 +33,20 @@ class _LocalManagerState extends State { void initState() { super.initState(); - /// todo: load from sp _selectedItemPath = ''; _scrollController = ScrollController(); + + context.read().schemeEntries.then((_) { + var localSchemes = context.read().schemes ?? []; + var appliedSchemeId = context.read().appliedSchemeId; + var appliedScheme = localSchemes.firstWhereOrNull((ele) => ele.scheme.id == appliedSchemeId); + if (appliedScheme != null) { + setState(() { + _selectedItemPath = appliedScheme.path; + }); + _handleItemClick(context, appliedScheme); + } + }); } Color _getItemBackgroundColor(int index, String itemPath) { @@ -39,6 +56,22 @@ class _LocalManagerState extends State { return _color; } + Icon _getItemIcon(Scheme scheme, String? appliedId) { + if (scheme.id == appliedId) return Icon(Icons.done_rounded, size: 22); + if (scheme.id == Uuid.NAMESPACE_NIL) return Icon(Icons.restore_rounded, size: 22); + if (scheme.fromMarket == true) return Icon(Icons.local_grocery_store_rounded, size: 20); + if (scheme.uploaded == true) return Icon(Icons.cloud_done_rounded, size: 18); + return Icon(Icons.person_rounded, size: 22); + } + + void _handleItemClick(BuildContext context, LocalSchemeEntry localScheme) { + context.read().copyFrom(localScheme.scheme); + setState(() { + _selectedItemPath = localScheme.path; + }); + context.read().copyFrom(GestureProp.empty()); + } + @override Widget build(BuildContext context) { var isOpen = context.watch().localManagerOpened == true; @@ -106,11 +139,7 @@ class _LocalManagerState extends State { controller: _scrollController, itemBuilder: (context, index) => GestureDetector( onTap: () { - context.read().copyFrom(localSchemes[index].scheme); - setState(() { - _selectedItemPath = localSchemes[index].path; - }); - context.read().copyFrom(GestureProp.empty()); + _handleItemClick(context, localSchemes[index]); }, child: MouseRegion( cursor: SystemMouseCursors.click, @@ -131,7 +160,8 @@ class _LocalManagerState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(localSchemes[index].scheme.name ?? ''), - Text('456'), + _getItemIcon(localSchemes[index].scheme, + context.watch().appliedSchemeId), ], ), ), @@ -173,7 +203,16 @@ class _LocalManagerState extends State { }, ), DButton.duplicate(enabled: _selectedItemPath.notNull), - DButton.apply(enabled: _selectedItemPath.notNull), + DButton.apply( + enabled: _selectedItemPath.notNull, + onTap: () { + var appliedId = + localSchemes.firstWhere((ele) => ele.path == _selectedItemPath).scheme.id!; + appliedId.sout(); + H().sp.updateString(SPKeys.appliedSchemeId, appliedId); + context.read().setProps(appliedSchemeId: appliedId); + }, + ), ] .map((e) => Padding( padding: const EdgeInsets.only(right: 4),