Leave room support, persist last room, fixes

This commit is contained in:
Henry Hiles 2025-12-03 16:16:30 -05:00
commit 7dfd47a404
No known key found for this signature in database
17 changed files with 312 additions and 136 deletions

View file

@ -1,14 +1,35 @@
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/client_controller.dart";
import "package:nexus/controllers/shared_prefs_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart";
import "package:nexus/helpers/extensions/scheme_to_theme.dart";
import "package:nexus/pages/chat_page.dart";
import "package:nexus/pages/login_page.dart";
import "package:nexus/widgets/error_dialog.dart";
import "package:window_manager/window_manager.dart";
import "package:flutter/material.dart";
import "package:dynamic_system_colors/dynamic_system_colors.dart";
import "package:window_size/window_size.dart";
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
void showError(Object error, [StackTrace? stackTrace]) {
if (error.toString().contains("DioException")) return;
if (error.toString().contains("UTF-16")) return;
debugPrintStack(stackTrace: stackTrace, label: error.toString());
if (navigatorKey.currentContext != null) {
Future.delayed(
Duration.zero,
() => showDialog(
context: navigatorKey.currentContext!,
builder: (_) => ErrorDialog(error, stackTrace),
barrierDismissible: false,
),
);
}
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
@ -17,6 +38,9 @@ void main() async {
WindowOptions(titleBarStyle: TitleBarStyle.hidden),
);
FlutterError.onError = (FlutterErrorDetails details) =>
showError(details.exception.toString(), details.stack);
setWindowMinSize(const Size.square(500));
runApp(ProviderScope(child: const App()));
@ -28,6 +52,7 @@ class App extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) => DynamicColorBuilder(
builder: (lightDynamic, darkDynamic) => MaterialApp(
navigatorKey: navigatorKey,
debugShowCheckedModeBanner: false,
// Use indigo to work around bugs in theme generation
theme: (lightDynamic ?? ColorScheme.fromSeed(seedColor: Colors.indigo))
@ -40,10 +65,14 @@ class App extends ConsumerWidget {
))
.theme,
home: ref
.watch(ClientController.provider)
.watch(SharedPrefsController.provider)
.betterWhen(
data: (client) =>
client.accessToken == null ? LoginPage() : ChatPage(),
data: (_) => ref
.watch(ClientController.provider)
.betterWhen(
data: (client) =>
client.accessToken == null ? LoginPage() : ChatPage(),
),
),
),
);