Кнопка «Готово» на клавиатуре приводит к потере содержимого текстового поля - PullRequest
0 голосов
/ 05 мая 2019

У меня есть текстовое поле со значком в строке. Я хочу сохранить значение в текстовом поле и сказать, что я нажимаю на значок, чтобы подтвердить значение, отсутствующее на кнопке «Готово» на клавиатуре.

Что происходит здесь, после нажатия кнопки «Готово», чтобы закрыть клавиатуру, текст в текстовом поле исчезает.

, которое получается, когда щелчок по значку дает нулевое значение.

** пытался решить эту проблему, используя субъект поведения для устранения контроллера, но не работает, так как значение в текстовом поле остается там после нажатия на значок, поскольку контроллер больше не существует.

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},
                                        );
                                      },
                                    ),
                                  ],
                                )

1 Ответ

0 голосов
/ 06 мая 2019

Преобразуйте ваш виджет в StatefulWidget, чтобы иметь возможность сохранить состояние TextFieldController.

...