我想为文本字段提供一个初始值,并重新绘制一个空值以清除文本。用Flutter的api实现这一点的最佳方法是什么?


当前回答

如果您使用文本表单字段并将数据从上一页传递到下一页文本表单字段,请使用此选项

class ProfilePage extends StatefulWidget {

  late final String fname;

    ProfilePage({required this.fname});

  @override
  State<ProfilePage> createState() => _ProfilePageState();
}

class _ProfilePageState extends State<ProfilePage> {
  final _form = GlobalKey<FormState>();
  
  late var FullNameController = TextEditingController(text: widget.fname);
  
}

其他回答

如果你想处理多个textinput,因为@MRT在接受的答案的评论中要求,你可以创建一个函数,接受一个初始值,并返回一个TextEditingController,像这样:

initialValue(val) {
  return TextEditingController(text: val);
}

然后,将这个函数设置为TextInput的控制器,并像这样提供它的初始值:

controller: initialValue('Some initial value here....')

您可以为其他textinput重复此操作。

简单高效的方法

分配控制器到你的TextFormField或TextField和在initState你可以初始化它像这样的初始值

_controller = TextEditingController(text: 'Your initial value');

内部类,

  final usernameController = TextEditingController(text: 'bhanuka');

文本框,

   child: new TextField(
        controller: usernameController,
    ...
)

你不需要在小部件范围内定义一个单独的变量,只需内联即可:

TextField(
  controller: TextEditingController()..text = 'Your initial value',
  onChanged: (text) => {},
)

由于没有一个答案提到它,TextEditingController应该在使用后被丢弃。如:

class MyWidget extends StatefulWidget {
  const MyWidget({Key? key}) : super(key: key);

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

class MyWidgetState extends State<MyWidget> {
  final myController = TextEditingController(text: "Initial value");

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: myController,
    );
  }

  @override
  void dispose() {
    // dispose it here
    myController.dispose();
    super.dispose();
  }
}