Skip to content

Commit fd7032b

Browse files
committed
Console implementation
1 parent b796be5 commit fd7032b

File tree

5 files changed

+112
-14
lines changed

5 files changed

+112
-14
lines changed

lib/screens/editor/editor.dart

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'dart:io';
33

4+
import 'package:corecoder_develop/screens/editor/editor_console.dart';
45
import 'package:corecoder_develop/util/custom_code_box.dart' show InnerField;
56
import 'package:corecoder_develop/screens/editor/editor_drawer.dart';
67
import 'package:corecoder_develop/util/modules_manager.dart';
@@ -37,6 +38,8 @@ class _EditorPageState extends State<EditorPage> {
3738
double autoCompleteX = 0;
3839
double autoCompleteY = 0;
3940
int? selectedTab;
41+
EditorConsoleController consoleController = EditorConsoleController();
42+
bool showConsole = true;
4043

4144
@override
4245
void initState() {
@@ -330,6 +333,7 @@ class _EditorPageState extends State<EditorPage> {
330333
@override
331334
Widget build(BuildContext context) {
332335
project = ModalRoute.of(context)!.settings.arguments as CCSolution;
336+
var query = MediaQuery.of(context);
333337
if (documentList.isEmpty) {
334338
// Populate the file browser tree once
335339
initializeTreeView();
@@ -375,7 +379,15 @@ class _EditorPageState extends State<EditorPage> {
375379
color: ThemeManager.getThemeSchemeColor("foreground"),
376380
child: Material(
377381
child: ListView(
378-
children: getAutoCompleteControls(null))))))
382+
children: getAutoCompleteControls(null)))))),
383+
if(showConsole)
384+
Positioned(
385+
left: 0,
386+
top: query.size.height / 2,
387+
height: query.size.height / 2,
388+
width: query.size.width,
389+
child:EditorConsole(controller: consoleController),
390+
)
379391
]);
380392

381393
return Scaffold(
@@ -388,28 +400,40 @@ class _EditorPageState extends State<EditorPage> {
388400
centerTitle: false,
389401
actions: [
390402
IconButton(
391-
onPressed: () => {project.run()},
403+
onPressed: () {
404+
project.run(consoleController);
405+
},
392406
icon: const Icon(Icons.play_arrow),
393407
tooltip: "Run Project",
394408
),
395409
IconButton(
396-
onPressed: () => {},
410+
onPressed: () {
411+
setState(() {
412+
/// Toggle the console
413+
showConsole = !showConsole;
414+
});
415+
},
397416
icon: const Icon(Icons.assessment_rounded),
398417
tooltip: "Toggle Console",
399418
),
400419
PopupMenuButton(
401420
child: const Icon(Icons.more_horiz),
402421
tooltip: "Menu",
403422
padding: const EdgeInsets.all(32.0),
404-
itemBuilder: (BuildContext context){
405-
return <PopupMenuEntry>[
406-
PopupMenuItem(child: const Text("Close Project"),onTap:()=> Navigator.pop(context),)
407-
];
408-
},),
423+
itemBuilder: (BuildContext context) {
424+
return <PopupMenuEntry>[
425+
PopupMenuItem(
426+
child: const Text("Close Project"),
427+
onTap: () => Navigator.pop(context),
428+
)
429+
];
430+
},
431+
),
409432
const SizedBox(width: 16.0),
410433
],
411434
),
412-
body: page,
435+
body:
436+
page
413437
);
414438
}
415439
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import 'package:flutter/material.dart';
2+
3+
class EditorConsoleController extends TextEditingController {
4+
void setText(String val) {
5+
text = val;
6+
}
7+
8+
void appendText(String val) {
9+
text += val + "\n";
10+
}
11+
12+
EditorConsoleController();
13+
}
14+
15+
class EditorConsole extends StatefulWidget {
16+
final EditorConsoleController controller;
17+
18+
EditorConsole({Key? key, required this.controller}) : super(key: key) {
19+
controller.appendText("val\n\nval");
20+
}
21+
22+
@override
23+
State<StatefulWidget> createState() => EditorConsoleState();
24+
25+
void setText(String val) => controller.setText(val);
26+
27+
void appendText(String val) => controller.appendText(val);
28+
}
29+
30+
class EditorConsoleState extends State<EditorConsole> {
31+
@override
32+
Widget build(BuildContext context) {
33+
return Container(
34+
color: Theme.of(context).backgroundColor,
35+
child: Column(children: [
36+
const Text("Console Output"),
37+
Expanded(
38+
child: SingleChildScrollView(
39+
child:TextField(
40+
enabled: false,
41+
readOnly: true,
42+
controller: widget.controller,
43+
keyboardType: TextInputType.multiline,
44+
maxLines: null,
45+
)))
46+
]));
47+
}
48+
}

