import "package:flutter/material.dart"; import "package:inventree/inventree/model.dart"; import "package:inventree/inventree/part.dart"; import "package:inventree/widget/paginator.dart"; import "package:inventree/widget/part_detail.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/api.dart"; import "package:inventree/app_settings.dart"; import "package:inventree/l10.dart"; class PartList extends StatefulWidget { const PartList(this.filters); final Map filters; @override _PartListState createState() => _PartListState(filters); } class _PartListState extends RefreshableState { _PartListState(this.filters); final Map filters; @override String getAppBarTitle(BuildContext context) => L10().parts; @override Widget getBody(BuildContext context) { return PaginatedPartList(filters); } } class PaginatedPartList extends StatefulWidget { const PaginatedPartList(this.filters, {this.onTotalChanged}); final Map filters; final Function(int)? onTotalChanged; @override _PaginatedPartListState createState() => _PaginatedPartListState(filters, onTotalChanged); } class _PaginatedPartListState extends PaginatedSearchState { _PaginatedPartListState(Map filters, this.onTotalChanged) : super(filters); Function(int)? onTotalChanged; @override Future requestPage(int limit, int offset, Map params) async { final bool cascade = await InvenTreeSettingsManager().getBool(INV_PART_SUBCATEGORY, true); params["cascade"] = "${cascade}"; final page = await InvenTreePart().listPaginated(limit, offset, filters: params); return page; } void _openPart(BuildContext context, int pk) { // Attempt to load the part information InvenTreePart().get(pk).then((var part) { if (part is InvenTreePart) { Navigator.push(context, MaterialPageRoute(builder: (context) => PartDetailWidget(part))); } }); } @override Widget buildItem(BuildContext context, InvenTreeModel model) { InvenTreePart part = model as InvenTreePart; return ListTile( title: Text(part.fullname), subtitle: Text(part.description), trailing: Text(part.stockString()), leading: InvenTreeAPI().getImage( part.thumbnail, width: 40, height: 40, ), onTap: () { _openPart(context, part.pk); }, ); } }