Commit 3279a264 authored by Manuel Herold's avatar Manuel Herold

finished schema demo

parent babcc349
import 'package:dashboard/exceptions/login_exception.dart';
import 'package:dashboard/loading.dart';
import 'package:dashboard/ui/graphs/community_meta/cluster_view_page.dart';
import 'package:dashboard/ui/schema/index.dart';
import 'package:dashboard/ui/sign_in/loginpage.dart';
import 'package:dashboard/util/loginhelper.dart';
import 'package:dashboard/util/user.dart';
......@@ -29,7 +30,6 @@ class _ArticonfDashboardDemoState extends State<ArticonfDashboardDemo> {
@override
Widget build(BuildContext context) {
// ClusterGetter().getClusters();
return MaterialApp(
home: EnhancedFutureBuilder<BackendUser>(
future: _checkLoginStuff(),
......
import 'package:dashboard/ui/schema/page1/index.dart';
import 'package:dashboard/ui/schema/page2/index.dart';
import 'package:dashboard/ui/schema/page3/index.dart';
import 'package:dashboard/ui/schema/page4/index.dart';
import 'package:flutter/material.dart';
enum Phase { WRITE, DETAILS }
enum Phase { WRITE, DETAILS, LAYERS, LAYERING }
class SchemaDemo extends StatefulWidget {
@override
......@@ -14,7 +16,7 @@ class SchemaDemo extends StatefulWidget {
}
class _SchemaDemoState extends State<SchemaDemo> {
Phase _phase = Phase.WRITE;
Phase _phase;
@override
void initState() {
......@@ -31,6 +33,12 @@ class _SchemaDemoState extends State<SchemaDemo> {
case Phase.DETAILS:
return SchemaDemoPage2();
case Phase.LAYERS:
return SchemaDemoPage3();
case Phase.LAYERING:
return SchemaDemoPage4();
default:
return Text("Unknown Phase $_phase");
}
......
import 'package:dashboard/ui/schema/index.dart';
import 'package:dashboard/ui/schema/util/bottom_sheet.dart';
import 'package:dashboard/ui/schema/util/fab.dart';
import 'package:dashboard/ui/schema/util/post_written.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
......@@ -22,10 +24,36 @@ class _SchemaDemoPage1State extends State<SchemaDemoPage1> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: ColorHolder.color2,
backgroundColor: ColorHolder.color1,
body: Center(
child: WrittenPost(_next),
child: Row(
children: [
SizedBox(width: 16),
CustomFloatingActionButton(
Icons.close,
"right-${DateTime.now()}",
() => Navigator.of(context).pop(),
),
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
WrittenPost(() {}),
],
),
),
CustomFloatingActionButton(
Icons.arrow_right,
"right-${DateTime.now()}",
_next,
),
SizedBox(width: 16),
],
),
),
bottomSheet: ExplainingBottomSheet(
"1. A user writes a post at a service that is connected to Articonf SMART."),
);
}
}
import 'package:dashboard/constants/schema_demo_constants.dart';
import 'package:dashboard/ui/schema/index.dart';
import 'package:dashboard/ui/schema/util/bottom_sheet.dart';
import 'package:dashboard/ui/schema/util/fab.dart';
import 'package:dashboard/ui/schema/util/trace_table.dart';
import 'package:dashboard/ui/schema/util/post_written.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
......@@ -13,18 +16,26 @@ class _SchemaDemoPage2State extends State<SchemaDemoPage2> {
Navigator.of(context).pop();
}
void _next() {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => SchemaDemo(
phase: Phase.LAYERS,
),
));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: ColorHolder.color2,
backgroundColor: ColorHolder.color1,
body: Center(
child: Row(
children: [
SizedBox(width: 16),
FloatingActionButton(
onPressed: _previous,
child: Icon(Icons.arrow_back),
heroTag: "left-${DateTime.now()}",
CustomFloatingActionButton(
Icons.arrow_back,
"left-${DateTime.now()}",
_previous,
),
Expanded(
child: Row(
......@@ -37,79 +48,29 @@ class _SchemaDemoPage2State extends State<SchemaDemoPage2> {
],
),
),
Icon(Icons.arrow_right),
Icon(
Icons.arrow_right,
color: ColorHolder.color2,
),
Expanded(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width: 350,
child: Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: DataTable(
columnSpacing: 16,
dataRowHeight: 48,
headingTextStyle: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 24,
),
columns: [
DataColumn(label: Text("Field")),
DataColumn(label: Text("Value")),
],
rows: [
DataRow(cells: [
DataCell(Text("Author")),
DataCell(Text("u/SomeUserOnReddit")),
]),
DataRow(cells: [
DataCell(Text("Timestamp")),
DataCell(
Text("${DateTime.now().toIso8601String()}")),
]),
DataRow(cells: [
DataCell(Text("Content")),
DataCell(Text(SchemaDemoConstants.post)),
]),
DataRow(cells: [
DataCell(Text("Upvotes")),
DataCell(Text("198")),
]),
DataRow(cells: [
DataCell(Text("Percentage Upvoted")),
DataCell(Text("0.96")),
]),
DataRow(cells: [
DataCell(Text("Number of Comments")),
DataCell(Text("0")),
]),
DataRow(cells: [
DataCell(Text("Subreddit")),
DataCell(Text("r/Example")),
]),
DataRow(cells: [
DataCell(Text("Id")),
DataCell(Text("a8bf26")),
]),
],
),
),
),
),
PostTable(),
],
),
),
FloatingActionButton(
onPressed: () {},
child: Icon(Icons.arrow_forward),
heroTag: "right-${DateTime.now()}",
CustomFloatingActionButton(
Icons.arrow_forward,
"right-${DateTime.now()}",
_next,
),
SizedBox(width: 16),
],
),
),
bottomSheet: ExplainingBottomSheet(
"2. The raw data gets gathered by the Articonf SMART backend according to a schema and is converted to a Trace."),
);
}
}
import 'package:dashboard/ui/schema/index.dart';
import 'package:dashboard/ui/schema/util/bottom_sheet.dart';
import 'package:dashboard/ui/schema/util/fab.dart';
import 'package:dashboard/ui/schema/util/layers.dart';
import 'package:dashboard/ui/schema/util/trace_table.dart';
import 'package:dashboard/ui/schema/util/traces_list.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class SchemaDemoPage3 extends StatefulWidget {
@override
_SchemaDemoPage3State createState() => _SchemaDemoPage3State();
}
class _SchemaDemoPage3State extends State<SchemaDemoPage3> {
void _previous() {
Navigator.of(context).pop();
}
void _next() {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => SchemaDemo(
phase: Phase.LAYERING,
),
));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: ColorHolder.color1,
body: Stack(
children: [
Center(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(width: 16),
CustomFloatingActionButton(
Icons.arrow_back,
"left-${DateTime.now()}",
_previous,
),
Expanded(child: SizedBox()),
PostTable(),
Icon(
Icons.add,
size: 30,
color: ColorHolder.color2,
),
LayerInformation(),
Icon(
Icons.arrow_right,
size: 30,
color: ColorHolder.color2,
),
TracesList(),
Expanded(child: SizedBox()),
CustomFloatingActionButton(
Icons.arrow_forward,
"right-${DateTime.now()}",
_next,
),
SizedBox(width: 16),
],
),
)
],
),
bottomSheet: ExplainingBottomSheet(
"3. The trace gets split into several nodes according to the layer information stored in the schema."),
);
}
}
import 'package:dashboard/ui/schema/page4/trace_small.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class ClusteredData extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 400,
height: 200,
decoration: BoxDecoration(
color: Colors.blue[50],
borderRadius: BorderRadius.all(Radius.circular(10)),
border: Border.all(
color: Colors.black,
width: 3,
)),
child: Stack(
children: [
TraceSmall(10, 10, Colors.blue[100]),
TraceSmall(10, 100, Colors.blue[100]),
TraceSmall(45, 60, Colors.blue[100]),
TraceSmall(60, 110, Colors.blue[100]),
TraceSmall(90, 40, Colors.blue[100]),
TraceSmall(230, 10, Colors.blue[100]),
TraceSmall(284, 10, Colors.blue[100]),
TraceSmall(250, 60, Colors.blue[100]),
TraceSmall(290, 90, Colors.blue[100]),
TraceSmall(250, 120, Colors.blue[100]),
TraceSmall(320, 50, Colors.blue[100]),
],
),
),
Text(
"Traces in the Upvotes Layer (Clustered)",
style: TextStyle(
color: ColorHolder.color2,
),
),
SizedBox(height: 16),
Container(
width: 400,
height: 200,
decoration: BoxDecoration(
color: Colors.red[50],
borderRadius: BorderRadius.all(Radius.circular(10)),
border: Border.all(
color: Colors.black,
width: 3,
)),
child: Stack(
children: [
TraceSmall(100, 30, Colors.red[100]),
TraceSmall(100, 80, Colors.red[100]),
TraceSmall(100, 140, Colors.red[100]),
TraceSmall(55, 55, Colors.red[100]),
TraceSmall(145, 55, Colors.red[100]),
TraceSmall(145, 105, Colors.red[100]),
TraceSmall(280, 80, Colors.red[100]),
TraceSmall(315, 115, Colors.red[100]),
TraceSmall(245, 45, Colors.red[100]),
TraceSmall(328, 50, Colors.red[100]),
TraceSmall(300, 4, Colors.red[100]),
],
),
),
Text(
"Traces in the Engagement Layer (Clustered)",
style: TextStyle(
color: ColorHolder.color2,
),
),
],
);
}
}
import 'dart:ui';
import 'package:dashboard/ui/schema/index.dart';
import 'package:dashboard/ui/schema/page4/clustered_data.dart';
import 'package:dashboard/ui/schema/page4/unclustered_data.dart';
import 'package:dashboard/ui/schema/util/bottom_sheet.dart';
import 'package:dashboard/ui/schema/util/fab.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class SchemaDemoPage4 extends StatefulWidget {
@override
_SchemaDemoPage4State createState() => _SchemaDemoPage4State();
}
class _SchemaDemoPage4State extends State<SchemaDemoPage4> {
void _previous() {
Navigator.of(context).pop();
}
void _next() {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => SchemaDemo(
phase: Phase.LAYERS,
),
));
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: ColorHolder.color1,
body: Stack(
children: [
Center(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(width: 16),
CustomFloatingActionButton(
Icons.arrow_back,
"left-${DateTime.now()}",
_previous,
),
Expanded(child: SizedBox()),
UnclusteredData(),
SizedBox(width: 48),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(right: 80.0),
child: Text(
"Clustering",
style: TextStyle(
fontSize: 22,
color: ColorHolder.color2,
),
),
),
Image.asset(
"assets/drawn/arrow.png",
width: 200,
),
],
),
SizedBox(width: 48),
ClusteredData(),
Expanded(child: SizedBox()),
// CustomFloatingActionButton(
// Icons.arrow_forward,
// "right-${DateTime.now()}",
// _next,
// ),
SizedBox(width: 16),
],
),
)
],
),
bottomSheet: ExplainingBottomSheet(
"4. Similar nodes get clustered to form communities.",
),
);
}
}
import 'package:dashboard/ui/schema/util/node_small_raw.dart';
import 'package:flutter/material.dart';
class TraceSmall extends StatelessWidget {
final double x;
final double y;
final Color color;
final int n;
TraceSmall(this.x, this.y, this.color, {this.n = 0});
@override
Widget build(BuildContext context) {
return Positioned(
top: y,
left: x,
child: TraceSmallRaw(color),
);
}
}
import 'package:dashboard/ui/schema/page4/trace_small.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class UnclusteredData extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 400,
height: 200,
decoration: BoxDecoration(
color: Colors.blue[50],
borderRadius: BorderRadius.all(Radius.circular(10)),
border: Border.all(
color: Colors.black,
width: 3,
)),
child: Stack(
children: [
TraceSmall(10, 10, Colors.blue[100]),
TraceSmall(10, 100, Colors.blue[100]),
TraceSmall(80, 90, Colors.blue[100]),
TraceSmall(150, 110, Colors.blue[100]),
TraceSmall(110, 40, Colors.blue[100]),
TraceSmall(160, 10, Colors.blue[100]),
TraceSmall(300, 10, Colors.blue[100]),
TraceSmall(230, 50, Colors.blue[100]),
TraceSmall(190, 140, Colors.blue[100]),
TraceSmall(250, 130, Colors.blue[100]),
TraceSmall(310, 100, Colors.blue[100]),
],
),
),
Text(
"Traces in the Upvotes Layer (Unclustered)",
style: TextStyle(
color: ColorHolder.color2,
),
),
SizedBox(height: 16),
Container(
width: 400,
height: 200,
decoration: BoxDecoration(
color: Colors.red[50],
borderRadius: BorderRadius.all(Radius.circular(10)),
border: Border.all(
color: Colors.black,
width: 3,
)),
child: Stack(
children: [
TraceSmall(340, 10, Colors.red[100]),
TraceSmall(340, 100, Colors.red[100]),
TraceSmall(280, 90, Colors.red[100]),
TraceSmall(210, 110, Colors.red[100]),
TraceSmall(250, 40, Colors.red[100]),
TraceSmall(190, 10, Colors.red[100]),
TraceSmall(50, 10, Colors.red[100]),
TraceSmall(120, 50, Colors.red[100]),
TraceSmall(160, 140, Colors.red[100]),
TraceSmall(100, 130, Colors.red[100]),
TraceSmall(40, 120, Colors.red[100]),
],
),
),
Text(
"Traces in the Engagement Layer (Unclustered)",
style: TextStyle(
color: ColorHolder.color2,
),
),
],
);
}
}
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class ExplainingBottomSheet extends StatelessWidget {
final String message;
ExplainingBottomSheet(this.message);
@override
Widget build(BuildContext context) {
return Container(
color: ColorHolder.color4,
height: 100,
width: double.infinity,
alignment: Alignment.center,
child: Text(
message,
style: TextStyle(
fontSize: 30,
color: ColorHolder.color2,
),
),
);
}
}
import 'package:flutter/material.dart';
class CustomFloatingActionButton extends StatelessWidget {
final IconData icon;
final Function onClick;
final String tag;
CustomFloatingActionButton(this.icon, this.tag, this.onClick);
@override
Widget build(BuildContext context) {
return FloatingActionButton(
onPressed: onClick,
child: Icon(icon),
heroTag: "$tag-${DateTime.now()}",
);
}
}
import 'package:dashboard/ui/schema/util/single_layer_card.dart';
import 'package:flutter/material.dart';
class LayerInformation extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
SingleLayerCard("Upvotes Layer", "Upvotes, Percentage Upvoted"),
SingleLayerCard("Engagement Layer", "Number of Comments"),
],
);
}
}
import 'package:flutter/material.dart';
class Node extends StatelessWidget {
final String layerName;
final Color color;
final List<String> fields;
final List<String> values;
Node(this.layerName, this.fields, this.values, this.color) {
if (fields.length != values.length)
throw Exception("fields must have the same length as values");
if (fields.length == 0)
throw Exception("there must be at least one field provided");
}
@override
Widget build(BuildContext context) {
return // upvote trace
SizedBox(
width: 350,
child: Card(
color: color,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.only(left: 22),
child: Text(
"Node ($layerName)",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 28,
),
),
),
DataTable(
columnSpacing: 16,
dataRowHeight: 48,
headingTextStyle: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 20,
),
columns: [
DataColumn(label: Text("Field")),
DataColumn(label: Text("Value")),
],
rows: fields
.map(
(field) => DataRow(cells: [
DataCell(Text(field)),
DataCell(Text(values[fields.indexOf(field)]))
]),
)
.toList()),
],
),
),
),
);
}
}
import 'package:flutter/material.dart';
class TraceSmallRaw extends StatelessWidget {
final Color color;
TraceSmallRaw(this.color);
@override
Widget build(BuildContext context) {
return Container(
height: 50,
width: 50,
decoration: BoxDecoration(
color: color,
shape: BoxShape.circle,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("N"),
],
),
);
}
}
import 'package:animated_text_kit/animated_text_kit.dart';
import 'package:dashboard/constants/schema_demo_constants.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
enum PostStatus { WRITING, SENDING, DONE }
......@@ -54,6 +55,7 @@ class _WrittenPostState extends State<WrittenPost> {
height: 270,
width: 400,
child: Card(
color: ColorHolder.color2,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
......
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class SingleLayerCard extends StatelessWidget {
final String layerName;
final String layerProperties;
SingleLayerCard(this.layerName, this.layerProperties);
@override
Widget build(BuildContext context) {
return SizedBox(
width: 350,
child: Card(
color: ColorHolder.color2,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.only(left: 22),
child: Text(
layerName,
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 28,
),
),
),
DataTable(
columnSpacing: 16,
dataRowHeight: 48,
headingTextStyle: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 20,
),
columns: [
DataColumn(label: Text("Field")),
DataColumn(label: Text("Value")),
],
rows: [
DataRow(
cells: [
DataCell(Text("Layer Name")),
DataCell(Text(layerName)),
],
),
DataRow(
cells: [
DataCell(Text("Cluster Properties")),
DataCell(Text(layerProperties)),
],
),
],
),
],
),
),
),
);
}
}
import 'package:dashboard/constants/schema_demo_constants.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class PostTable extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Hero(
tag: "post_table",
child: SizedBox(
width: 350,
child: Card(
color: ColorHolder.color2,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: EdgeInsets.only(left: 22),
child: Text(
"Trace Data",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 28,
),
),
),
DataTable(
columnSpacing: 16,
dataRowHeight: 48,
headingTextStyle: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 20,
),
columns: [
DataColumn(label: Text("Field")),
DataColumn(label: Text("Value")),
],
rows: [
DataRow(cells: [
DataCell(Text("Author")),
DataCell(Text("u/SomeUserOnReddit")),
]),
DataRow(cells: [
DataCell(Text("Timestamp")),
DataCell(Text("${DateTime.now().toIso8601String()}")),
]),
DataRow(cells: [
DataCell(Text("Content")),
DataCell(Text(SchemaDemoConstants.post)),
]),
DataRow(cells: [
DataCell(Text("Upvotes")),
DataCell(Text("198")),
]),
DataRow(cells: [
DataCell(Text("Percentage Upvoted")),
DataCell(Text("0.96")),
]),
DataRow(cells: [
DataCell(Text("Number of Comments")),
DataCell(Text("0")),
]),
DataRow(cells: [
DataCell(Text("Subreddit")),
DataCell(Text("r/Example")),
]),
DataRow(cells: [
DataCell(Text("Id")),
DataCell(Text("a8bf26")),
]),
],
),
],
),
),
),
),
);
}
}
import 'package:dashboard/ui/schema/page4/trace_small.dart';
import 'package:dashboard/ui/schema/util/node.dart';
import 'package:dashboard/ui/schema/util/node_small_raw.dart';
import 'package:dashboard/ui/theme/color_holder.dart';
import 'package:flutter/material.dart';
class TracesList extends StatelessWidget {
final bool small;
TracesList({this.small = false});
@override
Widget build(BuildContext context) {
return Hero(
tag: "traces_list",
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
Node(
"Upvotes",
["Upvotes", "Percentage Upvoted"],
["198", "0.96"],
Colors.blue[100],
),
if (!small)
Icon(
Icons.chevron_right,
color: ColorHolder.color2,
),
if (!small) TraceSmallRaw(Colors.blue[100]),
],
),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Node(
"Engagement",
["Number of Comments"],
["0"],
Colors.red[100],
),
if (!small)
Icon(
Icons.chevron_right,
color: ColorHolder.color2,
),
if (!small) TraceSmallRaw(Colors.red[100]),
],
),
],
),
);
}
}
import 'package:dashboard/constants/schema_demo_constants.dart';
import 'package:dashboard/ui/schema/index.dart';
import 'package:flutter/material.dart';
class LoginForm extends StatefulWidget {
......@@ -84,6 +86,9 @@ class _LoginFormState extends State<LoginForm> {
),
// login button
SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton.icon(
onPressed: _submit,
icon: Icon(
......@@ -102,6 +107,29 @@ class _LoginFormState extends State<LoginForm> {
padding: EdgeInsets.all(18),
),
),
SizedBox(width: 16),
TextButton.icon(
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SchemaDemo(),
),
),
icon: Icon(
Icons.help,
size: 32,
color: Colors.white,
),
label: Text(
"How does it work?",
style: TextStyle(fontSize: 20, color: Colors.white),
),
style: TextButton.styleFrom(
backgroundColor: Theme.of(context).primaryColor,
padding: EdgeInsets.all(18),
),
),
],
),
],
),
),
......
......@@ -17,9 +17,9 @@ class ColorHolder {
static Color get color3 => Color.fromRGBO(55, 57, 46, 1);
///
/// royal blue dark
/// material blue
///
static Color get color4 => Color.fromRGBO(34, 42, 104, 1);
static Color get color4 => Colors.blue;
///
/// royal blue dark
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment