Skip to content

Commit 930ace2

Browse files
committed
Refactor: Project Structure
Now there's 2 class for the structure: 1. CCSolution -> Contains all projects in a solution 2. CCProject -> Contains single folder and informations
1 parent 3beebeb commit 930ace2

File tree

6 files changed

+26
-54
lines changed

6 files changed

+26
-54
lines changed

.dart_tool/flutter_build/d597dfd426be599fabadadc65daa0177/.filecache

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Binary file not shown.

.flutter-plugins-dependencies

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_ios","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_ios-2.0.7\\\\","dependencies":[]},{"name":"permission_handler","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-8.3.0\\\\","dependencies":[]},{"name":"shared_preferences_ios","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_ios-2.0.8\\\\","dependencies":[]},{"name":"url_launcher","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-6.0.15\\\\","dependencies":[]}],"android":[{"name":"path_provider_android","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_android-2.0.9\\\\","dependencies":[]},{"name":"permission_handler","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-8.3.0\\\\","dependencies":[]},{"name":"shared_preferences_android","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_android-2.0.9\\\\","dependencies":[]},{"name":"url_launcher","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-6.0.15\\\\","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_macos-2.0.3\\\\","dependencies":[]},{"name":"shared_preferences_macos","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_macos-2.0.2\\\\","dependencies":[]},{"name":"url_launcher_macos","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_macos-2.0.2\\\\","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_linux-2.1.2\\\\","dependencies":[]},{"name":"shared_preferences_linux","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_linux-2.0.3\\\\","dependencies":["path_provider_linux"]},{"name":"url_launcher_linux","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_linux-2.0.2\\\\","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_windows-2.0.4\\\\","dependencies":[]},{"name":"shared_preferences_windows","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_windows-2.0.3\\\\","dependencies":["path_provider_windows"]},{"name":"url_launcher_windows","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_windows-2.0.2\\\\","dependencies":[]}],"web":[{"name":"shared_preferences_web","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_web-2.0.2\\\\","dependencies":[]},{"name":"url_launcher_web","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_web-2.0.4\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_ios","path_provider_linux","path_provider_macos","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_ios","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_ios","shared_preferences_linux","shared_preferences_macos","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_ios","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"url_launcher","dependencies":["url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2021-12-03 10:17:28.579369","version":"2.5.3"}
1+
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_ios","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_ios-2.0.7\\\\","dependencies":[]},{"name":"permission_handler","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-8.3.0\\\\","dependencies":[]},{"name":"shared_preferences_ios","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_ios-2.0.8\\\\","dependencies":[]},{"name":"url_launcher","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-6.0.15\\\\","dependencies":[]}],"android":[{"name":"path_provider_android","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_android-2.0.9\\\\","dependencies":[]},{"name":"permission_handler","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler-8.3.0\\\\","dependencies":[]},{"name":"shared_preferences_android","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_android-2.0.9\\\\","dependencies":[]},{"name":"url_launcher","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-6.0.15\\\\","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_macos-2.0.3\\\\","dependencies":[]},{"name":"shared_preferences_macos","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_macos-2.0.2\\\\","dependencies":[]},{"name":"url_launcher_macos","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_macos-2.0.2\\\\","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_linux-2.1.2\\\\","dependencies":[]},{"name":"shared_preferences_linux","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_linux-2.0.3\\\\","dependencies":["path_provider_linux"]},{"name":"url_launcher_linux","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_linux-2.0.2\\\\","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_windows-2.0.4\\\\","dependencies":[]},{"name":"shared_preferences_windows","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_windows-2.0.3\\\\","dependencies":["path_provider_windows"]},{"name":"url_launcher_windows","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_windows-2.0.2\\\\","dependencies":[]}],"web":[{"name":"shared_preferences_web","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\shared_preferences_web-2.0.2\\\\","dependencies":[]},{"name":"url_launcher_web","path":"D:\\\\Programming\\\\Flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_web-2.0.4\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_ios","path_provider_linux","path_provider_macos","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_ios","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_ios","shared_preferences_linux","shared_preferences_macos","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_ios","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"url_launcher","dependencies":["url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2021-12-04 09:36:27.816108","version":"2.5.3"}

lib/editor.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import 'package:flutter/material.dart';
1212
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
1313
import 'package:path/path.dart' as path;
1414
import 'package:url_launcher/url_launcher.dart';
15-
15+
import 'cc_project_structure.dart';
1616
import 'filebrowser/models/document.dart';
1717
import 'main.dart';
1818

@@ -26,7 +26,7 @@ class EditorPage extends StatefulWidget {
2626
}
2727

