Files
venera/lib/pages/main_page.dart
2024-10-26 21:28:12 +08:00

104 lines
2.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:venera/pages/categories_page.dart';
import 'package:venera/pages/search_page.dart';
import 'package:venera/pages/settings/settings_page.dart';
import 'package:venera/utils/translations.dart';
import '../components/components.dart';
import '../foundation/app.dart';
import 'explore_page.dart';
import 'favorites/favorites_page.dart';
import 'home_page.dart';
class MainPage extends StatefulWidget {
const MainPage({super.key});
@override
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
late final NaviObserver _observer;
GlobalKey<NavigatorState>? _navigatorKey;
void to(Widget Function() widget, {bool preventDuplicate = false}) async {
if (preventDuplicate) {
var page = widget();
if ("/${page.runtimeType}" == _observer.routes.last.toString()) return;
}
_navigatorKey!.currentContext!.to(widget);
}
void back() {
_navigatorKey!.currentContext!.pop();
}
@override
void initState() {
_observer = NaviObserver();
_navigatorKey = GlobalKey();
App.mainNavigatorKey = _navigatorKey;
super.initState();
}
final _pages = [
const HomePage(),
const FavoritesPage(),
const ExplorePage(),
const CategoriesPage(),
];
var index = 0;
@override
Widget build(BuildContext context) {
return NaviPane(
observer: _observer,
navigatorKey: _navigatorKey!,
paneItems: [
PaneItemEntry(
label: 'Home'.tl,
icon: Icons.home_outlined,
activeIcon: Icons.home,
),
PaneItemEntry(
label: 'Favorites'.tl,
icon: Icons.local_activity_outlined,
activeIcon: Icons.local_activity,
),
PaneItemEntry(
label: 'Explore'.tl,
icon: Icons.explore_outlined,
activeIcon: Icons.explore,
),
PaneItemEntry(
label: 'Categories'.tl,
icon: Icons.category_outlined,
activeIcon: Icons.category,
),
],
paneActions: [
if(index != 0)
PaneActionEntry(
icon: Icons.search,
label: "Search".tl,
onTap: () {
to(() => const SearchPage());
},
),
PaneActionEntry(
icon: Icons.settings,
label: "Settings".tl,
onTap: () {
to(() => const SettingsPage());
},
)
],
pageBuilder: (index) {
return _pages[index];
},
);
}
}