feat: scheme download feature.
This commit is contained in:
@@ -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();
|
||||
setState(() {
|
||||
currentSelectedScheme.downloads = currentSelectedScheme.downloads! + 1;
|
||||
});
|
||||
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();
|
||||
context
|
||||
.read<SchemeListRefreshKeyProvider>()
|
||||
.setProps(refreshKey: DateTime.now().millisecondsSinceEpoch);
|
||||
if (value != null) {
|
||||
H.handleDownloadScheme(context, value);
|
||||
context
|
||||
.read<SchemeListRefreshKeyProvider>()
|
||||
.setProps(refreshKey: DateTime.now().millisecondsSinceEpoch);
|
||||
}
|
||||
});
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user