nav_layouts_component 0.0.2
nav_layouts_component: ^0.0.2 copied to clipboard
Common layouts with built in navigation capabilities
example/lib/main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:window_manager/window_manager.dart';
import 'package:logging/logging.dart';
import 'package:utilities_ab/logging/init_logging.dart';
import 'package:platform_utilities_component/platform_utilities.dart';
import 'package:nav_layouts_component/nav_layouts.dart';
import 'config/app_config.dart';
import 'screens/home_page.dart';
import 'screens/nav_home_view_1.dart';
import 'screens/nav_home_view_2.dart';
void main() async {
initLogging(
Level.ALL,
logToConsole: true,
);
// On Desktop platforms the minimum size
// of the window is fixed at 240x400
if (!AppPlatform.isWeb && !AppPlatform.isMobile) {
WidgetsFlutterBinding.ensureInitialized();
await windowManager.ensureInitialized();
WindowManager.instance.setMinimumSize(AppConfig.minWindowSize);
WindowManager.instance.setTitle(AppConfig.title);
}
AppPlatform.init().then(
(_) => runApp(
StatefulWrapper(
child: MainApp(),
),
),
);
}
class MainApp extends StatelessWidget {
late final GoRouter _router;
MainApp({super.key}) {
_router = GoRouter(
navigatorKey: GlobalNavigator.key,
initialLocation: '/',
routes: [
const HomePage().route(),
NavHomeView1().route(),
NavHomeView2().route(),
],
);
}
@override
Widget build(BuildContext context) {
AppPlatform.initOnBuild(context);
if (AppPlatform.isDesktop && Platform.isMacOS) {
// On macOS a system menu is a required part of every application
final List<PlatformMenuItem> menus = <PlatformMenuItem>[
PlatformMenu(
label: '', // In macOS the application name is shown in the menu bar
menus: <PlatformMenuItem>[
PlatformMenuItemGroup(
members: <PlatformMenuItem>[
PlatformMenuItem(
label: 'About',
onSelected: () {
showAboutDialog(
context: context,
applicationName: AppConfig.title,
applicationVersion: AppConfig.version,
);
},
),
],
),
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.quit))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.quit),
],
),
];
WidgetsBinding.instance.platformMenuDelegate.setMenus(menus);
}
return MaterialApp.router(
debugShowCheckedModeBanner: false,
title: AppConfig.title,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.indigo,
),
useMaterial3: false,
),
darkTheme: ThemeData(
colorScheme: ColorScheme.fromSeed(
brightness: Brightness.dark,
seedColor: Colors.indigo,
),
useMaterial3: false,
),
routerConfig: _router,
);
}
}