feat: scheme download feature.

dev
DebuggerX 3 years ago
parent 44b5df3d24
commit a124f765cc

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

@ -54,7 +54,7 @@ class _ContentState extends State<Content> {
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
LocalManager(),
LocalManager(key: H.localManagerKey),
GestureEditor(),
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/settings.provider.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/material.dart';
import 'package:uuid/uuid.dart';
@ -19,10 +20,10 @@ class LocalManager extends StatefulWidget {
}) : super(key: key);
@override
State<LocalManager> createState() => _LocalManagerState();
State<LocalManager> createState() => LocalManagerState();
}
class _LocalManagerState extends State<LocalManager> {
class LocalManagerState extends State<LocalManager> {
late ScrollController _scrollController;
String? _hoveringItemPath;
late String _selectedItemPath;
@ -69,6 +70,27 @@ class _LocalManagerState extends State<LocalManager> {
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
Widget build(BuildContext context) {
var isOpen = context.watch<ContentLayoutProvider>().localManagerOpened == true;
@ -192,15 +214,7 @@ class _LocalManagerState extends State<LocalManager> {
DButton.add(
enabled: true,
onTap: () async {
var localSchemesProvider = context.read<LocalSchemesProvider>();
var newSchemes = [...?localSchemesProvider.schemes];
var newEntry = await localSchemesProvider.create();
newSchemes.add(newEntry);
localSchemesProvider.setProps(schemes: newSchemes..sort());
setState(() {
_selectedItemPath = newEntry.path;
});
_handleItemClick(context, newEntry);
await addLocalScheme(context);
},
),
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/models/content_layout.provider.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:shared_preferences/shared_preferences.dart';
import 'package:url_launcher/url_launcher.dart';
@ -37,6 +39,8 @@ class H {
DateTime? lastCheckAuthStatusTime;
static final localManagerKey = GlobalKey<LocalManagerState>();
initTopContext(BuildContext context) {
_topContext = context;
}
@ -123,6 +127,9 @@ class H {
throw 'Could not launch $url';
}
}
static void handleDownloadScheme(BuildContext context, SchemeForDownload value) =>
localManagerKey.currentState?.addLocalScheme(context, value);
}
class PreferredPanelsStatus {

@ -24,7 +24,7 @@ class DButton extends StatefulWidget {
factory DButton.add({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7,
@ -41,7 +41,7 @@ class DButton extends StatefulWidget {
factory DButton.delete({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7,
@ -58,7 +58,7 @@ class DButton extends StatefulWidget {
factory DButton.apply({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7,
@ -75,7 +75,7 @@ class DButton extends StatefulWidget {
factory DButton.duplicate({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7,
@ -92,7 +92,7 @@ class DButton extends StatefulWidget {
factory DButton.paste({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7,
@ -109,7 +109,7 @@ class DButton extends StatefulWidget {
factory DButton.logout({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight,
width = defaultButtonHeight,
@ -126,7 +126,7 @@ class DButton extends StatefulWidget {
factory DButton.upload({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight,
width = defaultButtonHeight,
@ -143,7 +143,7 @@ class DButton extends StatefulWidget {
factory DButton.download({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7,
@ -160,7 +160,7 @@ class DButton extends StatefulWidget {
factory DButton.share({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = defaultButtonHeight * .7,
width = defaultButtonHeight * .7,
@ -177,7 +177,7 @@ class DButton extends StatefulWidget {
factory DButton.like({
Key? key,
required enabled,
required bool enabled,
GestureTapCallback? onTap,
height = 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/http/api.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/utils/helper.dart';
import 'package:dde_gesture_manager/widgets/dde_button.dart';
@ -281,14 +282,15 @@ class _MarketWidgetState extends State<MarketWidget> {
},
),
DButton.download(
enabled: true,
enabled: (context.watch<LocalSchemesProvider>().schemes ?? []).every((e) => e.scheme.id != _selected),
onTap: () {
Api.downloadScheme(schemeId: currentSelectedScheme!.uuid!).then((value) {
/// todo:
value.sout();
if (value != null) {
H.handleDownloadScheme(context, value);
setState(() {
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/http/api.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/settings.provider.dart';
import 'package:dde_gesture_manager/utils/helper.dart';
@ -294,14 +295,15 @@ class _MeWidgetState extends State<MeWidget> {
},
),
DButton.download(
enabled: true,
enabled: (context.watch<LocalSchemesProvider>().schemes ?? []).every((e) => e.scheme.id != _selected),
onTap: () {
Api.downloadScheme(schemeId: currentSelectedScheme!.uuid!).then((value) {
/// todo:
value.sout();
if (value != null) {
H.handleDownloadScheme(context, value);
context
.read<SchemeListRefreshKeyProvider>()
.setProps(refreshKey: DateTime.now().millisecondsSinceEpoch);
}
});
},
),

Loading…
Cancel
Save