Change desktop version to use the original style of navigation, keep using drawer for mobile devices. Flutter is so cool!! :)

This commit is contained in:
Hyperling 2025-02-11 09:26:59 -07:00
parent cc33458457
commit d77e732551

View File

@ -1,5 +1,6 @@
// Flutter
import 'package:flutter/material.dart';
import 'dart:io';
// Local
import '/pages/expense.dart';
@ -67,51 +68,71 @@ class _HomePageState extends State<HomePage> {
);
}
Widget navigation = NavigationRail(
extended: true,
destinations: [
NavigationRailDestination(
icon: Icon(Icons.payment),
label: Text('Expenses'),
),
NavigationRailDestination(
icon: Icon(Icons.account_balance),
label: Text('Income'),
),
NavigationRailDestination(
icon: Icon(Icons.attach_money),
label: Text('Liquid Assets'),
),
NavigationRailDestination(
icon: Icon(Icons.bar_chart),
label: Text('Reports'),
),
NavigationRailDestination(
icon: Icon(Icons.settings),
label: Text('Settings'),
),
NavigationRailDestination(
icon: Icon(Icons.help),
label: Text('Help'),
),
],
selectedIndex: pageSelected,
onDestinationSelected: (value) {
setState(() {
pageSelected = value;
if (Platform.isAndroid || Platform.isIOS) {
Navigator.pop(context);
}
});
},
);
Widget main = Container(
color: Theme.of(context).colorScheme.primaryContainer,
child: Center(child: page),
);
Widget? drawer, body;
if (Platform.isAndroid || Platform.isIOS) {
drawer = navigation;
body = main;
} else {
drawer = null;
body = Row(
children: [
SafeArea(child: navigation),
Expanded(child: main),
],
);
}
return LayoutBuilder(builder: (context, constraints) {
return Scaffold(
appBar: AppBar(
title: Text("Expense Tracker"),
),
drawer: NavigationRail(
extended: true,
destinations: [
NavigationRailDestination(
icon: Icon(Icons.payment),
label: Text('Expenses'),
),
NavigationRailDestination(
icon: Icon(Icons.account_balance),
label: Text('Income'),
),
NavigationRailDestination(
icon: Icon(Icons.attach_money),
label: Text('Liquid Assets'),
),
NavigationRailDestination(
icon: Icon(Icons.bar_chart),
label: Text('Reports'),
),
NavigationRailDestination(
icon: Icon(Icons.settings),
label: Text('Settings'),
),
NavigationRailDestination(
icon: Icon(Icons.help),
label: Text('Help'),
),
],
selectedIndex: pageSelected,
onDestinationSelected: (value) {
setState(() {
pageSelected = value;
Navigator.pop(context);
});
},
),
body: Container(
color: Theme.of(context).colorScheme.primaryContainer,
child: Center(child: page),
),
drawer: drawer,
body: body,
floatingActionButton: floatingButton,
);
});