diff --git a/lib/api.dart b/lib/api.dart index d5a86631..f50f65e9 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -124,10 +124,10 @@ class InvenTreeAPI { showDialog( context: context, child: new SimpleDialog( - title: new Text("Not Connected"), + title: new Text(I18N.of(context).notConnected), children: [ ListTile( - title: Text("Server not connected"), + title: Text(I18N.of(context).serverNotConnected), ) ] ) diff --git a/lib/barcode.dart b/lib/barcode.dart index e28c2688..67dfdf09 100644 --- a/lib/barcode.dart +++ b/lib/barcode.dart @@ -7,6 +7,7 @@ import 'package:qr_code_scanner/qr_code_scanner.dart'; import 'package:InvenTree/inventree/stock.dart'; import 'package:InvenTree/inventree/part.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:InvenTree/api.dart'; @@ -207,7 +208,7 @@ class BarcodeScanHandler extends BarcodeHandler { showDialog( context: _context, child: SimpleDialog( - title: Text("Unknown response"), + title: Text(I18N.of(_context).unknownResponse), children: [ ListTile( title: Text("Response data"), diff --git a/lib/l10n b/lib/l10n index c342d99f..79b2c87e 160000 --- a/lib/l10n +++ b/lib/l10n @@ -1 +1 @@ -Subproject commit c342d99f068f8ac662dfb729fea0b5867aac1cc6 +Subproject commit 79b2c87e9611abbae7a7251ac68cbfed475f7699 diff --git a/lib/settings/about.dart b/lib/settings/about.dart index 666c86de..8f93a118 100644 --- a/lib/settings/about.dart +++ b/lib/settings/about.dart @@ -43,16 +43,16 @@ class InvenTreeAboutWidget extends StatelessWidget { tiles.add( ListTile( - title: Text("Server Instance"), + title: Text(I18N.of(context).serverInstance), subtitle: Text(InvenTreeAPI().instance.isNotEmpty ? InvenTreeAPI().instance : "Not connected"), ) ); } else { tiles.add( ListTile( - title: Text("Not Connected"), + title: Text(I18N.of(context).notConnected), subtitle: Text( - "InvenTree server not connected", + I18N.of(context).serverNotConnected, style: TextStyle(fontStyle: FontStyle.italic), ) ) @@ -77,7 +77,7 @@ class InvenTreeAboutWidget extends StatelessWidget { tiles.add( ListTile( - title: Text("Package Name"), + title: Text(I18N.of(context).packageName), subtitle: Text("${info.packageName}"), ) ); @@ -98,7 +98,7 @@ class InvenTreeAboutWidget extends StatelessWidget { return Scaffold( appBar: AppBar( - title: Text("About InvenTree"), + title: Text(I18N.of(context).appAbout), ), body: ListView( children: ListTile.divideTiles( diff --git a/lib/widget/drawer.dart b/lib/widget/drawer.dart index 70083365..40e70631 100644 --- a/lib/widget/drawer.dart +++ b/lib/widget/drawer.dart @@ -111,7 +111,7 @@ class InvenTreeDrawer extends StatelessWidget { fit: BoxFit.scaleDown, width: 40, ), - title: new Text("InvenTree"), + title: new Text(I18N.of(context).appTitle), onTap: _home, ), /* diff --git a/lib/widget/location_display.dart b/lib/widget/location_display.dart index c6a7ac3c..ef75f408 100644 --- a/lib/widget/location_display.dart +++ b/lib/widget/location_display.dart @@ -6,7 +6,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; - +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:InvenTree/widget/refreshable_state.dart'; class LocationDisplayWidget extends StatefulWidget { @@ -97,8 +97,8 @@ class _LocationDisplayState extends RefreshableState { if (location == null) { return Card( child: ListTile( - title: Text("Stock Locations"), - subtitle: Text("Top level stock location") + title: Text(I18N.of(context).stockLocations), + subtitle: Text(I18N.of(context).stockTopLevel), ) ); } else { @@ -135,14 +135,14 @@ class _LocationDisplayState extends RefreshableState { return BottomNavigationBar( currentIndex: tabIndex, onTap: onTabSelectionChanged, - items: const [ + items: [ BottomNavigationBarItem( icon: FaIcon(FontAwesomeIcons.boxes), - title: Text("Stock"), + title: Text(I18N.of(context).stock), ), BottomNavigationBarItem( icon: FaIcon(FontAwesomeIcons.wrench), - title: Text("Actions"), + title: Text(I18N.of(context).actions), ) ] ); diff --git a/lib/widget/part_detail.dart b/lib/widget/part_detail.dart index 935c2f70..a0930752 100644 --- a/lib/widget/part_detail.dart +++ b/lib/widget/part_detail.dart @@ -5,6 +5,7 @@ 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:url_launcher/url_launcher.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:InvenTree/inventree/part.dart'; import 'package:InvenTree/widget/full_screen_image.dart'; @@ -328,7 +329,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( - title: Text("Create Stock Item"), + title: Text(I18N.of(context).stockItemCreate), leading: FaIcon(FontAwesomeIcons.box), onTap: null, ) @@ -377,14 +378,14 @@ class _PartDisplayState extends RefreshableState { return BottomNavigationBar( currentIndex: tabIndex, onTap: onTabSelectionChanged, - items: const [ + items: [ BottomNavigationBarItem( icon: FaIcon(FontAwesomeIcons.infoCircle), - title: Text("Details"), + title: Text(I18N.of(context).details), ), BottomNavigationBarItem( icon: FaIcon(FontAwesomeIcons.wrench), - title: Text("Actions"), + title: Text(I18N.of(context).actions), ), ] ); diff --git a/lib/widget/stock_detail.dart b/lib/widget/stock_detail.dart index f9ba55df..95d9fb9d 100644 --- a/lib/widget/stock_detail.dart +++ b/lib/widget/stock_detail.dart @@ -303,6 +303,7 @@ class _StockItemDisplayState extends RefreshableState { title: Text("${item.partName}"), subtitle: Text("${item.partDescription}"), leading: InvenTreeAPI().getImage(item.partImage), + trailing: Text(item.serialOrQuantityDisplay()), ) ); } @@ -365,7 +366,7 @@ class _StockItemDisplayState extends RefreshableState { if (item.isSerialized()) { tiles.add( ListTile( - title: Text("Serial Number"), + title: Text(I18N.of(context).serialNumber), leading: FaIcon(FontAwesomeIcons.hashtag), trailing: Text("${item.serialNumber}"), ) @@ -381,7 +382,8 @@ class _StockItemDisplayState extends RefreshableState { } // Supplier part? - if (item.supplierPartId > 0) { + // TODO: Display supplier part info page? + if (false && item.supplierPartId > 0) { tiles.add( ListTile( title: Text("${item.supplierName}"), @@ -410,7 +412,12 @@ class _StockItemDisplayState extends RefreshableState { leading: FaIcon(FontAwesomeIcons.tasks), trailing: Text("${item.testResultCount}"), onTap: () { - Navigator.push(context, MaterialPageRoute(builder: (context) => StockItemTestResultsWidget(item))); + Navigator.push( + context, + MaterialPageRoute(builder: (context) => StockItemTestResultsWidget(item)) + ).then((context) { + refresh(); + }); } ) ); @@ -421,7 +428,12 @@ class _StockItemDisplayState extends RefreshableState { title: Text(I18N.of(context).history), leading: FaIcon(FontAwesomeIcons.history), trailing: Text("${item.trackingItemCount}"), - onTap: null, + onTap: () { + // TODO: Load tracking history + + // TODO: Push tracking history page to the route + + }, ) ); } @@ -432,7 +444,10 @@ class _StockItemDisplayState extends RefreshableState { title: Text(I18N.of(context).notes), leading: FaIcon(FontAwesomeIcons.stickyNote), trailing: Text(""), - onTap: null, + onTap: () { + // TODO: Load notes in markdown viewer widget + // TODO: Make this widget editable? + } ) ); }