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: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';
|
||||
import 'package:softplayer_web/components/menubar.dart';
|
||||
import 'package:softplayer_web/pages/about.dart';
|
||||
import 'package:softplayer_web/pages/catalog.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 {
|
||||
GrpcWebClientChannel channel = GrpcWebClientChannel.xhr(Uri.parse('http://softplayer.badhouseplants.net:80'));
|
||||
final stub = AccountsClient(channel);
|
||||
final accWithPassword = AccountWithPassword(
|
||||
data: AccountData(
|
||||
name: "test",
|
||||
email: "test@test.test",
|
||||
),
|
||||
accountPassword: AccountPassword(password: "test"),
|
||||
);
|
||||
|
||||
try {
|
||||
final response = await stub.signUp(
|
||||
accWithPassword,
|
||||
);
|
||||
print('Greeter client received: ${response}');
|
||||
} catch (e) {
|
||||
print('Caught error: $e');
|
||||
}
|
||||
// GrpcWebClientChannel channel = GrpcWebClientChannel.xhr(Uri.parse('http://softplayer.badhouseplants.net:80'));
|
||||
// final stub = AccountsClient(channel);
|
||||
// final accWithPassword = AccountWithPassword(
|
||||
// data: AccountData(
|
||||
// name: "test",
|
||||
// email: "test@test.test",
|
||||
// ),
|
||||
// accountPassword: AccountPassword(password: "test"),
|
||||
// );
|
||||
//
|
||||
// try {
|
||||
// final response = await stub.signUp(
|
||||
// accWithPassword,
|
||||
// );
|
||||
// print('Greeter client received: ${response}');
|
||||
// } catch (e) {
|
||||
// print('Caught error: $e');
|
||||
// }
|
||||
runApp(const MyApp());
|
||||
}
|
||||
|
||||
@ -33,59 +37,20 @@ class MyApp extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
title: 'Flutter Demo',
|
||||
routes: {
|
||||
'/': (context) => HomePage(),
|
||||
'/catalog': (context) => CatalogPage(),
|
||||
'/about': (context) => AboutPage(),
|
||||
},
|
||||
|
||||
theme: ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
||||
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