Impoved autocomplete and partial encoding error fix

This commit is contained in:
2024-03-04 14:04:09 +03:00
parent 6c03971f18
commit 1fa05eae5f
2 changed files with 58 additions and 119 deletions

View File

@@ -170,7 +170,6 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
final credentials = {
'satiety': selectedSatiety,
};
print(json.encode(credentials));
var response = await http.post(Uri.parse(url),
headers: {
'Authorization': 'Bearer $token',
@@ -465,8 +464,9 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
AddComment event, Emitter<DiaryEditState> emit) async {
if (state is DiaryEditLoadedState) {
var currentState = state as DiaryEditLoadedState;
var updatedState =
currentState.copyWith(commentController: event.comment);
var updatedState = currentState.copyWith(
commentController: TextEditingController(text: event.comment),
);
// Отправляем данные по HTTP маршруту и ждем ответ
var response = await sendCommentData(

View File

@@ -205,11 +205,9 @@ class DiaryEditScreen extends StatelessWidget {
Padding _buildMeal(BuildContext context, DiaryEditLoadedState state) {
final digitsOnly = FilteringTextInputFormatter.digitsOnly;
const List<String> _options = <String>[
'aardvark',
'bobcat',
'chameleon',
];
List<String> _options =
state.autocompleteList!.map((dynamic item) => item as String).toList();
print(_options);
return Padding(
padding: EdgeInsets.symmetric(horizontal: 16.h),
child: Container(
@@ -288,123 +286,64 @@ class DiaryEditScreen extends StatelessWidget {
Padding(
padding: EdgeInsets.symmetric(horizontal: 10.h),
child: RawAutocomplete<String>(
optionsBuilder: (TextEditingValue textEditingValue) {
if (textEditingValue.text == '') {
return const Iterable<String>.empty();
}
return Future<Iterable<String>>.value(state.autocompleteList
?.map((dynamic item) => item as String)
.toList()
.where((String option) {
return true;
}));
},
fieldViewBuilder: (
BuildContext context,
TextEditingController textEditingController,
FocusNode focusNode,
VoidCallback onFieldSubmitted,
) {
return CustomTextFormField(
hintText: "Введите название продукта",
controller: state.productNameController,
onChanged: (value) {
/*print(state.autocompleteList
optionsBuilder: (TextEditingValue textEditingValue) {
return _options.where((String option) {
return true;
});
}, fieldViewBuilder: (
BuildContext context,
TextEditingController textEditingController,
FocusNode focusNode,
VoidCallback onFieldSubmitted,
) {
return CustomTextFormField(
hintText: "Введите название продукта",
controller: textEditingController,
focusNode: focusNode,
onChanged: (value) {
/*print(state.autocompleteList
?.map((dynamic item) => item as String)
.toList());*/
if (value.length > 3) {
context
.read<DiaryEditBloc>()
.add(ProductInput(value));
}
},
);
},
optionsViewBuilder: (
BuildContext context,
AutocompleteOnSelected<String> onSelected,
Iterable<String> options,
) {
return Align(
alignment: Alignment.topLeft,
child: Material(
elevation: 4.0,
child: SizedBox(
height: 200.0,
child: ListView.builder(
padding: const EdgeInsets.all(8.0),
itemCount: options.length,
itemBuilder: (BuildContext context, int index) {
final String option = options.elementAt(index);
return GestureDetector(
onTap: () {
onSelected(option);
},
child: ListTile(
title: Text(option),
),
);
},
),
if (value.length > 3) {
context.read<DiaryEditBloc>().add(ProductInput(value));
}
},
/*onFieldSubmitted: (String value) {
onFieldSubmitted();
},*/
);
}, optionsViewBuilder: (
BuildContext context,
AutocompleteOnSelected<String> onSelected,
Iterable<String> options,
) {
return Align(
alignment: Alignment.topLeft,
child: Material(
elevation: 4.0,
child: SizedBox(
height: 200.0,
child: ListView.builder(
padding: const EdgeInsets.all(8.0),
itemCount: options.length,
itemBuilder: (BuildContext context, int index) {
final String option = options.elementAt(index);
return GestureDetector(
onTap: () {
onSelected(option);
},
child: ListTile(
title: Text(option),
),
);
},
),
),
);
},
onSelected: (String selection) {
// Обработка выбранного варианта автозаполнения
},
),
),
);
}),
),
SizedBox(height: 20.v),
RawAutocomplete<String>(
optionsBuilder: (TextEditingValue textEditingValue) {
return _options.where((String option) {
return option.contains(
state.productNameController!.text.toLowerCase());
});
}, fieldViewBuilder: (
BuildContext context,
TextEditingController textEditingController,
FocusNode focusNode,
VoidCallback onFieldSubmitted,
) {
return TextFormField(
controller: textEditingController,
focusNode: focusNode,
onFieldSubmitted: (String value) {
onFieldSubmitted();
},
);
}, optionsViewBuilder: (
BuildContext context,
AutocompleteOnSelected<String> onSelected,
Iterable<String> options,
) {
return Align(
alignment: Alignment.topLeft,
child: Material(
elevation: 4.0,
child: SizedBox(
height: 200.0,
child: ListView.builder(
padding: const EdgeInsets.all(8.0),
itemCount: options.length,
itemBuilder: (BuildContext context, int index) {
final String option = options.elementAt(index);
return GestureDetector(
onTap: () {
onSelected(option);
},
child: ListTile(
title: Text(option),
),
);
},
),
),
),
);
}),
Padding(
padding: EdgeInsets.symmetric(horizontal: 10.h),
child: Row(