lib/util/cc_project_structure.dart

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import 'dart:async';
12
import 'dart:convert';
23
import 'dart:io';
4+
import 'package:corecoder_develop/screens/editor/editor_console.dart';
35
import 'package:flutter/material.dart';
46
import 'modules_manager.dart';
5-
7+
import 'package:process_runner/process_runner.dart';
68
/* Class for storing project information */
79
class CCSolution {
810
final String name, desc, author, identifier, slnPath, slnFolderPath;
@@ -25,17 +27,26 @@ class CCSolution {
2527
CCSolution(this.name, this.desc, this.author, this.identifier, this.slnPath,
2628
this.slnFolderPath, this.dateModified, this.runConfig);
2729

28-
void run() async {
30+
void run(EditorConsoleController controller) async {
2931

3032
if (Platform.isWindows && currentRunConfig < runConfig.length) {
3133
debugPrint(
3234
"[CC Debug] starting project on windows config `${runConfig[currentRunConfig].executable}` on $slnFolderPath");
3335
if (runConfig[currentRunConfig].type == "process") {
34-
var result = await Process.run(
36+
var proc = await Process.start(
3537
runConfig[currentRunConfig].executable, runConfig[currentRunConfig].arguments,
3638
workingDirectory: slnFolderPath);
37-
debugPrint("[STDOUT] ${result.stdout}");
38-
debugPrint("[STDERR] ${result.stderr}");
39+
controller.setText("");
40+
// stdout.addStream(proc.stdout);
41+
proc.stdout.transform(utf8.decoder).forEach((event) {
42+
controller.appendText(event);
43+
debugPrint(event);
44+
});
45+
proc.stderr.transform(utf8.decoder).forEach((event) {
46+
controller.appendText(event);
47+
debugPrint(event);
48+
});
49+
//debugPrint("[STDERR] ${result.stderr}");
3950
}
4051
}
4152
}

pubspec.lock

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ packages:
1515
url: "https://pub.dartlang.org"
1616
source: hosted
1717
version: "3.1.6"
18+
args:
19+
dependency: transitive
20+
description:
21+
name: args
22+
url: "https://pub.dartlang.org"
23+
source: hosted
24+
version: "2.3.0"
1825
async:
1926
dependency: transitive
2027
description:
@@ -387,6 +394,13 @@ packages:
387394
url: "https://pub.dartlang.org"
388395
source: hosted
389396
version: "4.2.4"
397+
process_runner:
398+
dependency: "direct main"
399+
description:
400+
name: process_runner
401+
url: "https://pub.dartlang.org"
402+
source: hosted
403+
version: "4.1.2"
390404
provider:
391405
dependency: "direct main"
392406
description:

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ dependencies:
6262
android_intent_plus: ^3.0.2
6363
bitsdojo_window: ^0.1.1+1
6464
file_picker: ^4.3.0
65+
process_runner: ^4.1.2
6566

6667
dev_dependencies:
6768
flutter_test:

0 commit comments

Comments
 (0)