Start developping the frontend
This commit is contained in:
parent
b1453265e5
commit
d5b2ef18ab
61
lib/components/menubar.dart
Normal file
61
lib/components/menubar.dart
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// Flutter code sample for [AppBar].
|
||||||
|
|
||||||
|
class MenuPanel extends StatefulWidget implements PreferredSizeWidget {
|
||||||
|
final TabName tab;
|
||||||
|
MenuPanel({super.key, required this.tab}) : preferredSize = const Size.fromHeight(kToolbarHeight);
|
||||||
|
@override
|
||||||
|
final Size preferredSize; // default is 56.0
|
||||||
|
@override
|
||||||
|
State<StatefulWidget> createState() => _MenuPanel();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
enum TabName { home, catalog, about }
|
||||||
|
|
||||||
|
class _MenuPanel extends State<MenuPanel> {
|
||||||
|
final String linkCatalog = "catalog";
|
||||||
|
final String linkAbout = "about";
|
||||||
|
final String linkHome = "home";
|
||||||
|
@override
|
||||||
|
PreferredSizeWidget build(BuildContext context) {
|
||||||
|
final TabName tab = widget.tab;
|
||||||
|
return AppBar(
|
||||||
|
title: Row(
|
||||||
|
children: [
|
||||||
|
TextButton(
|
||||||
|
child: const Text("Softplayer"),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pushNamed(context, "/");
|
||||||
|
}),
|
||||||
|
TextButton(
|
||||||
|
child: Text(linkHome,
|
||||||
|
style: (tab == TabName.home)? const TextStyle(decoration: TextDecoration.underline) : const TextStyle(),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pushNamed(context, "/");
|
||||||
|
}),
|
||||||
|
TextButton(
|
||||||
|
child: Text(linkCatalog,
|
||||||
|
style: (tab == TabName.catalog)? const TextStyle(decoration: TextDecoration.underline) : const TextStyle(),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pushNamed(context, "/catalog");
|
||||||
|
}),
|
||||||
|
TextButton(
|
||||||
|
child: Text(linkAbout,
|
||||||
|
style: (tab == TabName.about)? const TextStyle(decoration: TextDecoration.underline) : const TextStyle(),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pushNamed(context, "/about");
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
automaticallyImplyLeading: false,
|
||||||
|
actions: <Widget>[
|
||||||
|
IconButton(onPressed: () => print("acc"), icon: Icon(Icons.account_circle))
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
103
lib/main.dart
103
lib/main.dart
@ -1,28 +1,32 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:grpc/grpc.dart';
|
import 'package:softplayer_web/components/menubar.dart';
|
||||||
import 'package:softplayer_dart_proto/accounts/accounts_v1.pb.dart';
|
import 'package:softplayer_web/pages/about.dart';
|
||||||
import 'package:softplayer_dart_proto/main.dart';
|
import 'package:softplayer_web/pages/catalog.dart';
|
||||||
import 'package:grpc/grpc_web.dart';
|
import 'package:softplayer_web/pages/home.dart';
|
||||||
|
// import 'package:grpc/grpc.dart';
|
||||||
|
// import 'package:softplayer_dart_proto/accounts/accounts_v1.pb.dart';
|
||||||
|
// import 'package:softplayer_dart_proto/main.dart';
|
||||||
|
// import 'package:grpc/grpc_web.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
GrpcWebClientChannel channel = GrpcWebClientChannel.xhr(Uri.parse('http://softplayer.badhouseplants.net:80'));
|
// GrpcWebClientChannel channel = GrpcWebClientChannel.xhr(Uri.parse('http://softplayer.badhouseplants.net:80'));
|
||||||
final stub = AccountsClient(channel);
|
// final stub = AccountsClient(channel);
|
||||||
final accWithPassword = AccountWithPassword(
|
// final accWithPassword = AccountWithPassword(
|
||||||
data: AccountData(
|
// data: AccountData(
|
||||||
name: "test",
|
// name: "test",
|
||||||
email: "test@test.test",
|
// email: "test@test.test",
|
||||||
),
|
// ),
|
||||||
accountPassword: AccountPassword(password: "test"),
|
// accountPassword: AccountPassword(password: "test"),
|
||||||
);
|
// );
|
||||||
|
//
|
||||||
try {
|
// try {
|
||||||
final response = await stub.signUp(
|
// final response = await stub.signUp(
|
||||||
accWithPassword,
|
// accWithPassword,
|
||||||
);
|
// );
|
||||||
print('Greeter client received: ${response}');
|
// print('Greeter client received: ${response}');
|
||||||
} catch (e) {
|
// } catch (e) {
|
||||||
print('Caught error: $e');
|
// print('Caught error: $e');
|
||||||
}
|
// }
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,59 +37,20 @@ class MyApp extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
|
debugShowCheckedModeBanner: false,
|
||||||
title: 'Flutter Demo',
|
title: 'Flutter Demo',
|
||||||
|
routes: {
|
||||||
|
'/': (context) => HomePage(),
|
||||||
|
'/catalog': (context) => CatalogPage(),
|
||||||
|
'/about': (context) => AboutPage(),
|
||||||
|
},
|
||||||
|
|
||||||
theme: ThemeData(
|
theme: ThemeData(
|
||||||
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
),
|
),
|
||||||
home: const MyHomePage(title: 'Flutter Demo Home Page'),
|
//home: const MyHomePage(title: 'Flutter Demo Home Page'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyHomePage extends StatefulWidget {
|
|
||||||
const MyHomePage({super.key, required this.title});
|
|
||||||
final String title;
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<MyHomePage> createState() => _MyHomePageState();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class _MyHomePageState extends State<MyHomePage> {
|
|
||||||
int _counter = 0;
|
|
||||||
void _incrementCounter() {
|
|
||||||
setState(() {
|
|
||||||
_counter++;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Scaffold(
|
|
||||||
appBar: AppBar(
|
|
||||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
|
||||||
title: Text(widget.title),
|
|
||||||
),
|
|
||||||
body: Center(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: <Widget>[
|
|
||||||
const Text(
|
|
||||||
'You have pushed the button this many times:',
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
'$_counter',
|
|
||||||
style: Theme.of(context).textTheme.headlineMedium,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
floatingActionButton: FloatingActionButton(
|
|
||||||
onPressed: _incrementCounter,
|
|
||||||
tooltip: 'Increment',
|
|
||||||
child: const Icon(Icons.add),
|
|
||||||
), // This trailing comma makes auto-formatting nicer for build methods.
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
33
lib/pages/about.dart
Normal file
33
lib/pages/about.dart
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:softplayer_web/components/menubar.dart';
|
||||||
|
|
||||||
|
class AboutPage extends StatefulWidget {
|
||||||
|
const AboutPage({super.key});
|
||||||
|
final String title = "about";
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<AboutPage> createState() => _AboutPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AboutPage extends State<AboutPage> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: MenuPanel(tab: TabName.about,),
|
||||||
|
body: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
const Text(
|
||||||
|
'You have pushed the button this many times:',
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'test',
|
||||||
|
style: Theme.of(context).textTheme.headlineMedium,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
45
lib/pages/catalog.dart
Normal file
45
lib/pages/catalog.dart
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:softplayer_web/components/menubar.dart';
|
||||||
|
|
||||||
|
class CatalogPage extends StatefulWidget {
|
||||||
|
const CatalogPage({super.key});
|
||||||
|
final String title = "catalog";
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<CatalogPage> createState() => _CatalogPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _CatalogPage extends State<CatalogPage> {
|
||||||
|
int _counter = 0;
|
||||||
|
void _incrementCounter() {
|
||||||
|
setState(() {
|
||||||
|
_counter++;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: MenuPanel(tab: TabName.catalog),
|
||||||
|
body: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
const Text(
|
||||||
|
'You have pushed the button this many times:',
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'$_counter',
|
||||||
|
style: Theme.of(context).textTheme.headlineMedium,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: _incrementCounter,
|
||||||
|
tooltip: 'Increment v rot',
|
||||||
|
child: const Icon(Icons.hd),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
45
lib/pages/home.dart
Normal file
45
lib/pages/home.dart
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:softplayer_web/components/menubar.dart';
|
||||||
|
|
||||||
|
class HomePage extends StatefulWidget {
|
||||||
|
const HomePage({super.key});
|
||||||
|
final String title = "home";
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<HomePage> createState() => _HomePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _HomePage extends State<HomePage> {
|
||||||
|
int _counter = 0;
|
||||||
|
void _incrementCounter() {
|
||||||
|
setState(() {
|
||||||
|
_counter++;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: MenuPanel(tab: TabName.home),
|
||||||
|
body: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
const Text(
|
||||||
|
'You have pushed the button this many times:',
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'$_counter',
|
||||||
|
style: Theme.of(context).textTheme.headlineMedium,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: _incrementCounter,
|
||||||
|
tooltip: 'Increment',
|
||||||
|
child: const Icon(Icons.tv),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user