mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-05-21 05:38:46 -05:00
76 lines
2.5 KiB
Dart
76 lines
2.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_state_notifier/flutter_state_notifier.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:offtheline/offtheline.dart';
|
|
import 'package:phylum/app_shortcuts.dart';
|
|
import 'package:phylum/libphylum/phylum_account.dart';
|
|
import 'package:phylum/ui/app/app_layout.dart';
|
|
import 'package:phylum/ui/app/nav_forward.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
class PhylumApp extends StatefulWidget {
|
|
final PhylumAccount account;
|
|
|
|
PhylumApp({required this.account}) : super(key: ValueKey(account.id));
|
|
|
|
@override
|
|
State<PhylumApp> createState() => _PhylumAppState();
|
|
}
|
|
|
|
class _PhylumAppState extends State<PhylumApp> {
|
|
final historyManager = NavForwardManager();
|
|
final navigatorKey = GlobalKey<NavigatorState>();
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MultiProvider(
|
|
providers: [
|
|
Provider.value(value: widget.account),
|
|
StateNotifierProvider<ApiActionQueue, ApiActionQueueState>.value(key: ValueKey(widget.account.id), value: widget.account.actionQueue),
|
|
StateNotifierProvider<NavForwardManager, NavForwardState>.value(key: ValueKey(widget.account.id), value: historyManager),
|
|
],
|
|
child: MaterialApp.router(
|
|
key: ValueKey(widget.account),
|
|
title: 'Phylum',
|
|
debugShowCheckedModeBanner: false,
|
|
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.orange)),
|
|
darkTheme: ThemeData.dark(),
|
|
routerConfig: createRouter(widget.account),
|
|
shortcuts: getAppShortcuts(),
|
|
),
|
|
);
|
|
}
|
|
|
|
GoRouter createRouter(PhylumAccount account) => GoRouter(
|
|
navigatorKey: navigatorKey,
|
|
routes: [
|
|
GoRoute(
|
|
name: 'root',
|
|
path: '/',
|
|
redirect: (context, state) => '/home',
|
|
),
|
|
GoRoute(
|
|
name: 'home',
|
|
path: '/home',
|
|
pageBuilder: (context, state) => NoTransitionPage(
|
|
name: state.name,
|
|
child: AppScaffold(folderId: account.userHome),
|
|
arguments: account.userHome,
|
|
),
|
|
),
|
|
GoRoute(
|
|
name: 'folder',
|
|
path: '/folders/:id',
|
|
pageBuilder: (context, state) => NoTransitionPage(
|
|
name: state.name,
|
|
child: AppScaffold(folderId: state.pathParameters['id']!),
|
|
arguments: state.pathParameters['id'],
|
|
),
|
|
),
|
|
],
|
|
observers: [
|
|
historyManager.navObserver,
|
|
],
|
|
);
|
|
}
|