2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +00:00
inventree-app/lib/widget/company_list.dart
2021-07-15 11:27:19 +10:00

128 lines
3.1 KiB
Dart

import 'package:InvenTree/widget/company_detail.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:InvenTree/api.dart';
import 'package:InvenTree/inventree/company.dart';
import 'package:InvenTree/widget/refreshable_state.dart';
abstract class CompanyListWidget extends StatefulWidget {
String title = "";
Map<String, String> filters = {};
@override
_CompanyListState createState() => _CompanyListState(title, filters);
}
class SupplierListWidget extends CompanyListWidget {
@override
_CompanyListState createState() => _CompanyListState("Suppliers", {"is_supplier": "true"});
}
class ManufacturerListWidget extends CompanyListWidget {
@override
_CompanyListState createState() => _CompanyListState("Manufacturers", {"is_manufacturer": "true"});
}
class CustomerListWidget extends CompanyListWidget {
@override
_CompanyListState createState() => _CompanyListState("Customers", {"is_customer": "true"});
}
class _CompanyListState extends RefreshableState<CompanyListWidget> {
List<InvenTreeCompany> _companies = [];
List<InvenTreeCompany> _filteredCompanies = [];
String _title = "Companies";
@override
String getAppBarTitle(BuildContext context) { return _title; }
Map<String, String> _filters = Map<String, String>();
_CompanyListState(this._title, this._filters);
@override
Future<void> onBuild(BuildContext context) async {
refresh();
}
@override
Future<void> request() async {
await InvenTreeCompany().list(filters: _filters).then((var companies) {
_companies.clear();
for (var c in companies) {
if (c is InvenTreeCompany) {
_companies.add(c);
}
}
setState(() {
_filterResults("");
});
});
}
void _filterResults(String text) {
if (text.isEmpty) {
_filteredCompanies = _companies;
} else {
_filteredCompanies = _companies.where((c) => c.filter(text)).toList();
}
}
Widget _showCompany(BuildContext context, int index) {
InvenTreeCompany company = _filteredCompanies[index];
return ListTile(
title: Text("${company.name}"),
subtitle: Text("${company.description}"),
leading: InvenTreeAPI().getImage(company.image),
onTap: () {
if (company.pk > 0) {
InvenTreeCompany().get(company.pk).then((var c) {
if (c != null && c is InvenTreeCompany) {
Navigator.push(context, MaterialPageRoute(builder: (context) => CompanyDetailWidget(c)));
}
});
}
},
);
}
@override
Widget getBody(BuildContext context) {
return ListView(
children: <Widget>[
TextField(
decoration: InputDecoration(
hintText: 'Filter results',
),
onChanged: (String text) {
setState(() {
_filterResults(text);
});
},
),
ListView.builder(
shrinkWrap: true,
physics: ClampingScrollPhysics(),
itemBuilder: _showCompany, itemCount: _filteredCompanies.length)
],
);
}
}