You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/views/widgets/departments/single_department_picker.dart

92 lines
3.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/departments_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/departments/department_item.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import '../app_text_form_field.dart';
class SingleDepartmentPicker extends StatefulWidget {
static final String id = "/single-Department-Picker";
@override
_SingleDepartmentPickerState createState() => _SingleDepartmentPickerState();
}
class _SingleDepartmentPickerState extends State<SingleDepartmentPicker> {
DepartmentsProvider _departmentsProvider;
SettingProvider _settingProvider;
List<Department> _searchableList = [];
bool _firstTime = true;
@override
Widget build(BuildContext context) {
_departmentsProvider = Provider.of<DepartmentsProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
if (_firstTime && _departmentsProvider.departments != null) {
_searchableList.addAll(_departmentsProvider.departments);
_firstTime = false;
}
return Scaffold(
resizeToAvoidBottomInset: false,
body: LoadingManager(
isLoading: _departmentsProvider.isLoading,
stateCode: _departmentsProvider.stateCode,
isFailedLoading: _departmentsProvider.departments == null,
onRefresh: () async {
_departmentsProvider.reset();
await _departmentsProvider.getDepartment(
_settingProvider.host,
);
},
child: Column(
children: [
SizedBox(
height: 48,
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: ATextFormField(
hintText: context.translation.searchByName,
style: Theme.of(context).textTheme.headline6,
suffixIcon: Icon(Icons.search_rounded),
onChange: (value) {
_searchableList.clear();
_searchableList.addAll(_departmentsProvider.departments.where((element) => element.name.toLowerCase().contains(value.toLowerCase())).toList());
setState(() {});
},
),
),
Expanded(
child: _searchableList.isEmpty
? NoItemFound(
message: context.translation.noUniteFound,
)
: ListView.builder(
padding: EdgeInsets.zero,
shrinkWrap: true,
itemCount: _searchableList.length,
itemBuilder: (listContext, itemIndex) {
return DepartmentItem(
department: _searchableList[itemIndex],
onPressed: (hospital) {
Navigator.of(context).pop(hospital);
},
);
},
),
),
],
),
),
);
}
}