如何处理TextEditorController

问题描述 投票:0回答:1

我正在尝试获取用户输入并将其存储在数据结构中。我有一个带状态的窗口小部件,该窗口小部件具有文本控制器,可让我抓取值。然后,将这些值传递到无状态按钮并提交。但是,问题是当我再次访问屏幕时,文本控制器会记住其先前的值,并且弄乱了如何将数据输入到数据结构中。我读到我需要在文本控制器上调用.dispose。解决这个问题。这将去哪里?

JournalView状态状态小部件

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




  );
  }
 }
flutter dart flutter-layout
1个回答
0
投票

这是一个随机错误消息,通过进行抖动清理和重建来解决。注意自我总是飘动干净。

© www.soinside.com 2019 - 2024. All rights reserved.