import 'package:InvenTree/user_profile.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:InvenTree/barcode.dart'; import 'package:InvenTree/api.dart'; import 'package:InvenTree/widget/category_display.dart'; import 'package:InvenTree/widget/company_list.dart'; import 'package:InvenTree/widget/location_display.dart'; import 'package:InvenTree/widget/search.dart'; import 'package:InvenTree/widget/drawer.dart'; class InvenTreeHomePage extends StatefulWidget { InvenTreeHomePage({Key key}) : super(key: key); @override _InvenTreeHomePageState createState() => _InvenTreeHomePageState(); } class _InvenTreeHomePageState extends State { _InvenTreeHomePageState() : super() { } String _serverStatus = "Connecting to server"; String _serverMessage = ""; bool _serverConnection = false; FaIcon _serverIcon = new FaIcon(FontAwesomeIcons.spinner); Color _serverStatusColor = Color.fromARGB(255, 50, 50, 250); void onConnectSuccess(String msg) async { final profile = await UserProfileDBManager().getSelectedProfile(); String address = profile?.server ?? 'unknown server address'; _serverConnection = true; _serverMessage = msg; _serverStatus = "Connected to ${address}"; _serverStatusColor = Color.fromARGB(255, 50, 250, 50); _serverIcon = new FaIcon(FontAwesomeIcons.checkCircle, color: _serverStatusColor); setState(() {}); } void onConnectFailure(String msg) async { final profile = await UserProfileDBManager().getSelectedProfile(); _serverConnection = false; _serverMessage = msg; _serverStatus = "Could not connect to ${profile?.server}"; _serverStatusColor = Color.fromARGB(255, 250, 50, 50); _serverIcon = new FaIcon(FontAwesomeIcons.timesCircle, color: _serverStatusColor); setState(() {}); } /* * Test the server connection */ void _checkServerConnection(BuildContext context) async { // Reset the connection status variables _serverStatus = "Connecting to server"; _serverMessage = ""; _serverConnection = false; _serverIcon = new FaIcon(FontAwesomeIcons.spinner); _serverStatusColor = Color.fromARGB(255, 50, 50, 250); InvenTreeAPI().connect(context).then((bool result) { if (result) { onConnectSuccess(""); } else { onConnectFailure("Could not connect to server"); } }); // Update widget state setState(() {}); } void _search() { if (!InvenTreeAPI().checkConnection(context)) return; Navigator.push(context, MaterialPageRoute(builder: (context) => SearchWidget())); } void _scan() { if (!InvenTreeAPI().checkConnection(context)) return; scanQrCode(context); } void _parts() { if (!InvenTreeAPI().checkConnection(context)) return; Navigator.push(context, MaterialPageRoute(builder: (context) => CategoryDisplayWidget(null))); } void _stock() { if (!InvenTreeAPI().checkConnection(context)) return; Navigator.push(context, MaterialPageRoute(builder: (context) => LocationDisplayWidget(null))); } void _suppliers() { if (!InvenTreeAPI().checkConnection(context)) return; Navigator.push(context, MaterialPageRoute(builder: (context) => SupplierListWidget())); } void _manufacturers() { if (!InvenTreeAPI().checkConnection(context)) return; Navigator.push(context, MaterialPageRoute(builder: (context) => ManufacturerListWidget())); } void _customers() { if (!InvenTreeAPI().checkConnection(context)) return; Navigator.push(context, MaterialPageRoute(builder: (context) => CustomerListWidget())); } void _unsupported() { showDialog( context: context, child: new SimpleDialog( title: new Text("Unsupported"), children: [ ListTile( title: Text("This feature is not yet supported"), subtitle: Text("It will be supported in an upcoming release"), ) ], ) ); } @override Widget build(BuildContext context) { // This method is rerun every time setState is called, for instance as done // by the _incrementCounter method above. // // The Flutter framework has been optimized to make rerunning build methods // fast, so that you can just rebuild anything that needs updating rather // than having to individually change instances of widgets. return Scaffold( appBar: AppBar( title: Text(I18N.of(context).appTitle), actions: [ /* IconButton( icon: FaIcon(FontAwesomeIcons.search), tooltip: 'Search', onPressed: _search, ), */ ], ), drawer: new InvenTreeDrawer(context), body: Center( // Center is a layout widget. It takes a single child and positions it // in the middle of the parent. child: Column( mainAxisAlignment: MainAxisAlignment.center, children: ([ Spacer(), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ /* Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.search), tooltip: 'Search', onPressed: _search, ), Text("Search"), ], ), */ Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.barcode), tooltip: I18N.of(context).scanBarcode, onPressed: _scan, ), Text(I18N.of(context).scanBarcode), ], ), ], ), Spacer(), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.shapes), tooltip: I18N.of(context).parts, onPressed: _parts, ), Text(I18N.of(context).parts), ], ), Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.boxes), tooltip: I18N.of(context).stock, onPressed: _stock, ), Text(I18N.of(context).stock), ], ), ], ), Spacer(), // TODO - Re-add these when the features actually do something.. /* Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.building), tooltip: "Suppliers", onPressed: _suppliers, ), Text("Suppliers"), ], ), Column( children: [ IconButton( icon: FaIcon(FontAwesomeIcons.industry), tooltip: "Manufacturers", onPressed: _manufacturers, ), Text("Manufacturers") ], ), Column( children: [ IconButton( icon: FaIcon(FontAwesomeIcons.userTie), tooltip: "Customers", onPressed: _customers, ), Text("Customers"), ] ) ], ), Spacer(), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.tools), tooltip: "Build", onPressed: _unsupported, ), Text("Build"), ], ), Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.shoppingCart), tooltip: "Order", onPressed: _unsupported, ), Text("Order"), ] ), Column( children: [ IconButton( icon: new FaIcon(FontAwesomeIcons.truck), tooltip: "Ship", onPressed: _unsupported, ), Text("Ship"), ] ) ], ), Spacer(), */ Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: ListTile( title: Text("$_serverStatus", style: TextStyle(color: _serverStatusColor), ), subtitle: Text("$_serverMessage", style: TextStyle(color: _serverStatusColor), ), leading: _serverIcon, onTap: () { if (!_serverConnection) { _checkServerConnection(context); } }, ), ), ], ), ]), ), ), ); } }