import 'package:flutter/material.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; class HospitalAutoCompleteField extends StatefulWidget { final String initialValue; final Function(Hospital) onSearch; final bool enabled; //final Function(Hospital) onSave; const HospitalAutoCompleteField({ Key key, this.onSearch, this.initialValue, this.enabled = true, }) : super(key: key); @override _HospitalAutoCompleteFieldState createState() => _HospitalAutoCompleteFieldState(); } class _HospitalAutoCompleteFieldState extends State { SettingProvider _settingProvider; TextEditingController _controller; @override void initState() { _controller = TextEditingController(text: widget.initialValue); super.initState(); } @override void didUpdateWidget(covariant HospitalAutoCompleteField oldWidget) { super.didUpdateWidget(oldWidget); if (oldWidget.initialValue != widget.initialValue) { _controller = TextEditingController(text: widget.initialValue); } } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { _settingProvider = Provider.of(context); Subtitle _subtitle = AppLocalization.of(context).subtitle; return Container( padding: EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: AColors.inputFieldBackgroundColor, border: Border.all( color: Color(0xffefefef), ), borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), // boxShadow: [ // AppStyle.boxShadow // ] ), child: widget.enabled ? TypeAheadField( textFieldConfiguration: TextFieldConfiguration( style: Theme.of(context).textTheme.headline6, controller: _controller, textAlign: TextAlign.center, decoration: InputDecoration( hintText: _subtitle.hospital, border: InputBorder.none, disabledBorder: InputBorder.none, focusedBorder: InputBorder.none, enabledBorder: InputBorder.none, ), textInputAction: TextInputAction.search, ), suggestionsCallback: (vale) async { return await HospitalsProvider().getHospitalsListByVal(searchVal: _controller.text); }, itemBuilder: (context, hospital) { return ListTile( title: Text(hospital.name), ); }, onSuggestionSelected: (hospital) { widget.onSearch(hospital); }, ) : widget.initialValue == null ? const Padding( padding: EdgeInsets.all(8.0), child: ALoading(), ) : ListTile( title: Center(child: Text(widget.initialValue)), ), ); } }