import 'package:flutter/material.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/parts_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import '../../../extensions/text_extensions.dart'; import '../../../models/service_request/spare_parts.dart'; class AutoCompletePartsField extends StatefulWidget { final String initialValue; final num assetId; final bool clearAfterPick; final Function(SparePartsWorkOrders) onPick; const AutoCompletePartsField({Key key, this.initialValue, this.assetId, this.onPick, this.clearAfterPick = true}) : super(key: key); @override _AutoCompletePartsFieldState createState() => _AutoCompletePartsFieldState(); } class _AutoCompletePartsFieldState extends State { SettingProvider _settingProvider; PartsProvider _partsProvider; UserProvider _userProvider; TextEditingController _controller; @override void initState() { _controller = TextEditingController(text: widget.initialValue); super.initState(); } @override void didUpdateWidget(covariant AutoCompletePartsField oldWidget) { if (widget.initialValue != oldWidget.initialValue) { _controller = TextEditingController(text: widget.initialValue); } super.didUpdateWidget(oldWidget); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { _settingProvider = Provider.of(context); _userProvider = Provider.of(context); _partsProvider = Provider.of(context); return Container( padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), child: TypeAheadField( textFieldConfiguration: TextFieldConfiguration( style: AppTextStyles.bodyText, controller: _controller, textAlign: TextAlign.start, decoration: InputDecoration( label: context.translation.partNumberName.tinyFont(context), border: InputBorder.none, disabledBorder: InputBorder.none, focusedBorder: InputBorder.none, enabledBorder: InputBorder.none, ), textInputAction: TextInputAction.search, ), suggestionsCallback: (vale) async { return (await _partsProvider.getPartsList(title: vale, assetId: widget.assetId)).map((e) => SparePartsWorkOrders(sparePart: e)).toList(); }, itemBuilder: (context, part) { return ListTile( title: Text(part?.sparePart?.partNo ?? ""), subtitle: Text( part?.sparePart?.partName ?? "", style: Theme.of(context).textTheme.bodySmall, ), ); }, onSuggestionSelected: (part) { if (widget.clearAfterPick) { _controller.clear(); } else { _controller.text = part?.sparePart?.partNo; } widget.onPick(part); }, ), ); } }