mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-28 05:26:47 +00:00
96 lines
2.2 KiB
Dart
96 lines
2.2 KiB
Dart
|
|
|
|
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/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:InvenTree/l10.dart';
|
|
|
|
import '../api.dart';
|
|
|
|
|
|
class StarredPartWidget extends StatefulWidget {
|
|
|
|
StarredPartWidget({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
_StarredPartState createState() => _StarredPartState();
|
|
}
|
|
|
|
|
|
class _StarredPartState extends RefreshableState<StarredPartWidget> {
|
|
|
|
List<InvenTreePart> starredParts = [];
|
|
|
|
@override
|
|
String getAppBarTitle(BuildContext context) => L10().partsStarred;
|
|
|
|
@override
|
|
Future<void> request() async {
|
|
|
|
final parts = await InvenTreePart().list(filters: {"starred": "true"});
|
|
|
|
starredParts.clear();
|
|
|
|
if (parts != null) {
|
|
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.length == 0) {
|
|
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(),
|
|
);
|
|
}
|
|
} |