Flutter - как получить значение TextField и отобразить его как новый текст

Я пытаюсь получить значение, которое пользователь вводит в TextFormField, а затем отображать его как новое сообщение. Теперь я могу получить значение с помощью контроллера и отобразить его, проблема в том, что мне нужно отобразить все сообщения, которые вводит пользователь, и сложить их друг над другом (как в мессенджере).

Это сам FormField, я понимаю, что мне нужно сохранить значение, которое вводит пользователь, а затем сделать из него сообщение, отправив его куда-то еще, но я не знаю, как это сделать. (Наверное, пустота, которая как-то это сделает?)

final chatfield = TextFormField(
  controller: myController,
  style: TextStyle(
    decorationColor: Colors.white,
    color: Colors.white,
  ),
  autofocus: false,
  onSaved: (String value) {
  },
  decoration: InputDecoration(
    contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
    border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
    hintStyle: TextStyle(color: Colors.white),
  ),
);

Единственное, что делает контроллер на данный момент, это получить значение и отобразить его, я хотел бы сохранить и отобразить все значения, которые пользователь вводит в TextFormField.

1
0
7 524
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь у вас есть базовый пример, вы можете использовать StatefulWidget, StreamBuilder, FutureBuilder и т. д.

      class ChatListSample extends StatefulWidget {
        @override
        ChatListSampleState createState() {
          return new ChatListSampleState();
        }
      }

      class ChatListSampleState extends State<ChatListSample> {
        TextEditingController myController = TextEditingController();

        List<String> messages = List();

        @override
        Widget build(BuildContext context) {
          final chatfield = TextFormField(
            controller: myController,
            style: TextStyle(
              decorationColor: Colors.white,
              color: Colors.white,
            ),
            autofocus: false,
            onSaved: (String value) {},
            decoration: InputDecoration(
              contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
              border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
              hintStyle: TextStyle(color: Colors.white),
            ),
          );

          return Scaffold(
              backgroundColor: Colors.purple,
              body: Stack(
                children: <Widget>[
                  Padding(
                    padding:
                        const EdgeInsets.only(left: 20.0, right: 20, bottom: 100),
                    child: ListView.builder(
                      itemCount: messages.length,
                      itemBuilder: (context, index) {
                        return ListTile(
                          title: Text(messages[index]),
                        );
                      },
                    ),
                  ),
                  Align(
                    alignment: Alignment.bottomCenter,
                    child: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        chatfield,
                        MaterialButton(
                          child: Text("send message"),
                          onPressed: () {
                            setState(() {
                              messages.add(myController.text);
                              myController.clear();
                            });
                          },
                        )
                      ],
                    ),
                  )
                ],
              ));
        }
      }

Спасибо, как раз то, что мне было нужно!

Chernarussian 23.01.2019 22:20

Другие вопросы по теме