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.
fluffychat/lib/pangea/activity_planner/suggestion_form_field.dart

61 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:fluffychat/pangea/activity_generator/list_request_schema.dart';
class SuggestionFormField extends StatelessWidget {
final List<ActivitySettingResponseSchema>? suggestions;
final String? Function(String?)? validator;
final int? maxLength;
final String label;
final String placeholder;
final TextEditingController controller;
const SuggestionFormField({
super.key,
this.suggestions,
required this.placeholder,
this.validator,
this.maxLength,
required this.label,
required this.controller,
});
@override
Widget build(BuildContext context) {
return Autocomplete<String>(
initialValue: TextEditingValue(text: controller.text),
optionsBuilder: (TextEditingValue textEditingValue) {
return (suggestions ?? [])
.where((ActivitySettingResponseSchema option) {
return option.name
.toLowerCase()
.contains(textEditingValue.text.toLowerCase());
}).map((ActivitySettingResponseSchema e) => e.name);
},
onSelected: (val) => controller.text = val,
fieldViewBuilder: (
BuildContext context,
TextEditingController textEditingController,
FocusNode focusNode,
VoidCallback onFieldSubmitted,
) {
textEditingController.value = controller.value;
textEditingController.addListener(() {
controller.value = textEditingController.value;
});
return TextFormField(
controller: textEditingController,
focusNode: focusNode,
decoration: InputDecoration(
labelText: label,
hintText: placeholder,
),
validator: validator,
maxLength: maxLength,
onTapOutside: (_) => FocusManager.instance.primaryFocus?.unfocus(),
);
},
);
}
}