feat: scheme download feature.

dev
DebuggerX 3 years ago
parent 44b5df3d24
commit a124f765cc

@ -123,7 +123,7 @@
# RoadMap # RoadMap
- [ ] 方案下载功能实现 - [x] 方案下载功能实现
- [ ] 方案应用功能实现 - [ ] 方案应用功能实现
- [ ] BugFix - [ ] BugFix
- [ ] MD 编辑器中的UI文本国际化 - [ ] MD 编辑器中的UI文本国际化

@ -54,7 +54,7 @@ class _ContentState extends State<Content> {
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
LocalManager(), LocalManager(key: H.localManagerKey),
GestureEditor(), GestureEditor(),
MarketOrMe(), MarketOrMe(),
], ],

@ -9,6 +9,7 @@ import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:dde_gesture_manager/models/scheme.provider.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart';
import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/models/settings.provider.dart';
import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart';
import 'package:dde_gesture_manager_api/models.dart' show SchemeForDownload;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
@ -19,10 +20,10 @@ class LocalManager extends StatefulWidget {
}) : super(key: key); }) : super(key: key);
@override @override
State<LocalManager> createState() => _LocalManagerState(); State<LocalManager> createState() => LocalManagerState();
} }
class _LocalManagerState extends State<LocalManager> { class LocalManagerState extends State<LocalManager> {
late ScrollController _scrollController; late ScrollController _scrollController;
String? _hoveringItemPath; String? _hoveringItemPath;
late String _selectedItemPath; late String _selectedItemPath;
@ -69,6 +70,27 @@ class _LocalManagerState extends State<LocalManager> {
context.read<GesturePropProvider>().copyFrom(GestureProp.empty()); context.read<GesturePropProvider>().copyFrom(GestureProp.empty());
} }
Future addLocalScheme(BuildContext context, [SchemeForDownload? downloadedScheme = null]) async {
var localSchemesProvider = context.read<LocalSchemesProvider>();
var newSchemes = [...?localSchemesProvider.schemes];
var newEntry = await localSchemesProvider.create();
if (downloadedScheme != null) {
newEntry.scheme
..id = downloadedScheme.uuid
..name = downloadedScheme.name
..description = downloadedScheme.description
..uploaded = true
..fromMarket = true
..gestures = (downloadedScheme.gestures ?? []).map(GestureProp.parse).toList();
}
newSchemes.add(newEntry);
localSchemesProvider.setProps(schemes: newSchemes..sort());
setState(() {
_selectedItemPath = newEntry.path;
});
_handleItemClick(context, newEntry);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var isOpen = context.watch<ContentLayoutProvider>().localManagerOpened == true; var isOpen = context.watch<ContentLayoutProvider>().localManagerOpened == true;
@ -192,15 +214,7 @@ class _LocalManagerState extends State<LocalManager> {
DButton.add( DButton.add(
enabled: true, enabled: true,
onTap: () async { onTap: () async {
var localSchemesProvider = context.read<LocalSchemesProvider>(); await addLocalScheme(context);
var newSchemes = [...?localSchemesProvider.schemes];
var newEntry = await localSchemesProvider.create();
newSchemes.add(newEntry);
localSchemesProvider.setProps(schemes: newSchemes..sort());
setState(() {
_selectedItemPath = newEntry.path;
});
_handleItemClick(context, newEntry);
}, },
), ),
DButton.delete( DButton.delete(

@ -2,6 +2,8 @@ import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart';
import 'package:dde_gesture_manager/models/scheme.dart'; import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:dde_gesture_manager/pages/local_manager.dart';
import 'package:dde_gesture_manager_api/src/models/scheme.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
@ -37,6 +39,8 @@ class H {
DateTime? lastCheckAuthStatusTime; DateTime? lastCheckAuthStatusTime;
static final localManagerKey = GlobalKey<LocalManagerState>();
initTopContext(BuildContext context) { initTopContext(BuildContext context) {
_topContext = context; _topContext = context;
} }
@ -123,6 +127,9 @@ class H {
throw 'Could not launch $url'; throw 'Could not launch $url';
} }
} }
static void handleDownloadScheme(BuildContext context, SchemeForDownload value) =>
localManagerKey.currentState?.addLocalScheme(context, value);
} }
class PreferredPanelsStatus { class PreferredPanelsStatus {

@ -24,7 +24,7 @@ class DButton extends StatefulWidget {
factory DButton.add({ factory DButton.add({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,
@ -41,7 +41,7 @@ class DButton extends StatefulWidget {
factory DButton.delete({ factory DButton.delete({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,
@ -58,7 +58,7 @@ class DButton extends StatefulWidget {
factory DButton.apply({ factory DButton.apply({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,
@ -75,7 +75,7 @@ class DButton extends StatefulWidget {
factory DButton.duplicate({ factory DButton.duplicate({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,
@ -92,7 +92,7 @@ class DButton extends StatefulWidget {
factory DButton.paste({ factory DButton.paste({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,
@ -109,7 +109,7 @@ class DButton extends StatefulWidget {
factory DButton.logout({ factory DButton.logout({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight, height = defaultButtonHeight,
width = defaultButtonHeight, width = defaultButtonHeight,
@ -126,7 +126,7 @@ class DButton extends StatefulWidget {
factory DButton.upload({ factory DButton.upload({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight, height = defaultButtonHeight,
width = defaultButtonHeight, width = defaultButtonHeight,
@ -143,7 +143,7 @@ class DButton extends StatefulWidget {
factory DButton.download({ factory DButton.download({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,
@ -160,7 +160,7 @@ class DButton extends StatefulWidget {
factory DButton.share({ factory DButton.share({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,
@ -177,7 +177,7 @@ class DButton extends StatefulWidget {
factory DButton.like({ factory DButton.like({
Key? key, Key? key,
required enabled, required bool enabled,
GestureTapCallback? onTap, GestureTapCallback? onTap,
height = defaultButtonHeight * .7, height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7, width = defaultButtonHeight * .7,

@ -3,6 +3,7 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:dde_gesture_manager/constants/constants.dart'; import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/http/api.dart'; import 'package:dde_gesture_manager/http/api.dart';
import 'package:dde_gesture_manager/models/configs.provider.dart'; import 'package:dde_gesture_manager/models/configs.provider.dart';
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/models/settings.provider.dart';
import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/utils/helper.dart';
import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart';
@ -281,14 +282,15 @@ class _MarketWidgetState extends State<MarketWidget> {
}, },
), ),
DButton.download( DButton.download(
enabled: true, enabled: (context.watch<LocalSchemesProvider>().schemes ?? []).every((e) => e.scheme.id != _selected),
onTap: () { onTap: () {
Api.downloadScheme(schemeId: currentSelectedScheme!.uuid!).then((value) { Api.downloadScheme(schemeId: currentSelectedScheme!.uuid!).then((value) {
/// todo: if (value != null) {
value.sout(); H.handleDownloadScheme(context, value);
setState(() { setState(() {
currentSelectedScheme.downloads = currentSelectedScheme.downloads! + 1; currentSelectedScheme.downloads = currentSelectedScheme.downloads! + 1;
}); });
}
}); });
}, },
), ),

@ -5,6 +5,7 @@ import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/http/api.dart'; import 'package:dde_gesture_manager/http/api.dart';
import 'package:dde_gesture_manager/models/configs.provider.dart'; import 'package:dde_gesture_manager/models/configs.provider.dart';
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
import 'package:dde_gesture_manager/models/scheme_list_refresh_key.provider.dart'; import 'package:dde_gesture_manager/models/scheme_list_refresh_key.provider.dart';
import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/models/settings.provider.dart';
import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/utils/helper.dart';
@ -294,14 +295,15 @@ class _MeWidgetState extends State<MeWidget> {
}, },
), ),
DButton.download( DButton.download(
enabled: true, enabled: (context.watch<LocalSchemesProvider>().schemes ?? []).every((e) => e.scheme.id != _selected),
onTap: () { onTap: () {
Api.downloadScheme(schemeId: currentSelectedScheme!.uuid!).then((value) { Api.downloadScheme(schemeId: currentSelectedScheme!.uuid!).then((value) {
/// todo: if (value != null) {
value.sout(); H.handleDownloadScheme(context, value);
context context
.read<SchemeListRefreshKeyProvider>() .read<SchemeListRefreshKeyProvider>()
.setProps(refreshKey: DateTime.now().millisecondsSinceEpoch); .setProps(refreshKey: DateTime.now().millisecondsSinceEpoch);
}
}); });
}, },
), ),

Loading…
Cancel
Save