import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gergle/api/commands.dart'; import 'package:gergle/player_ui/main.dart'; import 'package:gergle/state/connection_state_bloc.dart'; class PlayerUIAppBar{ static AppBar appbar(BuildContext context) { return AppBar( title: const Text('Gergle'), backgroundColor: Theme.of(context).primaryColor, actions: [ DropdownMenu( leadingIcon: const Icon(Icons.storage), dropdownMenuEntries: const >[ DropdownMenuEntry( label: 'Georg', value: 'wss://georg.pvv.ntnu.no/ws', ), DropdownMenuEntry( label: 'Brzeczyszczykiewicz', value: 'wss://brzeczyszczykiewicz.pvv.ntnu.no/ws', ), if (kDebugMode) ...[ DropdownMenuEntry( label: 'Local 8009', value: 'ws://localhost:8009/ws', ), ], DropdownMenuEntry( value: null, label: 'Custom...', ), ], onSelected: (value) async { final connectionStateBloc = BlocProvider.of(context); value ??= await _askForServerUriMenu(context); if (value == null) { // TODO: restore previous selection. return; } connectionStateBloc.add(Connect(value)); }, ), playerBlocBuilder(buildProps: (p) => [p.isPausedForCache], builder: (context, state) { // TODO: why is the server not sending paused-for-cache events? if (state.isPausedForCache) { return const CircularProgressIndicator(); } else { return const SizedBox.shrink(); } }), IconButton( icon: const Icon(Icons.settings), onPressed: () { throw UnimplementedError(); }, ), if (kDebugMode) ...[ const SizedBox(width: 50), ], ], ); } static Future _askForServerUriMenu(BuildContext context) async { final textController = TextEditingController(); return await showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('Enter server URI'), content: TextField( decoration: const InputDecoration( labelText: 'Server URI', ), controller: textController, onSubmitted: (value) { Navigator.of(context).pop(value); }, ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('Cancel'), ), TextButton( onPressed: () { final value = textController.text; textController.dispose(); Navigator.of(context).pop(value); }, child: const Text('Connect'), ), ], ); }, ); } }