可重用文本字段不发送数据 颤振



我有一个这样的自定义textField:

import 'package:flutter/material.dart';
import 'package:sizer/sizer.dart';
class CustomTextField extends StatefulWidget {
TextEditingController controller;
String label;
String textValue;
int maxLines;
TextInputType keybordType;
CustomTextField(
{Key? key,
required this.controller,
required this.textValue,
required this.label,
this.maxLines = 1,
this.keybordType = TextInputType.text})
: super(key: key);
@override
State<CustomTextField> createState() => _CustomTextFieldState();
}
class _CustomTextFieldState extends State<CustomTextField> {
@override
Widget build(BuildContext context) {
return TextField(
maxLines: widget.maxLines,
textCapitalization: TextCapitalization.words,
onChanged: (value) {
widget.textValue = value;
setState(() {});
},
controller: widget.controller,
cursorColor: Colors.white,
style: TextStyle(fontSize: 15),
textInputAction: TextInputAction.next,
keyboardType: widget.keybordType,
decoration: InputDecoration(
hintText: widget.label,
),
);
}
}

我这样使用它:

CustomTextField(
maxLines: 4,
controller: chapterOpinionController,
textValue: chapterOpinion,
label: 'Critique du chapitre'),
SizedBox(
height: 2.h,
),
ElevatedButton.icon(
onPressed: () {
addChapterReview();
clearAllField();
ScaffoldMessenger.of(context).showSnackBar(snackBar);
setState(() {});
},
icon: const Icon(Icons.check),
label: const Text('Poster la review'),
),

如何发送数据:

Future<void> addChapterReview() {
return chapter_reviews
.add({
'anime_adaptation': animeAdaptation,
'edited_in_france': editedInFrance,
'link': chapterLink,
'manga': chapterOriginalManga,
'note': chapterNote,
'number': chapterNumber,
'opinion': chapterOpinion,
'pic': chapterPic,
'title': chapterTitle
})
.then((value) => print('Review ajoutée avec succès.'))
.catchError((error) => print('Echec de l'ajout de la review.'));
}

我的问题是输入没有发送到我的数据库。但是当我不使用我的自定义textField和写一个完整的textField在我的'main'页面,它的工作。

我可以复制/过去在硬10 textField和有200多行代码,但我正在努力优化我的代码。

你知道吗?

修改如下:

Future<void> addChapterReview() {
return chapter_reviews
.add({
'anime_adaptation': animeAdaptation,
'edited_in_france': editedInFrance,
'link': chapterLink,
'manga': chapterOriginalManga,
'note': chapterNote,
'number': chapterNumber,
'opinion': chapterOpinion,
'pic': chapterPic,
'title': chapterTitle.toString()
})
.then((value) => print('Review ajoutée avec succès.'))
.catchError((error) => print('Echec de l'ajout de la review.'));
}

:

Future<void> addChapterReview() {
return chapter_reviews
.add({
'anime_adaptation': animeAdaptation,
'edited_in_france': editedInFrance,
'link': chapterLink,
'manga': chapterOriginalManga,
'note': chapterNote,
'number': chapterNumber,
'opinion': chapterOpinionController.text,//<---change this
'pic': chapterPic,
'title': chapterTitle.toString()
})
.then((value) => print('Review ajoutée avec succès.'))
.catchError((error) => print('Echec de l'ajout de la review.'));
}

你不使用textValue来访问输入的结果,只使用chapterOpinionController.text

如果你想通知文本何时发生变化,你需要像这样传递一个回调:

class CustomTextField extends StatefulWidget {
TextEditingController controller;
String label;
Function(String) onChange;
int maxLines;
TextInputType keybordType;
CustomTextField(
{Key? key,
required this.controller,
required this.textValue,
required this.label,
this.maxLines = 1,
this.keybordType = TextInputType.text})
: super(key: key);
@override
State<CustomTextField> createState() => _CustomTextFieldState();
}
class _CustomTextFieldState extends State<CustomTextField> {
@override
Widget build(BuildContext context) {
return TextField(
maxLines: widget.maxLines,
textCapitalization: TextCapitalization.words,
onChanged: widget.onChange,
controller: widget.controller,
cursorColor: Colors.white,
style: TextStyle(fontSize: 15),
textInputAction: TextInputAction.next,
keyboardType: widget.keybordType,
decoration: InputDecoration(
hintText: widget.label,
),
);
}
}

然后像这样使用:

CustomTextField(
maxLines: 4,
controller: chapterOpinionController,
onChanged: (value) {
print("value = $value");
},
label: 'Critique du chapitre',
),

相关内容

  • 没有找到相关文章

最新更新