diff --git a/cyberwow/lib/config.dart b/cyberwow/lib/config.dart index c84427c..5f37e8c 100644 --- a/cyberwow/lib/config.dart +++ b/cyberwow/lib/config.dart @@ -22,7 +22,7 @@ along with CyberWOW. If not, see . import 'config/prototype.dart'; import 'config/cyberwow.dart' as cryptoConfig; -const c = cryptoConfig.config; +final c = cryptoConfig.config; const arch = 'arm64'; // const arch = 'x86_64'; diff --git a/cyberwow/lib/config/cyberwow.dart b/cyberwow/lib/config/cyberwow.dart index 2ac07af..1f0b3ec 100644 --- a/cyberwow/lib/config/cyberwow.dart +++ b/cyberwow/lib/config/cyberwow.dart @@ -23,14 +23,59 @@ import 'package:flutter/material.dart'; import 'prototype.dart'; -const config = CryptoConfig +final _theme = ThemeData +( + brightness: Brightness.dark, + + primaryColor: Colors.green, + hintColor: Colors.yellow, + primarySwatch: Colors.green, + accentColor: Colors.green, + + scaffoldBackgroundColor: Colors.black, + + fontFamily: 'RobotoMono', + + textTheme: TextTheme + ( + display1: TextStyle + ( + fontSize: 35, + fontWeight: FontWeight.bold, + ), + subhead: TextStyle + ( + fontSize: 17, + fontWeight: FontWeight.bold, + ), + body2: TextStyle + ( + fontSize: 11, + ), + ).apply + ( + bodyColor: Colors.green, + displayColor: Colors.green, + ), + + // cursorColor: config.c.textColor, + // inputDecorationTheme: InputDecorationTheme + // ( + // focusedBorder: UnderlineInputBorder + // ( + // borderSide: BorderSide(color: config.c.textColor) + // ) + // ) +); + + +final config = CryptoConfig ( 'wownerod', 'wownerod', 'Follow the white rabbit.', 70, - Colors.green, - Colors.black, + _theme, 34568, [ '--prune-blockchain', diff --git a/cyberwow/lib/config/prototype.dart b/cyberwow/lib/config/prototype.dart index 3c4eaac..d73631a 100644 --- a/cyberwow/lib/config/prototype.dart +++ b/cyberwow/lib/config/prototype.dart @@ -26,8 +26,7 @@ class CryptoConfig { final String appPath; final String splash; final int splashDelay; - final Color textColor; - final Color backgroundColor; + final ThemeData theme; final int port; final List extraArgs; const CryptoConfig @@ -36,8 +35,7 @@ class CryptoConfig { this.appPath, this.splash, this.splashDelay, - this.textColor, - this.backgroundColor, + this.theme, this.port, this.extraArgs, ); diff --git a/cyberwow/lib/main.dart b/cyberwow/lib/main.dart index 3acc4a2..e018878 100644 --- a/cyberwow/lib/main.dart +++ b/cyberwow/lib/main.dart @@ -53,10 +53,7 @@ class CyberWOW_App extends StatelessWidget { return MaterialApp ( title: 'CyberWOW', - theme: ThemeData - ( - primarySwatch: Colors.purple, - ), + theme: config.c.theme, home: CyberWOW_Page(title: 'CyberWOW'), ); } diff --git a/cyberwow/lib/state.dart b/cyberwow/lib/state.dart index 17bdd8e..0826a26 100644 --- a/cyberwow/lib/state.dart +++ b/cyberwow/lib/state.dart @@ -233,6 +233,8 @@ class SyncedState extends HookedState { List getConnections = []; List getTransactionPool = []; + final terminalController = TextEditingController(); + SyncedState(f1, f2, f3, this.stdout, this.processInput, this.processOutput) : super (f1, f2, f3); void appendInput(String line) { diff --git a/cyberwow/lib/widget/blank.dart b/cyberwow/lib/widget/blank.dart index 1214f2a..d2f13bf 100644 --- a/cyberwow/lib/widget/blank.dart +++ b/cyberwow/lib/widget/blank.dart @@ -28,7 +28,6 @@ Widget buildBlank(BuildContext context, BlankState state) { return Scaffold( body: Container ( - color: config.c.backgroundColor, ), ); } diff --git a/cyberwow/lib/widget/exiting.dart b/cyberwow/lib/widget/exiting.dart index 31b58ca..91e9061 100644 --- a/cyberwow/lib/widget/exiting.dart +++ b/cyberwow/lib/widget/exiting.dart @@ -35,7 +35,6 @@ Widget buildExiting(BuildContext context, ExitingState state) { body: Container ( // padding: const EdgeInsets.all(10.0), - color: config.c.backgroundColor, child: Align ( alignment: Alignment.topLeft, @@ -54,12 +53,7 @@ Widget buildExiting(BuildContext context, ExitingState state) { child: Text ( state.stdout.join(), - style: TextStyle - ( - fontFamily: 'RobotoMono', - fontSize: 11, - color: config.c.textColor, - ), + style: Theme.of(context).textTheme.body2, ) ) ) diff --git a/cyberwow/lib/widget/loading.dart b/cyberwow/lib/widget/loading.dart index a25dba9..9d7c25f 100644 --- a/cyberwow/lib/widget/loading.dart +++ b/cyberwow/lib/widget/loading.dart @@ -33,7 +33,6 @@ Widget buildLoading(BuildContext context, LoadingState state) { body: Container ( padding: const EdgeInsets.all(10.0), - color: config.c.backgroundColor, child: Align ( alignment: Alignment.topLeft, @@ -50,13 +49,7 @@ Widget buildLoading(BuildContext context, LoadingState state) { child: Text ( state.status, - style: TextStyle - ( - fontFamily: 'RobotoMono', - fontSize: 17, - fontWeight: FontWeight.bold, - color: config.c.textColor, - ), + style: Theme.of(context).textTheme.subhead, ) ) ) diff --git a/cyberwow/lib/widget/resyncing.dart b/cyberwow/lib/widget/resyncing.dart index ae06ff0..f2cd1b7 100644 --- a/cyberwow/lib/widget/resyncing.dart +++ b/cyberwow/lib/widget/resyncing.dart @@ -35,7 +35,6 @@ Widget buildReSyncing(BuildContext context, ReSyncingState state) { body: Container ( // padding: const EdgeInsets.all(10.0), - color: config.c.backgroundColor, child: Align ( alignment: Alignment.topLeft, @@ -54,12 +53,7 @@ Widget buildReSyncing(BuildContext context, ReSyncingState state) { child: Text ( state.stdout.join(), - style: TextStyle - ( - fontFamily: 'RobotoMono', - fontSize: 11, - color: config.c.textColor, - ), + style: Theme.of(context).textTheme.body2, ) ) ) diff --git a/cyberwow/lib/widget/synced.dart b/cyberwow/lib/widget/synced.dart index aa3ea3d..a329824 100644 --- a/cyberwow/lib/widget/synced.dart +++ b/cyberwow/lib/widget/synced.dart @@ -21,15 +21,16 @@ along with CyberWOW. If not, see . import 'package:flutter/material.dart'; +import 'dart:collection'; + import '../state.dart'; import '../config.dart' as config; import '../helper.dart'; -Widget summary(SyncedState state) { +Widget summary(BuildContext context, SyncedState state) { return Container ( padding: EdgeInsets.only(bottom: 10.0), - color: config.c.backgroundColor, child: Align ( alignment: Alignment.center, @@ -59,13 +60,7 @@ Widget summary(SyncedState state) { child: Text ( '${state.height}', - style: TextStyle - ( - fontFamily: 'RobotoMono', - fontSize: 35, - fontWeight: FontWeight.bold, - color: config.c.textColor, - ), + style: Theme.of(context).textTheme.display1, key: ValueKey(state.height), ) ) @@ -91,11 +86,10 @@ Widget summary(SyncedState state) { ); } -Widget rpcView(String title, dynamic body) { +Widget rpcView(BuildContext context, String title, dynamic body) { return Container ( padding: const EdgeInsets.all(10.0), - color: config.c.backgroundColor, child: Align ( alignment: Alignment.topLeft, @@ -122,28 +116,17 @@ Widget rpcView(String title, dynamic body) { Text ( title, - style: TextStyle - ( - fontFamily: 'RobotoMono', - fontSize: 35, - fontWeight: FontWeight.bold, - color: config.c.textColor, - ), + style: Theme.of(context).textTheme.display1, ), Container( height: 1, - color: config.c.textColor, + color: Theme.of(context).primaryColor, margin: const EdgeInsets.only(bottom: 20, top: 20), ), Text ( pretty(body), - style: TextStyle - ( - fontFamily: 'RobotoMono', - fontSize: 11, - color: config.c.textColor, - ), + style: Theme.of(context).textTheme.body2, ) ], ) @@ -155,20 +138,98 @@ Widget rpcView(String title, dynamic body) { ); } -Widget getInfo(SyncedState state) => rpcView('info', state.getInfo); -Widget getConnections(SyncedState state) => rpcView('connections', state.getConnections); -Widget syncInfo(SyncedState state) => rpcView('sync info', state.syncInfo); -Widget getTransactionPool(SyncedState state) => rpcView('tx pool', state.getTransactionPool); +Widget getInfo(BuildContext context, SyncedState state) => rpcView(context, 'info', state.getInfo); +Widget getConnections(BuildContext context, SyncedState state) => rpcView(context, 'connections', state.getConnections); +Widget syncInfo(BuildContext context, SyncedState state) => rpcView(context, 'sync info', state.syncInfo); +Widget getTransactionPool(BuildContext context, SyncedState state) => rpcView(context, 'tx pool', state.getTransactionPool); -Widget pageView (SyncedState state, PageController controller) { + +Widget terminalView(BuildContext context, String title, SyncedState state) { + return Container + ( + padding: const EdgeInsets.all(10.0), + child: Align + ( + alignment: Alignment.topLeft, + child: Column + ( + mainAxisAlignment: MainAxisAlignment.center, + children: + [ + Expanded + ( + flex: 1, + child: SingleChildScrollView + ( + scrollDirection: Axis.vertical, + child: Column + ( + children: + [ + + Container( + height: 0, + margin: const EdgeInsets.only(bottom: 15), + ), + Text + ( + title, + style: Theme.of(context).textTheme.display1, + ), + Container( + height: 1, + color: Theme.of(context).primaryColor, + margin: const EdgeInsets.only(bottom: 20, top: 20), + ), + Text + ( + state.stdout.join(), + style: Theme.of(context).textTheme.body2, + ) + ], + ) + ) + ), + TextField + ( + controller: state.terminalController, + decoration: InputDecoration + ( + border: OutlineInputBorder + ( + borderSide: BorderSide + ( + ), + ), + enabledBorder: OutlineInputBorder + ( + borderSide: BorderSide + ( + color: Theme.of(context).primaryColor, + ), + ), + ), + autofocus: true, + ), + ], + ), + ), + ); +} + + +Widget terminal(BuildContext context, SyncedState state) => terminalView(context, 'terminal', state); + +Widget pageView (BuildContext context, SyncedState state, PageController controller) { return PageView ( controller: controller, children: [ - summary(state), - getTransactionPool(state), - getInfo(state), - getConnections(state), + terminal(context, state), + summary(context, state), + getTransactionPool(context, state), + getInfo(context, state), + getConnections(context, state), // syncInfo(state), ], ); @@ -177,6 +238,6 @@ Widget pageView (SyncedState state, PageController controller) { Widget buildSynced(BuildContext context, SyncedState state, PageController controller) { return Scaffold ( - body: pageView(state, controller) + body: pageView(context, state, controller) ); } diff --git a/cyberwow/lib/widget/syncing.dart b/cyberwow/lib/widget/syncing.dart index 3f5978f..da8b82d 100644 --- a/cyberwow/lib/widget/syncing.dart +++ b/cyberwow/lib/widget/syncing.dart @@ -35,7 +35,6 @@ Widget buildSyncing(BuildContext context, SyncingState state) { body: Container ( // padding: const EdgeInsets.all(10.0), - color: config.c.backgroundColor, child: Align ( alignment: Alignment.topLeft, @@ -54,12 +53,7 @@ Widget buildSyncing(BuildContext context, SyncingState state) { child: Text ( state.stdout.join(), - style: TextStyle - ( - fontFamily: 'RobotoMono', - fontSize: 11, - color: config.c.textColor, - ), + style: Theme.of(context).textTheme.body2, ) ) )