[client] Build pages from routes

This commit is contained in:
Abhishek Shroff
2025-06-27 19:57:04 +05:30
parent 25c89d8a0c
commit 95a7e8fa19
3 changed files with 33 additions and 50 deletions

View File

@@ -3,10 +3,6 @@ import 'package:offtheline/offtheline.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/ui/app/dialog_scaffold.dart';
import 'package:phylum/ui/app/router.dart';
import 'package:phylum/ui/app/routes.dart';
import 'package:phylum/ui/login/login_page.dart';
import 'package:phylum/ui/layout/app_layout.dart';
import 'package:phylum/ui/login/reset_password_page.dart';
import 'package:phylum/util/dialogs.dart';
import 'package:provider/provider.dart';
@@ -80,22 +76,6 @@ class _AccountSelectorState extends State<AccountSelector> {
);
}
final route = context.select<PhylumRouterDelegate, ResetPasswordRoute?>((state) =>
state.currentConfiguration is ResetPasswordRoute ? state.currentConfiguration as ResetPasswordRoute : null);
if (route != null) {
return ResetPasswordPage(
instanceUrl: route.instanceUri,
email: route.email,
token: route.token,
);
}
final account =
context.select<AccountManagerState<PhylumAccount>, PhylumAccount?>((state) => state.selectedAccount);
if (account == null) {
return const LoginPage();
}
return AppLayout.create(account);
return context.watch<PhylumRouterDelegate>().currentConfiguration?.buildPage(context) ?? Container();
}
}

View File

@@ -2,16 +2,11 @@ import 'dart:async';
import 'dart:js_interop';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:offtheline/offtheline.dart';
import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/ui/app/dialog_scaffold.dart';
import 'package:phylum/ui/app/routes.dart';
import 'package:phylum/ui/app/router.dart';
import 'package:phylum/ui/login/login_page.dart';
import 'package:phylum/ui/layout/app_layout.dart';
import 'package:phylum/ui/login/reset_password_page.dart';
import 'package:phylum/util/dialogs.dart';
import 'package:phylum/util/logging.dart';
import 'package:provider/provider.dart';
@@ -125,30 +120,7 @@ class _AccountSelectorState extends State<AccountSelector> {
);
}
final resetRoute = context.select<PhylumRouterDelegate, ResetPasswordRoute?>((state) =>
state.currentConfiguration is ResetPasswordRoute ? state.currentConfiguration as ResetPasswordRoute : null);
if (resetRoute != null) {
return ResetPasswordPage(
instanceUrl: resetRoute.instanceUri,
email: resetRoute.email,
token: resetRoute.token,
);
}
final oauthLoginRoute = context.select<PhylumRouterDelegate, OAuthLoginRoute?>((state) {
return state.currentConfiguration is OAuthLoginRoute ? state.currentConfiguration as OAuthLoginRoute : null;
});
if (oauthLoginRoute != null) {
print('Code: ${oauthLoginRoute.code}');
}
final account =
context.select<AccountManagerState<PhylumAccount>, PhylumAccount?>((state) => state.selectedAccount);
if (account == null) {
return kDebugMode ? const LoginPage() : LoginPage(fixedInstanceUrl: Uri());
}
return AppLayout.create(account);
return context.watch<PhylumRouterDelegate>().currentConfiguration?.buildPage(context) ?? Container();
}
void requestHandoff() {

View File

@@ -1,5 +1,7 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:offtheline/offtheline.dart';
import 'package:phylum/libphylum/db/db.dart';
import 'package:phylum/libphylum/db/resource_helpers.dart';
@@ -7,11 +9,17 @@ import 'package:phylum/libphylum/phylum_account.dart';
import 'package:phylum/libphylum/requests/search_request.dart';
import 'package:phylum/libphylum/requests/shared_resources_request.dart';
import 'package:phylum/libphylum/responses/responses.dart';
import 'package:phylum/ui/layout/app_layout.dart';
import 'package:phylum/ui/login/login_page.dart';
import 'package:phylum/ui/login/reset_password_page.dart';
import 'package:provider/provider.dart';
sealed class PhylumRoute {
Uri get uri;
const PhylumRoute();
Widget buildPage(BuildContext context);
}
class OAuthLoginRoute extends PhylumRoute {
@@ -21,6 +29,11 @@ class OAuthLoginRoute extends PhylumRoute {
@override
Uri get uri => Uri(path: '/login/oauth');
@override
Widget buildPage(BuildContext context) {
return const LoginPage();
}
}
class ResetPasswordRoute extends PhylumRoute {
@@ -32,6 +45,13 @@ class ResetPasswordRoute extends PhylumRoute {
@override
Uri get uri => Uri(path: '/reset_password');
@override
Widget buildPage(BuildContext context) => ResetPasswordPage(
instanceUrl: instanceUri,
email: email,
token: token,
);
}
sealed class ExplorerRoute extends PhylumRoute {
@@ -44,6 +64,17 @@ sealed class ExplorerRoute extends PhylumRoute {
Future<bool> refresh(PhylumAccount account);
Stream<List<Resource>> items(PhylumAccount account);
@override
Widget buildPage(BuildContext context) {
final account =
context.select<AccountManagerState<PhylumAccount>, PhylumAccount?>((state) => state.selectedAccount);
if (account == null) {
return kDebugMode ? const LoginPage() : LoginPage(fixedInstanceUrl: Uri());
}
return AppLayout.create(account);
}
}
class ExplorerRouteHome extends ExplorerRouteFolder {