added proper editor buttons to prj card, APP BROKEN HERE.
This commit is contained in:
@@ -7,6 +7,7 @@ import "package:provider/provider.dart";
|
|||||||
import "package:prod/models/globalModel.dart";
|
import "package:prod/models/globalModel.dart";
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
// DEAL WITH NULLS IN EDITOR LIST AND PROJECT's EDITOR LIST. SWITCH TO HIDDEN NONE EDITOR WITH "" AS ID.
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class GlobalModel extends ChangeNotifier {
|
|||||||
late List<bool> hoverShow;
|
late List<bool> hoverShow;
|
||||||
late List<Editor> editors;
|
late List<Editor> editors;
|
||||||
late SharedPreferences prefs;
|
late SharedPreferences prefs;
|
||||||
|
late Map<String, int> id2EdtMap;
|
||||||
bool importedData = false;
|
bool importedData = false;
|
||||||
bool edited = false;
|
bool edited = false;
|
||||||
|
|
||||||
@@ -22,13 +23,17 @@ class GlobalModel extends ChangeNotifier {
|
|||||||
String edtData = prefs.getString(kEditorsKey)!;
|
String edtData = prefs.getString(kEditorsKey)!;
|
||||||
List<dynamic> data = jsonDecode(edtData);
|
List<dynamic> data = jsonDecode(edtData);
|
||||||
editors = [];
|
editors = [];
|
||||||
for (var d in data) {
|
id2EdtMap = {};
|
||||||
editors.add(Editor.fromJson(d));
|
for (var (i, d) in data.indexed) {
|
||||||
|
var localEdt = Editor.fromJson(d);
|
||||||
|
editors.add(localEdt);
|
||||||
|
id2EdtMap[localEdt.id] = i;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
editors = [];
|
editors = [];
|
||||||
prefs.setString(kEditorsKey, jsonEncode(editors));
|
prefs.setString(kEditorsKey, jsonEncode(editors));
|
||||||
}
|
}
|
||||||
|
print(id2EdtMap);
|
||||||
|
|
||||||
if (prefs.containsKey(kProjectsKey)) {
|
if (prefs.containsKey(kProjectsKey)) {
|
||||||
String prjData = prefs.getString(kProjectsKey)!;
|
String prjData = prefs.getString(kProjectsKey)!;
|
||||||
@@ -60,6 +65,8 @@ class GlobalModel extends ChangeNotifier {
|
|||||||
prefs.setString(kEditorsKey, jsonEncode(arst));
|
prefs.setString(kEditorsKey, jsonEncode(arst));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Project management
|
||||||
|
|
||||||
void addPrj(Project prj) {
|
void addPrj(Project prj) {
|
||||||
projects.add(prj);
|
projects.add(prj);
|
||||||
hoverShow.add(false);
|
hoverShow.add(false);
|
||||||
@@ -97,6 +104,7 @@ class GlobalModel extends ChangeNotifier {
|
|||||||
|
|
||||||
void updatePrj(int index, Project prj) {
|
void updatePrj(int index, Project prj) {
|
||||||
projects[index] = prj;
|
projects[index] = prj;
|
||||||
|
saveProjectState();
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +130,10 @@ class GlobalModel extends ChangeNotifier {
|
|||||||
return editors[index];
|
return editors[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int? getFromID(String? id) {
|
||||||
|
return id2EdtMap[id];
|
||||||
|
}
|
||||||
|
|
||||||
// Editing controller
|
// Editing controller
|
||||||
|
|
||||||
bool get isEdited {
|
bool get isEdited {
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ import "dart:io";
|
|||||||
import "package:path/path.dart" as p;
|
import "package:path/path.dart" as p;
|
||||||
|
|
||||||
class Project {
|
class Project {
|
||||||
final String name;
|
String name;
|
||||||
final String language;
|
String language;
|
||||||
final File path;
|
File path;
|
||||||
final String? e0;
|
String? e0;
|
||||||
final String? e1;
|
String? e1;
|
||||||
final String? e2;
|
String? e2;
|
||||||
final String? e3;
|
String? e3;
|
||||||
final bool isGit;
|
bool isGit;
|
||||||
|
|
||||||
Project(
|
Project(
|
||||||
this.name,
|
this.name,
|
||||||
@@ -76,6 +76,40 @@ class Project {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String? getEditor(enumb) {
|
||||||
|
switch (enumb) {
|
||||||
|
case 0:
|
||||||
|
return e0;
|
||||||
|
case 1:
|
||||||
|
return e1;
|
||||||
|
case 2:
|
||||||
|
return e2;
|
||||||
|
case 3:
|
||||||
|
return e3;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setEditor(int enumb, String? edt) {
|
||||||
|
switch (enumb) {
|
||||||
|
case 0:
|
||||||
|
e0 = edt;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
e1 = edt;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
e2 = edt;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
e3 = edt;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// bool validatePath(){
|
// bool validatePath(){
|
||||||
// return File
|
// return File
|
||||||
// }
|
// }
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ class ManageProject extends StatelessWidget {
|
|||||||
textAlign: .center,
|
textAlign: .center,
|
||||||
// onEditingComplete: () => gm.updateEdited(true),
|
// onEditingComplete: () => gm.updateEdited(true),
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
|
labelText: "Path",
|
||||||
border: .none,
|
border: .none,
|
||||||
// enabledBorder: .none,
|
// enabledBorder: .none,
|
||||||
fillColor: Colors.transparent,
|
fillColor: Colors.transparent,
|
||||||
@@ -72,6 +73,7 @@ class ManageProject extends StatelessWidget {
|
|||||||
textAlign: .center,
|
textAlign: .center,
|
||||||
// onEditingComplete: () => gm.updateEdited(true),
|
// onEditingComplete: () => gm.updateEdited(true),
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
|
labelText: "Language",
|
||||||
border: .none,
|
border: .none,
|
||||||
enabledBorder: .none,
|
enabledBorder: .none,
|
||||||
fillColor: Colors.transparent,
|
fillColor: Colors.transparent,
|
||||||
@@ -83,10 +85,10 @@ class ManageProject extends StatelessWidget {
|
|||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: .spaceEvenly,
|
mainAxisAlignment: .spaceEvenly,
|
||||||
children: [
|
children: [
|
||||||
EditorSelector(0),
|
EditorSelector(0, id),
|
||||||
EditorSelector(1),
|
EditorSelector(1, id),
|
||||||
EditorSelector(2),
|
EditorSelector(2, id),
|
||||||
EditorSelector(3),
|
EditorSelector(3, id),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,37 +1,47 @@
|
|||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:prod/models/editor.dart";
|
import "package:prod/models/editor.dart";
|
||||||
import "package:prod/models/globalModel.dart";
|
import "package:prod/models/globalModel.dart";
|
||||||
|
import "package:prod/models/project.dart";
|
||||||
import "package:provider/provider.dart";
|
import "package:provider/provider.dart";
|
||||||
import "package:yaru/yaru.dart";
|
import "package:yaru/yaru.dart";
|
||||||
|
|
||||||
class EditorSelector extends StatelessWidget {
|
class EditorSelector extends StatelessWidget {
|
||||||
const EditorSelector(this.turns, {super.key});
|
const EditorSelector(this.turns, this.id, {super.key});
|
||||||
|
final int id;
|
||||||
final int turns;
|
final int turns;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Row(
|
GlobalModel gm = Provider.of<GlobalModel>(context);
|
||||||
children: [
|
Project prj = gm.nthPrj(id);
|
||||||
RotatedBox(
|
return DropdownMenu(
|
||||||
|
enableSearch: true,
|
||||||
|
enableFilter: true,
|
||||||
|
initialSelection: prj.getEditor(turns),
|
||||||
|
leadingIcon: RotatedBox(
|
||||||
child: Icon(Icons.rounded_corner_rounded),
|
child: Icon(Icons.rounded_corner_rounded),
|
||||||
quarterTurns: this.turns,
|
quarterTurns: turns,
|
||||||
),
|
),
|
||||||
YaruPopupMenuButton<Editor>(
|
|
||||||
child: Text("Nullie"),
|
|
||||||
onSelected: (a) {
|
onSelected: (a) {
|
||||||
Provider.of<GlobalModel>(context, listen: false);
|
|
||||||
print("$a");
|
print("$a");
|
||||||
|
prj.setEditor(turns, a);
|
||||||
|
gm.updatePrj(id, prj);
|
||||||
},
|
},
|
||||||
itemBuilder: (context) {
|
|
||||||
return Provider.of<GlobalModel>(
|
dropdownMenuEntries: Provider.of<GlobalModel>(context).editors.map((a) {
|
||||||
context,
|
return DropdownMenuEntry(
|
||||||
listen: false,
|
label: a.name,
|
||||||
).editors.map((a) {
|
labelWidget: Column(
|
||||||
return PopupMenuItem<Editor>(value: a, child: Text("${a.name}"));
|
crossAxisAlignment: .start,
|
||||||
}).toList();
|
mainAxisAlignment: .center,
|
||||||
},
|
children: [
|
||||||
),
|
Text("${a.name}", style: TextStyle(fontSize: 20)),
|
||||||
|
Text("${a.commandTemplate}", style: TextStyle(fontSize: 12)),
|
||||||
],
|
],
|
||||||
|
),
|
||||||
|
value: a.id,
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
21
lib/widgets/launcherButton.dart
Normal file
21
lib/widgets/launcherButton.dart
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import "package:flutter/material.dart";
|
||||||
|
import "package:prod/models/editor.dart";
|
||||||
|
import "package:prod/models/globalModel.dart";
|
||||||
|
import "package:provider/provider.dart";
|
||||||
|
|
||||||
|
class LauncherButton extends StatelessWidget {
|
||||||
|
const LauncherButton(this.eid, {super.key});
|
||||||
|
final String? eid;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
GlobalModel gm = Provider.of<GlobalModel>(context, listen: false);
|
||||||
|
final Editor edt = gm.nthEdt(gm.id2EdtMap[eid]!);
|
||||||
|
return eid == null
|
||||||
|
? Container()
|
||||||
|
: Expanded(
|
||||||
|
flex: 1,
|
||||||
|
child: TextButton(child: Text("${edt.sname}"), onPressed: () {}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ import "package:flutter/material.dart";
|
|||||||
import "package:prod/models/editor.dart";
|
import "package:prod/models/editor.dart";
|
||||||
import "package:prod/models/globalModel.dart";
|
import "package:prod/models/globalModel.dart";
|
||||||
import "package:prod/models/project.dart";
|
import "package:prod/models/project.dart";
|
||||||
|
import "package:prod/widgets/launcherButton.dart";
|
||||||
import "package:provider/provider.dart";
|
import "package:provider/provider.dart";
|
||||||
import "package:yaru/yaru.dart";
|
import "package:yaru/yaru.dart";
|
||||||
import "package:process_run/shell.dart";
|
import "package:process_run/shell.dart";
|
||||||
@@ -75,31 +76,10 @@ class ProjectCard extends StatelessWidget {
|
|||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Column(
|
||||||
children: [
|
children: [LauncherButton(prj.e0), LauncherButton(prj.e1)],
|
||||||
Expanded(
|
|
||||||
flex: 1,
|
|
||||||
child: TextButton(child: Text("Ze"), onPressed: () {}),
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
flex: 1,
|
|
||||||
child: TextButton(child: Text("Ze"), onPressed: () {}),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
Column(
|
Column(
|
||||||
children: [
|
children: [LauncherButton(prj.e2), LauncherButton(prj.e3)],
|
||||||
Expanded(
|
|
||||||
child: TextButton(child: Text("Ze"), onPressed: () {}),
|
|
||||||
),
|
|
||||||
true
|
|
||||||
? Expanded(
|
|
||||||
child: TextButton(
|
|
||||||
child: Text("Ze"),
|
|
||||||
onPressed: () {},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: Container(),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user