mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-10-30 21:05:42 +00:00 
			
		
		
		
	Add new list widgets
- PartCategory - StockLocation
This commit is contained in:
		
							
								
								
									
										85
									
								
								lib/widget/category_list.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								lib/widget/category_list.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
|  | ||||
|  | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:font_awesome_flutter/font_awesome_flutter.dart'; | ||||
| import 'package:inventree/inventree/model.dart'; | ||||
| import 'package:inventree/inventree/part.dart'; | ||||
| import 'package:inventree/widget/category_display.dart'; | ||||
| import 'package:inventree/widget/paginator.dart'; | ||||
| import 'package:inventree/widget/part_list.dart'; | ||||
|  | ||||
| import 'package:inventree/widget/refreshable_state.dart'; | ||||
| import "package:inventree/l10.dart"; | ||||
|  | ||||
| class PartCategoryList extends StatefulWidget { | ||||
|  | ||||
|   const PartCategoryList(this.filters); | ||||
|  | ||||
|   final Map<String, String> filters; | ||||
|  | ||||
|   @override | ||||
|   _PartCategoryListState createState() => _PartCategoryListState(filters); | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| class _PartCategoryListState extends RefreshableState<PartCategoryList> { | ||||
|  | ||||
|   _PartCategoryListState(this.filters); | ||||
|  | ||||
|   final Map<String, String> filters; | ||||
|  | ||||
|   @override | ||||
|   String getAppBarTitle(BuildContext context) => L10().partCategories; | ||||
|  | ||||
|   @override | ||||
|   Widget getBody(BuildContext context) { | ||||
|     return PaginatedPartCategoryList(filters); | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| class PaginatedPartCategoryList extends StatefulWidget { | ||||
|  | ||||
|   const PaginatedPartCategoryList(this.filters); | ||||
|  | ||||
|   final Map<String, String> filters; | ||||
|  | ||||
|   @override | ||||
|   _PaginatedPartCategoryListState createState() => _PaginatedPartCategoryListState(filters); | ||||
| } | ||||
|  | ||||
|  | ||||
| class _PaginatedPartCategoryListState extends PaginatedSearchState<PaginatedPartCategoryList> { | ||||
|  | ||||
|   _PaginatedPartCategoryListState(Map<String, String> filters) : super(filters); | ||||
|  | ||||
|   @override | ||||
|   Future<InvenTreePageResponse?> requestPage(int limit, int offset, Map<String, String> params) async { | ||||
|  | ||||
|     final page = await InvenTreePartCategory().listPaginated(limit, offset, filters: params); | ||||
|  | ||||
|     return page; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Widget buildItem(BuildContext context, InvenTreeModel model) { | ||||
|  | ||||
|     InvenTreePartCategory category = model as InvenTreePartCategory; | ||||
|  | ||||
|     return ListTile( | ||||
|       title: Text(category.name), | ||||
|       subtitle: Text(category.pathstring), | ||||
|       trailing: Text("${category.partcount}"), | ||||
|       onTap: () { | ||||
|         Navigator.push( | ||||
|           context, | ||||
|           MaterialPageRoute( | ||||
|             builder: (context) => CategoryDisplayWidget(category) | ||||
|           ) | ||||
|         ); | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										87
									
								
								lib/widget/location_list.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								lib/widget/location_list.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
|  | ||||
|  | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:font_awesome_flutter/font_awesome_flutter.dart'; | ||||
| import 'package:inventree/inventree/model.dart'; | ||||
| import 'package:inventree/inventree/part.dart'; | ||||
| import 'package:inventree/inventree/stock.dart'; | ||||
| import 'package:inventree/widget/category_display.dart'; | ||||
| import 'package:inventree/widget/location_display.dart'; | ||||
| import 'package:inventree/widget/paginator.dart'; | ||||
| import 'package:inventree/widget/part_list.dart'; | ||||
|  | ||||
| import 'package:inventree/widget/refreshable_state.dart'; | ||||
| import "package:inventree/l10.dart"; | ||||
|  | ||||
|  | ||||
| class StockLocationList extends StatefulWidget { | ||||
|  | ||||
|   const StockLocationList(this.filters); | ||||
|  | ||||
|   final Map<String, String> filters; | ||||
|  | ||||
|   @override | ||||
|   _StockLocationListState createState() => _StockLocationListState(filters); | ||||
| } | ||||
|  | ||||
|  | ||||
| class _StockLocationListState extends RefreshableState<StockLocationList> { | ||||
|  | ||||
|   _StockLocationListState(this.filters); | ||||
|  | ||||
|   final Map<String, String> filters; | ||||
|  | ||||
|   @override | ||||
|   String getAppBarTitle(BuildContext context) => L10().stockLocations; | ||||
|  | ||||
|   @override | ||||
|   Widget getBody(BuildContext context) { | ||||
|     return PaginatedStockLocationList(filters); | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| class PaginatedStockLocationList extends StatefulWidget { | ||||
|  | ||||
|   const PaginatedStockLocationList(this.filters); | ||||
|  | ||||
|   final Map<String, String> filters; | ||||
|  | ||||
|   @override | ||||
|   _PaginatedStockLocationListState createState() => _PaginatedStockLocationListState(filters); | ||||
| } | ||||
|  | ||||
|  | ||||
| class _PaginatedStockLocationListState extends PaginatedSearchState<PaginatedStockLocationList> { | ||||
|  | ||||
|   _PaginatedStockLocationListState(Map<String, String> filters) : super(filters); | ||||
|  | ||||
|   @override | ||||
|   Future<InvenTreePageResponse?> requestPage(int limit, int offset, Map<String, String> params) async { | ||||
|  | ||||
|     final page = await InvenTreeStockLocation().listPaginated(limit, offset, filters: params); | ||||
|  | ||||
|     return page; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Widget buildItem(BuildContext context, InvenTreeModel model) { | ||||
|  | ||||
|     InvenTreeStockLocation location = model as InvenTreeStockLocation; | ||||
|  | ||||
|     return ListTile( | ||||
|       title: Text(location.name), | ||||
|       subtitle: Text(location.pathstring), | ||||
|       trailing: Text("${location.itemcount}"), | ||||
|       onTap: () { | ||||
|         Navigator.push( | ||||
|           context, | ||||
|           MaterialPageRoute( | ||||
|             builder: (context) => LocationDisplayWidget(location) | ||||
|           ) | ||||
|         ); | ||||
|       }, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| @@ -17,7 +17,9 @@ import "package:inventree/inventree/part.dart"; | ||||
| import "package:inventree/inventree/stock.dart"; | ||||
| import 'package:inventree/widget/stock_list.dart'; | ||||
|  | ||||
| import 'category_list.dart'; | ||||
| import 'company_list.dart'; | ||||
| import 'location_list.dart'; | ||||
|  | ||||
|  | ||||
| // Widget for performing database-wide search | ||||
| @@ -207,6 +209,18 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | ||||
|           title: Text(L10().partCategories), | ||||
|           leading: FaIcon(FontAwesomeIcons.sitemap), | ||||
|           trailing: Text("${nCategoryResults}"), | ||||
|           onTap: () { | ||||
|             Navigator.push( | ||||
|               context, | ||||
|               MaterialPageRoute( | ||||
|                 builder: (context) => PartCategoryList( | ||||
|                   { | ||||
|                     "original_search": query | ||||
|                   } | ||||
|                 ) | ||||
|               ) | ||||
|             ); | ||||
|           }, | ||||
|         ) | ||||
|       ); | ||||
|     } | ||||
| @@ -241,6 +255,18 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | ||||
|           title: Text(L10().stockLocations), | ||||
|           leading: FaIcon(FontAwesomeIcons.mapMarkerAlt), | ||||
|           trailing: Text("${nLocationResults}"), | ||||
|           onTap: () { | ||||
|             Navigator.push( | ||||
|               context, | ||||
|               MaterialPageRoute( | ||||
|                 builder: (context) => StockLocationList( | ||||
|                   { | ||||
|                     "original_search": query | ||||
|                   } | ||||
|                 ) | ||||
|               ) | ||||
|             ); | ||||
|           }, | ||||
|         ) | ||||
|       ); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user