diff --git a/lib/inventree/stock.dart b/lib/inventree/stock.dart index 0d3aaab6..85755fc9 100644 --- a/lib/inventree/stock.dart +++ b/lib/inventree/stock.dart @@ -101,6 +101,9 @@ class InvenTreeStockItem extends InvenTreeModel { @override String URL = "stock/"; + @override + String WEB_URL = "stock/item/"; + @override Map defaultGetFilters() { diff --git a/lib/widget/category_display.dart b/lib/widget/category_display.dart index 96eafb15..1bbfc51f 100644 --- a/lib/widget/category_display.dart +++ b/lib/widget/category_display.dart @@ -46,7 +46,7 @@ class _CategoryDisplayState extends RefreshableState { onPressed: () { showSearch( context: context, - delegate: PartSearchDelegate(filters: {"category": "${category.pk}"}) + delegate: PartSearchDelegate(context, filters: {"category": "${category.pk}"}) ); } ), diff --git a/lib/widget/drawer.dart b/lib/widget/drawer.dart index d2a30477..70d181f7 100644 --- a/lib/widget/drawer.dart +++ b/lib/widget/drawer.dart @@ -39,7 +39,7 @@ class InvenTreeDrawer extends StatelessWidget { showSearch( context: context, - delegate: PartSearchDelegate() + delegate: PartSearchDelegate(context) ); //Navigator.push(context, MaterialPageRoute(builder: (context) => SearchWidget())); @@ -115,9 +115,12 @@ class InvenTreeDrawer extends StatelessWidget { leading: Image.asset( "assets/image/icon.png", fit: BoxFit.scaleDown, - width: 40, + width: 30, + ), + title: Text( + I18N.of(context).appTitle, + style: TextStyle(fontWeight: FontWeight.bold), ), - title: Text(I18N.of(context).appTitle), onTap: _home, ), ListTile( diff --git a/lib/widget/home.dart b/lib/widget/home.dart index d3abca7a..b7f9d2f7 100644 --- a/lib/widget/home.dart +++ b/lib/widget/home.dart @@ -46,7 +46,7 @@ class _InvenTreeHomePageState extends State { showSearch( context: context, - delegate: PartSearchDelegate() + delegate: PartSearchDelegate(context) ); } @@ -55,7 +55,7 @@ class _InvenTreeHomePageState extends State { showSearch( context: context, - delegate: StockSearchDelegate() + delegate: StockSearchDelegate(context) ); } diff --git a/lib/widget/location_display.dart b/lib/widget/location_display.dart index cf45ffd3..39a95e82 100644 --- a/lib/widget/location_display.dart +++ b/lib/widget/location_display.dart @@ -45,7 +45,7 @@ class _LocationDisplayState extends RefreshableState { onPressed: () { showSearch( context: context, - delegate: StockSearchDelegate(filters: {"location": "${location.pk}"}) + delegate: StockSearchDelegate(context, filters: {"location": "${location.pk}"}) ); } ), diff --git a/lib/widget/part_detail.dart b/lib/widget/part_detail.dart index ea5cc846..b14eb90e 100644 --- a/lib/widget/part_detail.dart +++ b/lib/widget/part_detail.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:InvenTree/inventree/stock.dart'; +import 'package:InvenTree/widget/part_notes.dart'; import 'package:InvenTree/widget/progress.dart'; import 'package:InvenTree/widget/snacks.dart'; import 'package:InvenTree/widget/stock_detail.dart'; @@ -9,8 +10,6 @@ import 'package:flutter/foundation.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: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'; @@ -20,6 +19,7 @@ import 'package:InvenTree/widget/fields.dart'; import 'package:InvenTree/api.dart'; import 'package:InvenTree/widget/refreshable_state.dart'; + class PartDetailWidget extends StatefulWidget { PartDetailWidget(this.part, {Key key}) : super(key: key); @@ -325,7 +325,13 @@ class _PartDisplayState extends RefreshableState { title: Text("Notes"), leading: FaIcon(FontAwesomeIcons.stickyNote), trailing: Text(""), - onTap: null, + onTap: () { + print("Hello"); + Navigator.push( + context, + MaterialPageRoute(builder: (context) => PartNotesWidget(part)) + ); + }, ) ); } diff --git a/lib/widget/part_notes.dart b/lib/widget/part_notes.dart new file mode 100644 index 00000000..a0f6c368 --- /dev/null +++ b/lib/widget/part_notes.dart @@ -0,0 +1,39 @@ + + + +import 'package:InvenTree/inventree/part.dart'; +import 'package:InvenTree/widget/refreshable_state.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + + +class PartNotesWidget extends StatefulWidget { + + final InvenTreePart part; + + PartNotesWidget(this.part, {Key key}) : super(key: key); + + @override + _PartNotesState createState() => _PartNotesState(part); +} + + +class _PartNotesState extends RefreshableState { + + final InvenTreePart part; + + _PartNotesState(this.part); + + @override + String getAppBarTitle(BuildContext context) => I18N.of(context).partNotes; + + @override + Widget getBody(BuildContext context) { + return Markdown( + selectable: false, + data: part.notes, + ); + } + +} \ No newline at end of file diff --git a/lib/widget/search.dart b/lib/widget/search.dart index 3375e99f..f66c2be5 100644 --- a/lib/widget/search.dart +++ b/lib/widget/search.dart @@ -1,13 +1,11 @@ import 'package:InvenTree/widget/part_detail.dart'; import 'package:InvenTree/widget/progress.dart'; -import 'package:InvenTree/widget/snacks.dart'; import 'package:InvenTree/widget/stock_detail.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.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'; import 'package:InvenTree/inventree/part.dart'; import 'package:InvenTree/inventree/stock.dart'; @@ -19,17 +17,22 @@ class PartSearchDelegate extends SearchDelegate { final key = GlobalKey(); + BuildContext context; + bool _searching = false; // Custom filters for the part search Map filters = {}; - PartSearchDelegate({this.filters}) { + PartSearchDelegate(this.context, {this.filters}) { if (filters == null) { filters = {}; } } + @override + String get searchFieldLabel => I18N.of(context).searchParts; + // List of part results List partResults = []; @@ -184,17 +187,22 @@ class StockSearchDelegate extends SearchDelegate { final key = GlobalKey(); + final BuildContext context; + bool _searching = false; // Custom filters for the stock item search Map filters; - StockSearchDelegate({this.filters}) { + StockSearchDelegate(this.context, {this.filters}) { if (filters == null) { filters = {}; } } + @override + String get searchFieldLabel => I18N.of(context).searchStock; + // List of StockItem results List itemResults = []; diff --git a/lib/widget/stock_detail.dart b/lib/widget/stock_detail.dart index 9d7c01b2..22c9edee 100644 --- a/lib/widget/stock_detail.dart +++ b/lib/widget/stock_detail.dart @@ -12,6 +12,7 @@ import 'package:InvenTree/widget/progress.dart'; import 'package:InvenTree/widget/refreshable_state.dart'; import 'package:InvenTree/widget/snacks.dart'; import 'package:InvenTree/widget/stock_item_test_results.dart'; +import 'package:InvenTree/widget/stock_notes.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -19,13 +20,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:InvenTree/api.dart'; -import 'package:InvenTree/widget/drawer.dart'; -import 'package:InvenTree/widget/refreshable_state.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:flutter_speed_dial/flutter_speed_dial.dart'; -import 'package:http/http.dart'; class StockDetailWidget extends StatefulWidget { @@ -429,7 +425,7 @@ class _StockItemDisplayState extends RefreshableState { ); } - + // Stocktake? // Supplier part? // TODO: Display supplier part info page? @@ -499,6 +495,10 @@ class _StockItemDisplayState extends RefreshableState { leading: FaIcon(FontAwesomeIcons.stickyNote), trailing: Text(""), onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => StockNotesWidget(item)) + ); // TODO: Load notes in markdown viewer widget // TODO: Make this widget editable? } diff --git a/lib/widget/stock_notes.dart b/lib/widget/stock_notes.dart new file mode 100644 index 00000000..620dff75 --- /dev/null +++ b/lib/widget/stock_notes.dart @@ -0,0 +1,39 @@ + + + +import 'package:InvenTree/inventree/stock.dart'; +import 'package:InvenTree/widget/refreshable_state.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + + +class StockNotesWidget extends StatefulWidget { + + final InvenTreeStockItem item; + + StockNotesWidget(this.item, {Key key}) : super(key: key); + + @override + _StockNotesState createState() => _StockNotesState(item); +} + + +class _StockNotesState extends RefreshableState { + + final InvenTreeStockItem item; + + _StockNotesState(this.item); + + @override + String getAppBarTitle(BuildContext context) => I18N.of(context).stockItemNotes; + + @override + Widget getBody(BuildContext context) { + return Markdown( + selectable: false, + data: item.notes, + ); + } + +} \ No newline at end of file