import "package:inventree/inventree/part.dart"; import "package:inventree/widget/part_detail.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:flutter/material.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; class StarredPartWidget extends StatefulWidget { const StarredPartWidget({Key? key}) : super(key: key); @override _StarredPartState createState() => _StarredPartState(); } class _StarredPartState extends RefreshableState { List starredParts = []; @override String getAppBarTitle(BuildContext context) => L10().partsStarred; @override Future request(BuildContext context) async { final parts = await InvenTreePart().list(filters: {"starred": "true"}); starredParts.clear(); for (int idx = 0; idx < parts.length; idx++) { if (parts[idx] is InvenTreePart) { starredParts.add(parts[idx] as InvenTreePart); } } } Widget _partResult(BuildContext context, int index) { final part = starredParts[index]; return ListTile( title: Text(part.fullname), subtitle: Text(part.description), leading: InvenTreeAPI().getImage( part.thumbnail, width: 40, height: 40 ), onTap: () { InvenTreePart().get(part.pk).then((var prt) { if (prt is InvenTreePart) { Navigator.push( context, MaterialPageRoute(builder: (context) => PartDetailWidget(prt)) ); } }); } ); } @override Widget getBody(BuildContext context) { if (loading) { return progressIndicator(); } if (starredParts.isEmpty) { return ListView( children: [ ListTile( title: Text(L10().partsNone), subtitle: Text(L10().partsStarredNone) ) ], ); } return ListView.separated( itemCount: starredParts.length, itemBuilder: _partResult, separatorBuilder: (_, __) => const Divider(height: 3), physics: ClampingScrollPhysics(), ); } }