2024-04-30 23:38:49 +08:00
|
|
|
import 'package:fl_clash/enum/enum.dart';
|
|
|
|
|
import 'package:fl_clash/models/models.dart';
|
2025-06-07 01:48:34 +08:00
|
|
|
import 'package:fl_clash/providers/providers.dart';
|
2025-05-02 02:24:12 +08:00
|
|
|
import 'package:fl_clash/views/views.dart';
|
2024-04-30 23:38:49 +08:00
|
|
|
import 'package:flutter/material.dart';
|
2025-06-07 01:48:34 +08:00
|
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
2024-04-30 23:38:49 +08:00
|
|
|
|
|
|
|
|
class Navigation {
|
|
|
|
|
static Navigation? _instance;
|
|
|
|
|
|
2025-02-09 18:39:38 +08:00
|
|
|
List<NavigationItem> getItems({
|
2024-04-30 23:38:49 +08:00
|
|
|
bool openLogs = false,
|
|
|
|
|
bool hasProxies = false,
|
|
|
|
|
}) {
|
|
|
|
|
return [
|
2025-06-07 01:48:34 +08:00
|
|
|
NavigationItem(
|
2025-05-02 02:24:12 +08:00
|
|
|
keep: false,
|
2024-04-30 23:38:49 +08:00
|
|
|
icon: Icon(Icons.space_dashboard),
|
2025-02-09 18:39:38 +08:00
|
|
|
label: PageLabel.dashboard,
|
2025-06-07 01:48:34 +08:00
|
|
|
builder: (_) => const DashboardView(
|
2025-02-09 18:39:38 +08:00
|
|
|
key: GlobalObjectKey(PageLabel.dashboard),
|
|
|
|
|
),
|
2024-04-30 23:38:49 +08:00
|
|
|
),
|
|
|
|
|
NavigationItem(
|
2025-02-09 18:39:38 +08:00
|
|
|
icon: const Icon(Icons.article),
|
|
|
|
|
label: PageLabel.proxies,
|
2025-06-07 01:48:34 +08:00
|
|
|
builder: (_) => ProviderScope(
|
|
|
|
|
overrides: [
|
|
|
|
|
queryProvider.overrideWith(
|
|
|
|
|
() => Query(),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
child: const ProxiesView(
|
|
|
|
|
key: GlobalObjectKey(
|
|
|
|
|
PageLabel.proxies,
|
|
|
|
|
),
|
2025-02-09 18:39:38 +08:00
|
|
|
),
|
|
|
|
|
),
|
2024-04-30 23:38:49 +08:00
|
|
|
modes: hasProxies
|
|
|
|
|
? [NavigationItemMode.mobile, NavigationItemMode.desktop]
|
|
|
|
|
: [],
|
|
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
NavigationItem(
|
2024-04-30 23:38:49 +08:00
|
|
|
icon: Icon(Icons.folder),
|
2025-02-09 18:39:38 +08:00
|
|
|
label: PageLabel.profiles,
|
2025-06-07 01:48:34 +08:00
|
|
|
builder: (_) => const ProfilesView(
|
2025-02-09 18:39:38 +08:00
|
|
|
key: GlobalObjectKey(
|
|
|
|
|
PageLabel.profiles,
|
|
|
|
|
),
|
|
|
|
|
),
|
2024-04-30 23:38:49 +08:00
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
NavigationItem(
|
2025-02-03 23:32:00 +08:00
|
|
|
icon: Icon(Icons.view_timeline),
|
2025-02-09 18:39:38 +08:00
|
|
|
label: PageLabel.requests,
|
2025-06-07 01:48:34 +08:00
|
|
|
builder: (_) => const RequestsView(
|
2025-02-09 18:39:38 +08:00
|
|
|
key: GlobalObjectKey(
|
|
|
|
|
PageLabel.requests,
|
|
|
|
|
),
|
|
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
description: 'requestsDesc',
|
2024-06-13 23:43:42 +08:00
|
|
|
modes: [NavigationItemMode.desktop, NavigationItemMode.more],
|
|
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
NavigationItem(
|
2025-02-03 23:32:00 +08:00
|
|
|
icon: Icon(Icons.ballot),
|
2025-02-09 18:39:38 +08:00
|
|
|
label: PageLabel.connections,
|
2025-06-07 01:48:34 +08:00
|
|
|
builder: (_) => const ConnectionsView(
|
2025-02-09 18:39:38 +08:00
|
|
|
key: GlobalObjectKey(
|
|
|
|
|
PageLabel.connections,
|
|
|
|
|
),
|
|
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
description: 'connectionsDesc',
|
2024-06-19 13:13:31 +08:00
|
|
|
modes: [NavigationItemMode.desktop, NavigationItemMode.more],
|
|
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
NavigationItem(
|
2024-08-04 08:21:14 +08:00
|
|
|
icon: Icon(Icons.storage),
|
2025-02-09 18:39:38 +08:00
|
|
|
label: PageLabel.resources,
|
2025-06-07 01:48:34 +08:00
|
|
|
description: 'resourcesDesc',
|
|
|
|
|
builder: (_) => const ResourcesView(
|
2025-02-09 18:39:38 +08:00
|
|
|
key: GlobalObjectKey(
|
|
|
|
|
PageLabel.resources,
|
|
|
|
|
),
|
|
|
|
|
),
|
2025-02-03 23:32:00 +08:00
|
|
|
modes: [NavigationItemMode.more],
|
2024-06-03 18:02:05 +08:00
|
|
|
),
|
2024-04-30 23:38:49 +08:00
|
|
|
NavigationItem(
|
|
|
|
|
icon: const Icon(Icons.adb),
|
2025-02-09 18:39:38 +08:00
|
|
|
label: PageLabel.logs,
|
2025-06-07 01:48:34 +08:00
|
|
|
builder: (_) => const LogsView(
|
2025-02-09 18:39:38 +08:00
|
|
|
key: GlobalObjectKey(
|
|
|
|
|
PageLabel.logs,
|
|
|
|
|
),
|
|
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
description: 'logsDesc',
|
2024-04-30 23:38:49 +08:00
|
|
|
modes: openLogs
|
|
|
|
|
? [NavigationItemMode.desktop, NavigationItemMode.more]
|
|
|
|
|
: [],
|
|
|
|
|
),
|
2025-06-07 01:48:34 +08:00
|
|
|
NavigationItem(
|
2024-04-30 23:38:49 +08:00
|
|
|
icon: Icon(Icons.construction),
|
2025-02-09 18:39:38 +08:00
|
|
|
label: PageLabel.tools,
|
2025-06-07 01:48:34 +08:00
|
|
|
builder: (_) => const ToolsView(
|
2025-02-09 18:39:38 +08:00
|
|
|
key: GlobalObjectKey(
|
|
|
|
|
PageLabel.tools,
|
|
|
|
|
),
|
|
|
|
|
),
|
2024-04-30 23:38:49 +08:00
|
|
|
modes: [NavigationItemMode.desktop, NavigationItemMode.mobile],
|
|
|
|
|
),
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Navigation._internal();
|
|
|
|
|
|
|
|
|
|
factory Navigation() {
|
|
|
|
|
_instance ??= Navigation._internal();
|
|
|
|
|
return _instance!;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final navigation = Navigation();
|