title: A TextEditingController was used after being disposed
body: <p>I create a form that container inputs.
  I loop through list of inputs to create form.
  My variable is:</p>
  <pre><code>List fields = [
      {
          'label': Strings.firstName,
          'controller': _fnameController,
          'validator': (val) =&gt; Validation.mustFilled(val),
      },
      {
          'label': Strings.lastName,
          'controller': _lnameController,
          'validator': (val) =&gt; Validation.mustFilled(val),
      },
      {
          'label': Strings.phoneNumber,
          'controller': _mobileController,
          'validator': (val) =&gt; Validation.mobile(val),
      },
  ];
  </code></pre>
  <p>and my TextEditingController definition:</p>
  <pre><code>static TextEditingController _fnameController = TextEditingController();
  static TextEditingController _lnameController = TextEditingController();
  static TextEditingController _mobileController = TextEditingController();
  </code></pre>
  <p>I get values of inputs from previous screen and set inputs in initState:</p>
  <pre><code>@override
  void initState() {
      super.initState();
      _fnameController.text = widget.userProfile.firstName;
      _lnameController.text = widget.userProfile.lastName;
      _mobileController.text = widget.userProfile.phoneNumber;
  }
  
  for (var item in fields)
      Container(
          margin: EdgeInsets.symmetric(vertical: 10.0),
          child: Input(
              controller: item['controller'],
              label: item['label'],
              validator: item['validator'],
          ),
      ),
  </code></pre>
  <p>and my Input widget:</p>
  <pre><code>class Input extends StatelessWidget {
    final String label;
    final VoidFunc validator;
    final TextEditingController controller;
    Input({this.label, this.validator, this.controller});
    @override
    Widget build(BuildContext context) {
      return TextFormField(
        autovalidate: true,
        controller: controller,
        textAlignVertical: TextAlignVertical.center,
        cursorColor: ColorPalette.secondary_3_5,
        decoration: InputDecoration(
          filled: true,
          labelText: label,
        ),
        validator: (value) =&gt; validator(value),
      );
    }
  }
  </code></pre>
  <p>and finally dispose them:</p>
  <pre><code>@override
  void dispose() {
      _fnameController.dispose();
      _lnameController.dispose();
      _mobileController.dispose();
      super.dispose();
  }
  </code></pre>
  <p>every thing is ok but when I navigate to previous screen (use back button) and then come to this screen again I get this error:</p>
  <pre><code>A TextEditingController was used after being disposed.
  
  Once you have called dispose() on a TextEditingController, it can no longer be used.
  The relevant error-causing widget was
  </code></pre>