2828
class _EditorPageState extends State<EditorPage> {
29-
late CCProject project;
29+
late CCSolution project;
3030
List<Document> documentList = [];
3131
List<TabData> tabs = [];
3232

@@ -165,7 +165,7 @@ class _EditorPageState extends State<EditorPage> {
165165
Widget build(BuildContext context) {
166166
// TreeViewController _treeViewController =
167167
// TreeViewController(children: fileBrowserNodes);
168-
project = ModalRoute.of(context)!.settings.arguments as CCProject;
168+
project = ModalRoute.of(context)!.settings.arguments as CCSolution;
169169
if (documentList.isEmpty) {
170170
// Populate the file browser tree once
171171
initializeTreeView();

lib/editor_drawer.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart';
22
import 'package:flutter/material.dart';
33
import 'package:provider/provider.dart';
44

5+
import 'cc_project_structure.dart';
56
import 'filebrowser/models/document.dart';
67
import 'filebrowser/widgets/directory_widget.dart';
78
import 'filebrowser/widgets/file_widget.dart';
@@ -26,7 +27,7 @@ class DrawerStateInfo with ChangeNotifier {
2627
class MyDrawer extends StatelessWidget {
2728
MyDrawer(this.documentList, this.project, this.onFileTap);
2829

29-
CCProject project;
30+
CCSolution project;
3031
List<Document> documentList = [];
3132
void Function(String filepath) onFileTap;
3233

lib/main.dart

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,29 @@ import 'package:provider/single_child_widget.dart';
1212
import 'package:shared_preferences/shared_preferences.dart';
1313
import 'package:url_launcher/url_launcher.dart';
1414

15+
import 'cc_project_structure.dart';
1516
import 'editor_drawer.dart';
1617

1718
void main() {
1819
runApp(MyApp());
1920
}
2021

21-
class CCProject {
22-
final String name, desc, author, identifier, slnPath, slnFolderPath;
23-
late Image image;
24-
Map<String, String> folders = {};
25-
26-
CCProject(this.name, this.desc, this.author, this.identifier, this.slnPath,
27-
this.slnFolderPath);
28-
29-
void load(BuildContext context, ModulesManager modulesManager) {
30-
/// Load the project
31-
var template = modulesManager.getTemplateByIdentifier(identifier);
32-
if (template != null) {
33-
image = template.icon;
34-
}
35-
Navigator.pushNamed(context, EditorPage.routeName, arguments: this);
22+
void loadSolution(CCSolution solution, BuildContext context, ModulesManager modulesManager) {
23+
/// Load the project
24+
var template = modulesManager.getTemplateByIdentifier(solution.identifier);
25+
if (template != null) {
26+
solution.image = template.icon;
3627
}
28+
Navigator.pushNamed(context, EditorPage.routeName, arguments: solution);
3729
}
3830

3931
class RecentProjectsManager {
40-
List<CCProject> projects = List.empty(growable: true);
41-
var decoder = JsonDecoder();
32+
List<CCSolution> projects = List.empty(growable: true);
4233

4334
/// Commit the recent projects to the pref
4435
Future<void> commit(Future<SharedPreferences> _pref) async {
4536
List<String> list = List.empty(growable: true);
46-
for (CCProject p in projects) {
37+
for (CCSolution p in projects) {
4738
list.add(p.slnPath);
4839
}
4940
(await _pref).setStringList("recentProjectsSln", list).then((bool success) {
@@ -52,30 +43,10 @@ class RecentProjectsManager {
5243
}
5344

5445
/// Add a solution file to the list
55-
Future<CCProject?> addProject(String slnPath) async {
56-
var file = File(slnPath);
57-
if (await file.exists()) {
58-
String input = await file.readAsString();
59-
var obj = decoder.convert(input);
60-
try {
61-
var result = CCProject(obj["name"], obj["description"] ?? "",
62-
obj["author"], obj["identifier"], slnPath, file.parent.path);
63-
64-
/// Add the solution project folders
65-
var folders = (obj["folders"] as Map);
66-
for (var key in folders.keys) {
67-
result.folders[key] = folders[key];
68-
}
69-
70-
projects.add(result);
71-
return result;
72-
} on Exception catch (e) {
73-
debugPrint("Error: project is corrupted: $slnPath");
74-
return null;
75-
}
76-
} else {
77-
debugPrint("Error: project can't be found: $slnPath");
78-
return null;
46+
Future<CCSolution?> addSolution(String slnPath) async {
47+
var sln = await CCSolution.loadFromFile(slnPath);
48+
if(sln != null) {
49+
projects.add(sln);
7950
}
8051
}
8152
}
@@ -187,13 +158,13 @@ class _HomePageState extends State<HomePage> {
187158
var slnPath = await t.onCreated(values); //TODO: This is prone to error (not checking if the file existed first)
188159

189160
/// Add it to recent projects
190-
CCProject? project =
191-
await rpm.addProject(slnPath);
161+
CCSolution? project =
162+
await rpm.addSolution(slnPath);
192163
if (project != null) {
193164
await rpm.commit(_pref);
194165
Navigator.pop(context, 3);
195166
refreshRecentProjects();
196-
project.load(context, mm);
167+
loadSolution(project, context, mm);
197168
}
198169
},
199170
)
@@ -261,7 +232,7 @@ class _HomePageState extends State<HomePage> {
261232
var pref = await _pref;
262233
// Read recent projects list
263234
for (var sln in pref.getStringList("recentProjectsSln") ?? []) {
264-
await rpm.addProject(sln);
235+
await rpm.addSolution(sln);
265236
debugPrint(sln);
266237
}
267238
debugPrint("DONE");
@@ -298,15 +269,15 @@ class _HomePageState extends State<HomePage> {
298269
void refreshRecentProjects() {
299270
setState(() {
300271
projectsWidgets.clear();
301-
for (CCProject p in rpm.projects) {
272+
for (CCSolution p in rpm.projects) {
302273
debugPrint(p.name);
303274
projectsWidgets.add(Container(
304275
constraints:
305276
const BoxConstraints(minWidth: 128.0, minHeight: 128.0),
306277
padding: const EdgeInsets.all(4.0),
307278
child: ElevatedButton(
308279
onPressed: () {
309-
p.load(context, mm);
280+
loadSolution(p,context, mm);
310281
},
311282
child: Text(p.name))));
312283
}

0 commit comments

Comments
 (0)