我有一个带有一行图标的文本字段,我想将值保存在文本字段中,告诉我按一下图标以确认该值不在键盘上的完成按钮上。
在这里,单击完成关闭键盘后,文本字段中的文本消失了。
点击该图标会产生空值。
**试图通过消除控制器的行为来解决此问题,但由于单击不再存在控制器,文本字段中的值仍保留在那里,因此无法正常工作。
class ForumCard extends StatelessWidget {
final Forums choosentype;
final ForumServices forumServices;
final Firestore firestore = Firestore();
final TextEditingController _textF = TextEditingController();
ForumCard({Key key, @required this.choosentype, this.forumServices})
: super(key: key);
@override
Widget build(BuildContext context) {
final AuthService authService = Provider.of<AuthService>(context);
final user$ = authService.user.where((user) => user != null);
final commentslist = List.from(choosentype.comments);
return Container(
width: MediaQuery.of(context).size.width * 0.9,
child: Card(
elevation: 100,
color: Colors.white,
child: Center(
child: StreamBuilder<FirebaseUser>(
stream: user$,
builder: (context, snapshot) {
final currentUser = snapshot.data;
if (!snapshot.hasData) {
return Text("nooooooooodata");
}
return Column(
children: <Widget>[
StreamBuilder<String>(
stream: forumServices.text,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}
final text = snapshot.data;
return choosentype.type == "question"
? Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Expanded(
child: TextField(
decoration: InputDecoration(
hintText: "Write a comment",
),
onSubmitted: (String text) {
forumServices.addtext(text);
// I am adding here in a stream was trying to eliminate controller but doesnot work as the value in the textfield remains there after click on the icon as there is no longer controller.
},
controller: _textF,
onEditingComplete: null,
),
),
IconButton(
icon: Icon(Icons.comment),
onPressed: () {
commentslist.add({
"0": currentUser.uid,
"1": currentUser.displayName,
"2": _textF.text,
});
print(commentslist);
Firestore.instance
.collection('forums')
.document(choosentype.uid)
.updateData(
{"comments": commentslist},
);
},
),
],
)
答案 0 :(得分:0)
将小部件转换为StatefulWidget
,以便能够保留TextFieldController
的状态。