Как избавиться от TextEditorController - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь получить пользовательский ввод и сохранить его в структуре данных. У меня есть виджет с сохранением состояния, который имеет текстовые контроллеры, которые позволяют мне захватывать значения. Затем эти значения передаются кнопке без сохранения состояния и отправляются. Однако проблема в том, что когда я снова получаю доступ к экрану, текстовый контроллер запоминает свое предыдущее значение и портит способ ввода данных в структуру данных. Я прочитал, что мне нужно вызвать .dispose на контроллерах текста. чтобы исправить это. Где бы это go?

Журнал Просмотр состояния с отслеживанием состояния

class JournalEntryView extends StatefulWidget {

@override
_MyCustomFormState createState() => _MyCustomFormState();
}

// Define a corresponding State class.
// This class holds the data related to the Form.
class _MyCustomFormState extends State<JournalEntryView> {
 // Create a text controller and use it to retrieve the current value
 // of the TextField.

 final titleController = TextEditingController();
 final journalController = TextEditingController();




  @override
  void dispose() {
   // Clean up the controller when the widget is disposed.
   titleController.dispose();
    journalController.dispose();
super.dispose();
}

 void check()
 {
  if(titleController != null);
 dispose();
}

@override
Widget build(BuildContext context) {

return Scaffold(
    backgroundColor: Colors.lightGreen,
    body: Stack(alignment: Alignment.center, children: <Widget>[
      Align(
          alignment: Alignment(-.9, -.85),
          child: Text("Journal Entry",
              style: TextStyle(
                  fontFamily: "Gotham-Light",
                  color: Colors.white,
                  fontSize: 20.0))),
      Align(alignment: Alignment(-.9,-.65),
          child: Text("Title",style: TextStyle(
            fontFamily: "Gotham-Light",
            color: Colors.white,))
      ),
      Align(alignment: Alignment(0,-.5),
          child: TextField(
            controller: titleController,
            decoration: InputDecoration(border: OutlineInputBorder()),
          )),
      Align(alignment: Alignment(-.9,-.15),
          child: Text("Entry",style: TextStyle(
            fontFamily: "Gotham-Light",
            color: Colors.white,))),
      Align(
          alignment: Alignment(0, .15),
          child: TextField(
              controller: journalController,
              minLines: 2,
              maxLines: 10,
              decoration: InputDecoration(border: OutlineInputBorder()))),

      Align(

          alignment: Alignment(.4, .7),
          child: JournalButton(
            journalTitle: titleController,
            journalBody: journalController,
            buttonLabel: "Continue",
            screen: Helm(),

          ))



    ]));
   }
  }

Кнопка журнала без сохранения состояния

class JournalButton extends StatelessWidget {
Widget screen;
String buttonLabel;
TextEditingController journalTitle;
TextEditingController journalBody;
String journalEntry;

Journal journal = Journal();

JournalButton(
  {this.screen, this.buttonLabel, this.journalBody, this.journalTitle});



@override
Widget build(BuildContext context) {
// Helm looks up all the other views


Helm helm = new Helm();
// TODO: implement build
return SizedBox(
  width: 200,
  height: 60,
  child: RaisedButton(
      child: Text(buttonLabel,
          textAlign: TextAlign.center,
          style: TextStyle(color: Colors.white, fontSize: 20)),
      color: Colors.orange,

      onPressed: () {
         print(journalTitle.text);
          print(journalBody.text);

        journal.addEntry(   // Data submitted to data structure here
          Entry(
            body: journalBody.text,
            title: journalTitle.text,
            dateTime: DateTime.now(),
          ),
        );
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => screen),
        );

     //  journalTitle.dispose();
      // journalBody.dispose();
      }),




  );
  }
 }

1 Ответ

0 голосов
/ 15 апреля 2020

Это было случайное сообщение об ошибке, которое было устранено путем очистки флаттера и его восстановления. Примечание для себя всегда чистое трепетание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...