feat: use 'scheme' instead of 'solution'.
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
export 'local_schemes_web.dart' if (dart.library.io) 'local_schemes_linux.dart';
|
||||||
|
|
||||||
|
import 'package:dde_gesture_manager/models/scheme.dart';
|
||||||
|
|
||||||
|
abstract class LocalSchemeEntry {
|
||||||
|
Scheme scheme;
|
||||||
|
DateTime lastModifyTime;
|
||||||
|
String path;
|
||||||
|
|
||||||
|
LocalSchemeEntry({
|
||||||
|
required this.path,
|
||||||
|
required this.scheme,
|
||||||
|
required this.lastModifyTime,
|
||||||
|
});
|
||||||
|
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class LocalSchemesInterface<T extends LocalSchemeEntry> {
|
||||||
|
Future<List<T>> get schemeEntries;
|
||||||
|
}
|
||||||
+18
-18
@@ -2,61 +2,61 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:dde_gesture_manager/builder/provider_annotation.dart';
|
import 'package:dde_gesture_manager/builder/provider_annotation.dart';
|
||||||
import 'package:dde_gesture_manager/extensions.dart';
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
import 'package:dde_gesture_manager/models/solution.dart';
|
import 'package:dde_gesture_manager/models/scheme.dart';
|
||||||
import 'package:path/path.dart' show join;
|
import 'package:path/path.dart' show join;
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
import 'local_solutions.dart';
|
import 'local_schemes.dart';
|
||||||
|
|
||||||
export 'local_solutions.dart';
|
export 'local_schemes.dart';
|
||||||
|
|
||||||
@ProviderModel()
|
@ProviderModel()
|
||||||
class LocalSolutions implements LocalSolutionsInterface<LocalSolutionEntryLinux> {
|
class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryLinux> {
|
||||||
LocalSolutions() {
|
LocalSchemes() {
|
||||||
solutionEntries.then((value) => solutions = value);
|
schemeEntries.then((value) => schemes = value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<LocalSolutionEntryLinux>> get solutionEntries async {
|
Future<List<LocalSchemeEntryLinux>> get schemeEntries async {
|
||||||
var _supportDirectory = await getApplicationSupportDirectory();
|
var _supportDirectory = await getApplicationSupportDirectory();
|
||||||
var directory = Directory(join(_supportDirectory.path, 'solutions'));
|
var directory = Directory(join(_supportDirectory.path, 'schemes'));
|
||||||
if (!directory.existsSync()) directory.createSync();
|
if (!directory.existsSync()) directory.createSync();
|
||||||
directory.path.sout();
|
directory.path.sout();
|
||||||
return directory
|
return directory
|
||||||
.list()
|
.list()
|
||||||
.map<LocalSolutionEntryLinux?>((f) {
|
.map<LocalSchemeEntryLinux?>((f) {
|
||||||
LocalSolutionEntryLinux? entry;
|
LocalSchemeEntryLinux? entry;
|
||||||
try {
|
try {
|
||||||
var content = File(f.path).readAsStringSync();
|
var content = File(f.path).readAsStringSync();
|
||||||
entry = LocalSolutionEntryLinux(
|
entry = LocalSchemeEntryLinux(
|
||||||
path: f.path, solution: Solution.parse(content), lastModifyTime: f.statSync().modified);
|
path: f.path, scheme: Scheme.parse(content), lastModifyTime: f.statSync().modified);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
e.sout();
|
e.sout();
|
||||||
}
|
}
|
||||||
return entry;
|
return entry;
|
||||||
})
|
})
|
||||||
.where((e) => e != null)
|
.where((e) => e != null)
|
||||||
.cast<LocalSolutionEntryLinux>()
|
.cast<LocalSchemeEntryLinux>()
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ProviderModelProp()
|
@ProviderModelProp()
|
||||||
List<LocalSolutionEntry>? solutions;
|
List<LocalSchemeEntry>? schemes;
|
||||||
}
|
}
|
||||||
|
|
||||||
class LocalSolutionEntryLinux implements LocalSolutionEntry {
|
class LocalSchemeEntryLinux implements LocalSchemeEntry {
|
||||||
@override
|
@override
|
||||||
String path;
|
String path;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Solution solution;
|
Scheme scheme;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
DateTime lastModifyTime;
|
DateTime lastModifyTime;
|
||||||
|
|
||||||
LocalSolutionEntryLinux({
|
LocalSchemeEntryLinux({
|
||||||
required this.path,
|
required this.path,
|
||||||
required this.solution,
|
required this.scheme,
|
||||||
required this.lastModifyTime,
|
required this.lastModifyTime,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export 'local_schemes_web.provider.dart' if (dart.library.io) 'local_schemes_linux.provider.dart';
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:dde_gesture_manager/builder/provider_annotation.dart';
|
||||||
|
import 'package:dde_gesture_manager/models/scheme.dart';
|
||||||
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
|
import 'dart:html';
|
||||||
|
|
||||||
|
import 'local_schemes.dart';
|
||||||
|
export 'local_schemes.dart';
|
||||||
|
|
||||||
|
@ProviderModel()
|
||||||
|
class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryWeb> {
|
||||||
|
LocalSchemes() {
|
||||||
|
schemeEntries.then((value) => schemes = value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<LocalSchemeEntryWeb>> get schemeEntries async {
|
||||||
|
return window.localStorage.keys
|
||||||
|
.map<LocalSchemeEntryWeb?>((key) {
|
||||||
|
if (key.startsWith('schemes.')) {
|
||||||
|
LocalSchemeEntryWeb? entry;
|
||||||
|
try {
|
||||||
|
var content = window.localStorage[key] ?? '';
|
||||||
|
var schemeJson = json.decode(content);
|
||||||
|
entry = LocalSchemeEntryWeb(
|
||||||
|
path: key,
|
||||||
|
scheme: Scheme.parse(schemeJson),
|
||||||
|
lastModifyTime: DateTime.parse(schemeJson['modified_at']),
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
e.sout();
|
||||||
|
}
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.where((e) => e != null)
|
||||||
|
.cast<LocalSchemeEntryWeb>()
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ProviderModelProp()
|
||||||
|
List<LocalSchemeEntry>? schemes;
|
||||||
|
}
|
||||||
|
|
||||||
|
class LocalSchemeEntryWeb implements LocalSchemeEntry {
|
||||||
|
@override
|
||||||
|
String path;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Scheme scheme;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime lastModifyTime;
|
||||||
|
|
||||||
|
LocalSchemeEntryWeb({
|
||||||
|
required this.path,
|
||||||
|
required this.scheme,
|
||||||
|
required this.lastModifyTime,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
save() {
|
||||||
|
// TODO: implement save
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
export 'local_solutions_web.dart' if (dart.library.io) 'local_solutions_linux.dart';
|
|
||||||
|
|
||||||
import 'package:dde_gesture_manager/models/solution.dart';
|
|
||||||
|
|
||||||
abstract class LocalSolutionEntry {
|
|
||||||
Solution solution;
|
|
||||||
DateTime lastModifyTime;
|
|
||||||
String path;
|
|
||||||
|
|
||||||
LocalSolutionEntry({
|
|
||||||
required this.path,
|
|
||||||
required this.solution,
|
|
||||||
required this.lastModifyTime,
|
|
||||||
});
|
|
||||||
|
|
||||||
save();
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class LocalSolutionsInterface<T extends LocalSolutionEntry> {
|
|
||||||
Future<List<T>> get solutionEntries;
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export 'local_solutions_web.provider.dart' if (dart.library.io) 'local_solutions_linux.provider.dart';
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:dde_gesture_manager/builder/provider_annotation.dart';
|
|
||||||
import 'package:dde_gesture_manager/models/solution.dart';
|
|
||||||
import 'package:dde_gesture_manager/extensions.dart';
|
|
||||||
import 'dart:html';
|
|
||||||
|
|
||||||
import 'local_solutions.dart';
|
|
||||||
export 'local_solutions.dart';
|
|
||||||
|
|
||||||
@ProviderModel()
|
|
||||||
class LocalSolutions implements LocalSolutionsInterface<LocalSolutionEntryWeb> {
|
|
||||||
LocalSolutions() {
|
|
||||||
solutionEntries.then((value) => solutions = value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<List<LocalSolutionEntryWeb>> get solutionEntries async {
|
|
||||||
return window.localStorage.keys
|
|
||||||
.map<LocalSolutionEntryWeb?>((key) {
|
|
||||||
if (key.startsWith('solutions.')) {
|
|
||||||
LocalSolutionEntryWeb? entry;
|
|
||||||
try {
|
|
||||||
var content = window.localStorage[key] ?? '';
|
|
||||||
var solutionJson = json.decode(content);
|
|
||||||
entry = LocalSolutionEntryWeb(
|
|
||||||
path: key,
|
|
||||||
solution: Solution.parse(solutionJson),
|
|
||||||
lastModifyTime: DateTime.parse(solutionJson['modified_at']),
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
e.sout();
|
|
||||||
}
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.where((e) => e != null)
|
|
||||||
.cast<LocalSolutionEntryWeb>()
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ProviderModelProp()
|
|
||||||
List<LocalSolutionEntry>? solutions;
|
|
||||||
}
|
|
||||||
|
|
||||||
class LocalSolutionEntryWeb implements LocalSolutionEntry {
|
|
||||||
@override
|
|
||||||
String path;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Solution solution;
|
|
||||||
|
|
||||||
@override
|
|
||||||
DateTime lastModifyTime;
|
|
||||||
|
|
||||||
LocalSolutionEntryWeb({
|
|
||||||
required this.path,
|
|
||||||
required this.solution,
|
|
||||||
required this.lastModifyTime,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
|
||||||
save() {
|
|
||||||
// TODO: implement save
|
|
||||||
throw UnimplementedError();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,7 +4,7 @@ import 'package:dde_gesture_manager/builder/provider_annotation.dart';
|
|||||||
import 'package:dde_gesture_manager/utils/helper.dart';
|
import 'package:dde_gesture_manager/utils/helper.dart';
|
||||||
|
|
||||||
@ProviderModel(copyable: true)
|
@ProviderModel(copyable: true)
|
||||||
class Solution {
|
class Scheme {
|
||||||
@ProviderModelProp()
|
@ProviderModelProp()
|
||||||
String? name;
|
String? name;
|
||||||
|
|
||||||
@@ -14,12 +14,12 @@ class Solution {
|
|||||||
@ProviderModelProp()
|
@ProviderModelProp()
|
||||||
List<GestureProp>? gestures;
|
List<GestureProp>? gestures;
|
||||||
|
|
||||||
Solution.parse(solution) {
|
Scheme.parse(scheme) {
|
||||||
if (solution is String) solution = json.decode(solution);
|
if (scheme is String) scheme = json.decode(scheme);
|
||||||
assert(solution is Map);
|
assert(scheme is Map);
|
||||||
name = solution['name'];
|
name = scheme['name'];
|
||||||
description = solution['desc'];
|
description = scheme['desc'];
|
||||||
gestures = (solution['gestures'] as List? ?? []).map<GestureProp>((ele) => GestureProp.parse(ele)).toList();
|
gestures = (scheme['gestures'] as List? ?? []).map<GestureProp>((ele) => GestureProp.parse(ele)).toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'package:dde_gesture_manager/constants/constants.dart';
|
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/solution.dart';
|
import 'package:dde_gesture_manager/models/scheme.dart';
|
||||||
import 'package:dde_gesture_manager/models/solution.provider.dart';
|
import 'package:dde_gesture_manager/models/scheme.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';
|
||||||
import 'package:dde_gesture_manager/widgets/dde_data_table.dart';
|
import 'package:dde_gesture_manager/widgets/dde_data_table.dart';
|
||||||
@@ -50,7 +50,7 @@ class GestureEditor extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var layoutProvider = context.watch<ContentLayoutProvider>();
|
var layoutProvider = context.watch<ContentLayoutProvider>();
|
||||||
var solutionProvider = context.watch<SolutionProvider>();
|
var schemeProvider = context.watch<SchemeProvider>();
|
||||||
return Flexible(
|
return Flexible(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(10),
|
padding: const EdgeInsets.all(10),
|
||||||
@@ -140,7 +140,7 @@ class GestureEditor extends StatelessWidget {
|
|||||||
DDataColumn(label: Text(LocaleKeys.gesture_editor_command.tr())),
|
DDataColumn(label: Text(LocaleKeys.gesture_editor_command.tr())),
|
||||||
DDataColumn(label: Text(LocaleKeys.gesture_editor_remark.tr())),
|
DDataColumn(label: Text(LocaleKeys.gesture_editor_remark.tr())),
|
||||||
],
|
],
|
||||||
rows: _buildDataRow(solutionProvider.gestures, context),
|
rows: _buildDataRow(schemeProvider.gestures, context),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:dde_gesture_manager/extensions.dart';
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
import 'package:dde_gesture_manager/models/local_solutions_provider.dart';
|
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
|
||||||
import 'package:dde_gesture_manager/models/solution.provider.dart';
|
import 'package:dde_gesture_manager/models/scheme.provider.dart';
|
||||||
import 'package:dde_gesture_manager/pages/content.dart';
|
import 'package:dde_gesture_manager/pages/content.dart';
|
||||||
import 'package:dde_gesture_manager/pages/footer.dart';
|
import 'package:dde_gesture_manager/pages/footer.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -18,7 +18,7 @@ class _HomePageState extends State<HomePage> {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: MultiProvider(
|
body: MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
ChangeNotifierProvider(create: (context) => SolutionProvider.parse('''
|
ChangeNotifierProvider(create: (context) => SchemeProvider.parse('''
|
||||||
{
|
{
|
||||||
"name": "test",
|
"name": "test",
|
||||||
"desc": "some desc",
|
"desc": "some desc",
|
||||||
@@ -66,7 +66,7 @@ class _HomePageState extends State<HomePage> {
|
|||||||
}
|
}
|
||||||
''')),
|
''')),
|
||||||
ChangeNotifierProvider(create: (context) => GesturePropProvider.empty()),
|
ChangeNotifierProvider(create: (context) => GesturePropProvider.empty()),
|
||||||
ChangeNotifierProvider(create: (context) => LocalSolutionsProvider(),lazy: false),
|
ChangeNotifierProvider(create: (context) => LocalSchemesProvider(),lazy: false),
|
||||||
],
|
],
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'package:dde_gesture_manager/constants/constants.dart';
|
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/local_solutions_provider.dart';
|
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
|
||||||
import 'package:dde_gesture_manager/models/solution.provider.dart';
|
import 'package:dde_gesture_manager/models/scheme.provider.dart';
|
||||||
import 'package:dde_gesture_manager/widgets/dde_button.dart';
|
import 'package:dde_gesture_manager/widgets/dde_button.dart';
|
||||||
import 'package:flutter/animation.dart';
|
import 'package:flutter/animation.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
@@ -39,7 +39,7 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var isOpen = context.watch<ContentLayoutProvider>().localManagerOpened == true;
|
var isOpen = context.watch<ContentLayoutProvider>().localManagerOpened == true;
|
||||||
var localSolutions = context.watch<LocalSolutionsProvider>().solutions ?? [];
|
var localschemes = context.watch<LocalSchemesProvider>().schemes ?? [];
|
||||||
return AnimatedContainer(
|
return AnimatedContainer(
|
||||||
duration: mediumDuration,
|
duration: mediumDuration,
|
||||||
curve: Curves.easeInOut,
|
curve: Curves.easeInOut,
|
||||||
@@ -91,7 +91,7 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
controller: _scrollController,
|
controller: _scrollController,
|
||||||
itemBuilder: (context, index) => GestureDetector(
|
itemBuilder: (context, index) => GestureDetector(
|
||||||
onDoubleTap: () {
|
onDoubleTap: () {
|
||||||
context.read<SolutionProvider>().copyFrom(localSolutions[index].solution);
|
context.read<SchemeProvider>().copyFrom(localschemes[index].scheme);
|
||||||
setState(() {
|
setState(() {
|
||||||
_selectedIndex = index;
|
_selectedIndex = index;
|
||||||
});
|
});
|
||||||
@@ -115,7 +115,7 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
Text(localSolutions[index].solution.name ?? ''),
|
Text(localschemes[index].scheme.name ?? ''),
|
||||||
Text('456'),
|
Text('456'),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -123,7 +123,7 @@ class _LocalManagerState extends State<LocalManager> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
itemCount: localSolutions.length,
|
itemCount: localschemes.length,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
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/solution.dart';
|
import 'package:dde_gesture_manager/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:dde_gesture_manager/constants/constants.dart';
|
import 'package:dde_gesture_manager/constants/constants.dart';
|
||||||
|
|||||||
@@ -20,13 +20,13 @@
|
|||||||
"tip": "Display help documentation"
|
"tip": "Display help documentation"
|
||||||
},
|
},
|
||||||
"market": {
|
"market": {
|
||||||
"title": "Solution market"
|
"title": "Scheme market"
|
||||||
},
|
},
|
||||||
"local_manager": {
|
"local_manager": {
|
||||||
"title": "Local solution management"
|
"title": "Local scheme management"
|
||||||
},
|
},
|
||||||
"gesture_editor": {
|
"gesture_editor": {
|
||||||
"label": "Gesture program editing",
|
"label": "Gesture scheme editing",
|
||||||
"gesture": "gesture",
|
"gesture": "gesture",
|
||||||
"direction": "direction",
|
"direction": "direction",
|
||||||
"fingers": "fingers",
|
"fingers": "fingers",
|
||||||
|
|||||||
Reference in New Issue
Block a user