import 'package:flutter/material.dart'; import 'package:grpc/grpc_web.dart'; import 'package:softplayer_web/api/grpc/accounts.dart'; import 'package:softplayer_web/components/menubar.dart'; import 'package:softplayer_web/helpers/page_wrapper.dart'; import 'package:softplayer_web/pages/about.dart'; import 'package:softplayer_web/pages/catalog.dart'; import 'package:softplayer_web/pages/home.dart'; void main() async { const String backendURL = String.fromEnvironment( 'SOFTPLAYER_BACKEND_URL', defaultValue: 'https://softplayer-backend.badhouseplants.net:8080', ); GrpcWebClientChannel grpcChannel = GrpcWebClientChannel.xhr(Uri.parse(backendURL)); runApp(MyApp(channel: grpcChannel)); } class MyApp extends StatelessWidget { MyApp({super.key, required this.channel}); final GrpcWebClientChannel channel; late final AccountsGrpc accountsGrpc = AccountsGrpc(channel: channel); @override Widget build(BuildContext context) { accountsGrpc.init(); return MaterialApp( debugShowCheckedModeBanner: false, title: 'Softplayer', routes: { '/': (context) => PageWrapper( appBar: MenuPanel( tab: TabName.home, accountsGrpc: accountsGrpc, ), child: const HomePage(), ), '/catalog': (context) => PageWrapper( appBar: MenuPanel( tab: TabName.catalog, accountsGrpc: accountsGrpc, ), child: const CatalogPage(), ), '/about': (context) => PageWrapper( appBar: MenuPanel( tab: TabName.about, accountsGrpc: accountsGrpc, ), child: const AboutPage(), ) }, theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), ); } }