2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +00:00

Move Drawer to separate file

- Now consistent drawer is accessible across all views
This commit is contained in:
Oliver Walters 2020-04-04 10:48:48 +11:00
parent aa865eea1b
commit 6d3db243c3
6 changed files with 132 additions and 61 deletions

View File

@ -1,6 +1,7 @@
import 'package:InvenTree/inventree/stock.dart'; import 'package:InvenTree/inventree/stock.dart';
import 'package:InvenTree/widget/category_display.dart'; import 'package:InvenTree/widget/category_display.dart';
import 'package:InvenTree/widget/location_display.dart'; import 'package:InvenTree/widget/location_display.dart';
import 'package:InvenTree/widget/drawer.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
@ -103,28 +104,6 @@ class _MyHomePageState extends State<MyHomePage> {
_MyHomePageState() : super(); _MyHomePageState() : super();
void _login() {
Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeSettingsWidget()));
}
void _goHome() {
// Reset the stack, go to "home"
Navigator.pushNamedAndRemoveUntil(context, "/", (r) => false);
}
void _showParts() {
// Construct a top-level category display (initialize with a null category)
Navigator.push(context, MaterialPageRoute(builder: (context) => CategoryDisplayWidget(null)));
}
void _scanCode() async {
scanQrCode(context);
}
void _showStock() {
Navigator.push(context, MaterialPageRoute(builder: (context) => LocationDisplayWidget(null)));
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// This method is rerun every time setState is called, for instance as done // This method is rerun every time setState is called, for instance as done
@ -138,46 +117,15 @@ class _MyHomePageState extends State<MyHomePage> {
// Here we take the value from the MyHomePage object that was created by // Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title. // the App.build method, and use it to set our appbar title.
title: Text(widget.title), title: Text(widget.title),
/* actions: <Widget>[
leading: IconButton( IconButton(
icon: Icon(Icons.menu), icon: Icon(Icons.search),
tooltip: "Menu", tooltip: 'Search',
onPressed: null, onPressed: null,
) ),
*/ ],
),
drawer: new Drawer(
child: new ListView(
children: <Widget>[
new ListTile(
leading: new Image.asset("assets/image/icon.png",
fit: BoxFit.scaleDown,
),
title: new Text("InvenTree"),
onTap: _goHome,
),
new Divider(),
new ListTile(
title: new Text("Scan"),
onTap: _scanCode,
),
new ListTile(
title: new Text("Parts"),
onTap: _showParts,
),
new ListTile(
title: new Text("Stock"),
onTap: _showStock,
),
new Divider(),
new ListTile(
title: new Text("Settings"),
leading: new Icon(Icons.settings),
onTap: _login,
),
],
)
), ),
drawer: new InvenTreeDrawer(context),
body: Center( body: Center(
// Center is a layout widget. It takes a single child and positions it // Center is a layout widget. It takes a single child and positions it
// in the middle of the parent. // in the middle of the parent.

View File

@ -1,6 +1,9 @@
import 'package:InvenTree/inventree/part.dart'; import 'package:InvenTree/inventree/part.dart';
import 'package:InvenTree/widget/part_display.dart'; import 'package:InvenTree/widget/part_display.dart';
import 'package:InvenTree/widget/drawer.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -82,6 +85,7 @@ class _CategoryDisplayState extends State<CategoryDisplayWidget> {
appBar: AppBar( appBar: AppBar(
title: Text(_titleString), title: Text(_titleString),
), ),
drawer: new InvenTreeDrawer(context),
body: Center( body: Center(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

111
lib/widget/drawer.dart Normal file
View File

@ -0,0 +1,111 @@
import 'package:InvenTree/barcode.dart';
import 'package:flutter/material.dart';
import 'package:InvenTree/widget/category_display.dart';
import 'package:InvenTree/widget/location_display.dart';
import 'package:InvenTree/settings.dart';
class InvenTreeDrawer extends StatelessWidget {
final BuildContext context;
InvenTreeDrawer(this.context);
void _closeDrawer() {
// Close the drawer
Navigator.of(context).pop();
}
/*
* Return to the 'home' screen.
* This will empty the navigation stack.
*/
void _home() {
_closeDrawer();
Navigator.pushNamedAndRemoveUntil(context, "/", (r) => false);
}
/*
* Launch the camera to scan a QR code.
* Upon successful scan, data are passed off to be decoded.
*/
void _scan() async {
_closeDrawer();
scanQrCode(context);
}
/*
* Display the top-level PartCategory list
*/
void _showParts() {
_closeDrawer();
Navigator.push(context, MaterialPageRoute(builder: (context) => CategoryDisplayWidget(null)));
}
/*
* Display the top-level StockLocation list
*/
void _showStock() {
_closeDrawer();
Navigator.push(context, MaterialPageRoute(builder: (context) => LocationDisplayWidget(null)));
}
/*
* Load settings widget
*/
void _settings() {
_closeDrawer();
Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeSettingsWidget()));
}
@override
Widget build(BuildContext context) {
return Drawer(
child: new ListView(
children: <Widget>[
new ListTile(
leading: new Image.asset(
"assets/image/icon.png",
fit: BoxFit.scaleDown,
),
title: new Text("InvenTree"),
onTap: _home,
),
new Divider(),
new ListTile(
title: new Text("Search"),
leading: new Icon(Icons.search),
onTap: null,
),
new ListTile(
title: new Text("Scan"),
onTap: _scan,
),
new Divider(),
new ListTile(
title: new Text("Parts"),
onTap: _showParts,
),
new ListTile(
title: new Text("Stock"),
onTap: _showStock,
),
new ListTile(
title: new Text("Suppliers"),
onTap: null,
),
new Divider(),
new ListTile(
title: new Text("Settings"),
leading: new Icon(Icons.settings),
onTap: _settings,
),
]
)
);
}
}

View File

@ -1,5 +1,6 @@
import 'package:InvenTree/inventree/stock.dart'; import 'package:InvenTree/inventree/stock.dart';
import 'package:InvenTree/widget/drawer.dart';
import 'package:InvenTree/widget/stock_display.dart'; import 'package:InvenTree/widget/stock_display.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -88,6 +89,7 @@ class _LocationDisplayState extends State<LocationDisplayWidget> {
appBar: AppBar( appBar: AppBar(
title: Text(_title), title: Text(_title),
), ),
drawer: new InvenTreeDrawer(context),
body: Center( body: Center(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

View File

@ -4,6 +4,8 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:InvenTree/widget/drawer.dart';
class PartDisplayWidget extends StatefulWidget { class PartDisplayWidget extends StatefulWidget {
PartDisplayWidget(this.part, {Key key}) : super(key: key); PartDisplayWidget(this.part, {Key key}) : super(key: key);
@ -38,6 +40,7 @@ class _PartDisplayState extends State<PartDisplayWidget> {
appBar: AppBar( appBar: AppBar(
title: Text(_title), title: Text(_title),
), ),
drawer: new InvenTreeDrawer(context),
body: Center( body: Center(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

View File

@ -4,6 +4,8 @@ import 'package:InvenTree/inventree/stock.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:InvenTree/widget/drawer.dart';
class StockItemDisplayWidget extends StatefulWidget { class StockItemDisplayWidget extends StatefulWidget {
StockItemDisplayWidget(this.item, {Key key}) : super(key: key); StockItemDisplayWidget(this.item, {Key key}) : super(key: key);
@ -37,6 +39,7 @@ class _StockItemDisplayState extends State<StockItemDisplayWidget> {
appBar: AppBar( appBar: AppBar(
title: Text(_title), title: Text(_title),
), ),
drawer: new InvenTreeDrawer(context),
body: Center( body: Center(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,