diff --git a/lib/components/menubar.dart b/lib/components/menubar.dart new file mode 100644 index 0000000..5dd5586 --- /dev/null +++ b/lib/components/menubar.dart @@ -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 createState() => _MenuPanel(); + +} + +enum TabName { home, catalog, about } + +class _MenuPanel extends State { + 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: [ + IconButton(onPressed: () => print("acc"), icon: Icon(Icons.account_circle)) + ], + ); + } + +} diff --git a/lib/main.dart b/lib/main.dart index b067642..4099f0b 100644 --- a/lib/main.dart +++ b/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 createState() => _MyHomePageState(); - -} - -class _MyHomePageState extends State { - 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: [ - 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. - ); - } -} diff --git a/lib/pages/about.dart b/lib/pages/about.dart new file mode 100644 index 0000000..c5f9b9a --- /dev/null +++ b/lib/pages/about.dart @@ -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 createState() => _AboutPage(); +} + +class _AboutPage extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: MenuPanel(tab: TabName.about,), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'You have pushed the button this many times:', + ), + Text( + 'test', + style: Theme.of(context).textTheme.headlineMedium, + ), + ], + ), + ), + ); + } +} diff --git a/lib/pages/catalog.dart b/lib/pages/catalog.dart new file mode 100644 index 0000000..222d192 --- /dev/null +++ b/lib/pages/catalog.dart @@ -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 createState() => _CatalogPage(); +} + +class _CatalogPage extends State { + 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: [ + 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), + ), + ); + } +} diff --git a/lib/pages/home.dart b/lib/pages/home.dart new file mode 100644 index 0000000..acb1951 --- /dev/null +++ b/lib/pages/home.dart @@ -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 createState() => _HomePage(); +} + +class _HomePage extends State { + 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: [ + 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), + ), + ); + } +}