flutter 退出页面时TextFormField未重置

6jjcrrmo  于 2023-02-13  发布在  Flutter
关注(0)|答案(4)|浏览(170)

我制作了TextFormField小部件,以便在任何需要的地方使用它。

Widget TextFormFieldWidget(
    TextEditingController controller,
    Icon icon,
    String hintText,
    bool obscureText,
    BuildContext context,
  ) {
    return Theme(
      data: Theme.of(context).copyWith(
        colorScheme: ThemeData().colorScheme.copyWith(
              primary: Colors.red,
            ),
      ),
      child: TextFormField(
        obscureText: obscureText,
        controller: controller,
        decoration: InputDecoration(
          hintText: hintText,
          prefixIcon: icon,
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(50),
          ),
          enabledBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(50),
            borderSide: const BorderSide(
              color: Color(0xFFCB3126),
            ),
          ),
        ),
      ),
    );
  }

我有个问题。问题是这样的:我正在创建一个注册页面。当用户退出页面并返回时, 在TextFormField中输入的不会被重置,例如,我给予一个例子,用户在输入电子邮件地址后放弃,当你离开页面并返回时,电子邮件地址不会被删除。
我怎样才能解决这个问题呢?谢谢你的帮助。

xmq68pz9

xmq68pz91#

请在退出页面时清除文本控制器值。

hgc7kmma

hgc7kmma2#

1.处置控制器
1.清除控制器。

ElevatedButton(
                 onPressed: (){
                   controller.clear();

                 }, 
                 child: Text("Send")
                )
gojuced7

gojuced73#

如果您使用一个(共享的)TextController,并且一个TextController被传递到每个TextFormFieldWidget,则单个控制器将具有单个状态。
因此,当附加到新的TextFormFieldWidget时,它将保持其值。

请对不同的字段使用不同的TextEditingController。

9njqaruj

9njqaruj4#

创建函数返回Widget的问题是这样的。如果你正在为你的应用制作一个自定义小部件,比如说可重用的自定义文本字段,建议制作成一个单独的StatefulWidget
当您使用有状态小部件时,您可以根据需要为同一个小部件创建一个新示例。
使用下面提到的代码为您创建相同的。

import "package:flutter/material.dart";

class CustomTextFormField extends StatefulWidget {
  const CustomTextFormField(
      {required this.icon,
      required this.hintText,
      required this.obscureText,
      super.key});

  final Icon icon;
  final String hintText;
  final bool obscureText;

  @override
  State<CustomTextFormField> createState() => _CustomTextFormFieldState();
}

class _CustomTextFormFieldState extends State<CustomTextFormField> {
  late TextEditingController controller;

  @override
  void initState() {
    controller = TextEditingController();
    super.initState();
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Theme(
      data: Theme.of(context).copyWith(
        colorScheme: ThemeData().colorScheme.copyWith(
              primary: Colors.red,
            ),
      ),
      child: TextFormField(
        obscureText: widget.obscureText,
        controller: controller,
        decoration: InputDecoration(
          hintText: widget.hintText,
          prefixIcon: widget.icon,
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(50),
          ),
          enabledBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(50),
            borderSide: const BorderSide(
              color: Color(0xFFCB3126),
            ),
          ),
        ),
      ),
    );
  }
}

相关问题