added proper editor buttons to prj card, APP BROKEN HERE.
All checks were successful
Build CI / AMD64 Build (push) Successful in 1m55s
Build CI / ARM64 Build (push) Successful in 7m8s

This commit is contained in:
2026-02-27 18:23:52 +05:30
parent 50c52b7619
commit 07f222a87e
7 changed files with 120 additions and 60 deletions

View File

@@ -7,6 +7,7 @@ import "package:provider/provider.dart";
import "package:prod/models/globalModel.dart";
void main() {
// DEAL WITH NULLS IN EDITOR LIST AND PROJECT's EDITOR LIST. SWITCH TO HIDDEN NONE EDITOR WITH "" AS ID.
runApp(const MyApp());
}

View File

@@ -11,6 +11,7 @@ class GlobalModel extends ChangeNotifier {
late List<bool> hoverShow;
late List<Editor> editors;
late SharedPreferences prefs;
late Map<String, int> id2EdtMap;
bool importedData = false;
bool edited = false;
@@ -22,13 +23,17 @@ class GlobalModel extends ChangeNotifier {
String edtData = prefs.getString(kEditorsKey)!;
List<dynamic> data = jsonDecode(edtData);
editors = [];
for (var d in data) {
editors.add(Editor.fromJson(d));
id2EdtMap = {};
for (var (i, d) in data.indexed) {
var localEdt = Editor.fromJson(d);
editors.add(localEdt);
id2EdtMap[localEdt.id] = i;
}
} else {
editors = [];
prefs.setString(kEditorsKey, jsonEncode(editors));
}
print(id2EdtMap);
if (prefs.containsKey(kProjectsKey)) {
String prjData = prefs.getString(kProjectsKey)!;
@@ -60,6 +65,8 @@ class GlobalModel extends ChangeNotifier {
prefs.setString(kEditorsKey, jsonEncode(arst));
}
// Project management
void addPrj(Project prj) {
projects.add(prj);
hoverShow.add(false);
@@ -97,6 +104,7 @@ class GlobalModel extends ChangeNotifier {
void updatePrj(int index, Project prj) {
projects[index] = prj;
saveProjectState();
notifyListeners();
}
@@ -122,6 +130,10 @@ class GlobalModel extends ChangeNotifier {
return editors[index];
}
int? getFromID(String? id) {
return id2EdtMap[id];
}
// Editing controller
bool get isEdited {

View File

@@ -3,14 +3,14 @@ import "dart:io";
import "package:path/path.dart" as p;
class Project {
final String name;
final String language;
final File path;
final String? e0;
final String? e1;
final String? e2;
final String? e3;
final bool isGit;
String name;
String language;
File path;
String? e0;
String? e1;
String? e2;
String? e3;
bool isGit;
Project(
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(){
// return File
// }

View File

@@ -58,6 +58,7 @@ class ManageProject extends StatelessWidget {
textAlign: .center,
// onEditingComplete: () => gm.updateEdited(true),
decoration: InputDecoration(
labelText: "Path",
border: .none,
// enabledBorder: .none,
fillColor: Colors.transparent,
@@ -72,6 +73,7 @@ class ManageProject extends StatelessWidget {
textAlign: .center,
// onEditingComplete: () => gm.updateEdited(true),
decoration: InputDecoration(
labelText: "Language",
border: .none,
enabledBorder: .none,
fillColor: Colors.transparent,
@@ -83,10 +85,10 @@ class ManageProject extends StatelessWidget {
Row(
mainAxisAlignment: .spaceEvenly,
children: [
EditorSelector(0),
EditorSelector(1),
EditorSelector(2),
EditorSelector(3),
EditorSelector(0, id),
EditorSelector(1, id),
EditorSelector(2, id),
EditorSelector(3, id),
],
),
],

View File

@@ -1,37 +1,47 @@
import "package:flutter/material.dart";
import "package:prod/models/editor.dart";
import "package:prod/models/globalModel.dart";
import "package:prod/models/project.dart";
import "package:provider/provider.dart";
import "package:yaru/yaru.dart";
class EditorSelector extends StatelessWidget {
const EditorSelector(this.turns, {super.key});
const EditorSelector(this.turns, this.id, {super.key});
final int id;
final int turns;
@override
Widget build(BuildContext context) {
return Row(
children: [
RotatedBox(
child: Icon(Icons.rounded_corner_rounded),
quarterTurns: this.turns,
),
YaruPopupMenuButton<Editor>(
child: Text("Nullie"),
onSelected: (a) {
Provider.of<GlobalModel>(context, listen: false);
print("$a");
},
itemBuilder: (context) {
return Provider.of<GlobalModel>(
context,
listen: false,
).editors.map((a) {
return PopupMenuItem<Editor>(value: a, child: Text("${a.name}"));
}).toList();
},
),
],
GlobalModel gm = Provider.of<GlobalModel>(context);
Project prj = gm.nthPrj(id);
return DropdownMenu(
enableSearch: true,
enableFilter: true,
initialSelection: prj.getEditor(turns),
leadingIcon: RotatedBox(
child: Icon(Icons.rounded_corner_rounded),
quarterTurns: turns,
),
onSelected: (a) {
print("$a");
prj.setEditor(turns, a);
gm.updatePrj(id, prj);
},
dropdownMenuEntries: Provider.of<GlobalModel>(context).editors.map((a) {
return DropdownMenuEntry(
label: a.name,
labelWidget: Column(
crossAxisAlignment: .start,
mainAxisAlignment: .center,
children: [
Text("${a.name}", style: TextStyle(fontSize: 20)),
Text("${a.commandTemplate}", style: TextStyle(fontSize: 12)),
],
),
value: a.id,
);
}).toList(),
);
}
}

View 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: () {}),
);
}
}

View File

@@ -2,6 +2,7 @@ import "package:flutter/material.dart";
import "package:prod/models/editor.dart";
import "package:prod/models/globalModel.dart";
import "package:prod/models/project.dart";
import "package:prod/widgets/launcherButton.dart";
import "package:provider/provider.dart";
import "package:yaru/yaru.dart";
import "package:process_run/shell.dart";
@@ -75,31 +76,10 @@ class ProjectCard extends StatelessWidget {
Row(
children: [
Column(
children: [
Expanded(
flex: 1,
child: TextButton(child: Text("Ze"), onPressed: () {}),
),
Expanded(
flex: 1,
child: TextButton(child: Text("Ze"), onPressed: () {}),
),
],
children: [LauncherButton(prj.e0), LauncherButton(prj.e1)],
),
Column(
children: [
Expanded(
child: TextButton(child: Text("Ze"), onPressed: () {}),
),
true
? Expanded(
child: TextButton(
child: Text("Ze"),
onPressed: () {},
),
)
: Container(),
],
children: [LauncherButton(prj.e2), LauncherButton(prj.e3)],
),
],
),