Флаттер: сохранить значение TextField - PullRequest
0 голосов
/ 13 января 2020

Я новичок, чтобы трепетать. Я хочу реализовать простую функцию формы:

1) Первая страница: «Это имя:» $ stringname

1.1) Нажмите «Редактировать значок» -> Открыть вторую страницу

2) Вторая страница: «Изменить имя:» TextField

2.1) Использовать кнопку «Назад» -> Go вернуться на первую страницу -> Отображает новое $ stringname

[3) Снова зайдите на вторую страницу, в текстовом поле отображается последнее сохраненное имя. новое строковое значение и отправьте его на первую страницу. Может кто-нибудь дать мне короткий пример, как это сделать?

TextField(
  obscureText: false,
  decoration: InputDecoration(
    border: OutlineInputBorder(
      borderRadius: BorderRadius.all(
        const Radius.circular(12.0),
      ),
    ),
    labelText: 'Name',
    labelStyle: TextStyle(
      color: Colors.black.withOpacity(0.8)
    ),    
  ),
),

1 Ответ

0 голосов
/ 13 января 2020

Чтобы вернуть данные со второй страницы на первую страницу, вы должны ожидать получения данных со второй страницы при переходе к ней. На второй странице вам нужно взять значение из TextField и отправить его обратно при возврате представления на первую страницу, например:

На первой странице

Метод

void goToSecondPage(){
  Navigator.of(context).push(MaterialPageRoute(
    builder: (context){
      return SecondPage();
    }
  )).then((valueFromTextField){
    // use your valueFromTextField from the second page
  });
}

Вторая страница

Декларация

TextEditingController _textEditingController = TextEditingController();

Виджет

Column(
  children: <Widget>[
    TextField(
      controller: _textEditingController,
      obscureText: false,
      decoration: InputDecoration(
        border: OutlineInputBorder(
          borderRadius: BorderRadius.all(
            const Radius.circular(12.0),
          ),
        ),
        labelText: 'Name',
        labelStyle: TextStyle(
          color: Colors.black.withOpacity(0.8)
        ),
      ),
    ),
    RaisedButton(
      onPressed: () => submit(),
    ),
  ],
),

Метод

void submit(){
  Navigator.of(context).pop(_textEditingController.text);
}
...