繁体   English   中英

Flutter 写入大于或小于初始值的内容后文本字段未更新

[英]Flutter Text field not updating after writing something more than or less than the initial value

我有 2 个 TextFormFields 并且对于它们中的每一个我都有一个初始值,但是当我在文本字段上键入一些内容并从初始值中添加或删除一些内容并在键盘上按 enter 或完成时,文本编辑 controller 不会更新。 我尝试寻找一些方法来使用 Form 然后使用密钥来修复它,但它对我不起作用,也许我不知道如何实现它。 任何帮助将不胜感激。


TextEditingController editedFirstName =
                          TextEditingController()..text = data3.firstName;
                      TextEditingController editedLastName =
                          TextEditingController()..text = data3.lastName;

                      Future<void> putAccountData() async {
                        SharedPreferences prefs =
                            await SharedPreferences.getInstance();
                        String? authorization =
                            prefs.getString('authorization');
                        var url =
                            'https://dev.api.wurk.skyver.co/api/v1/employees/account';
                        Map payload = {
                          "firstName": editedFirstName.text,
                          "lastName": editedLastName.text,
                        };
                        try {
                          final response = await http.put(Uri.parse(url),
                              headers: <String, String>{
                                'authorization':
                                    authorization ?? basicAuth.toString(),
                                "Content-Type": "application/json"
                              },
                              body: jsonEncode(payload));
                        } catch (er) {}
                      }

                      return Column(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                        children: [
                          Container(
                            width: width,
                            height: height / 1.9,
                            decoration: BoxDecoration(
                              border: Border.all(
                                color: Colors.black,
                                width: 3,
                              ),
                            ),
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                              children: [
                                Row(
                                  children: [
                                    const Padding(
                                      padding: EdgeInsets.all(30),
                                      child: Text(
                                        "First Name:",
                                        style: TextStyle(
                                            fontSize: 20,
                                            fontWeight: FontWeight.bold),
                                      ),
                                    ),
                                    const Spacer(),
                                    Padding(
                                      padding: const EdgeInsets.all(30),
                                      child: SizedBox(
                                        width: width / 2.5,
                                        child: Center(
                                          child: TextFormField(
                                            textAlignVertical:
                                                TextAlignVertical.center,
                                            controller: editedFirstName
                                              ..selection =
                                                  TextSelection.collapsed(
                                                      offset: data3
                                                          .firstName.length),
                                            decoration: InputDecoration(
                                              contentPadding:
                                                  const EdgeInsets.symmetric(
                                                      vertical: 10.0,
                                                      horizontal: 10.0),
                                              border: OutlineInputBorder(
                                                borderRadius:
                                                    BorderRadius.circular(10),
                                                borderSide: const BorderSide(
                                                    color: Colors.red,
                                                    width: 1),
                                              ),
                                            ),
                                            style: const TextStyle(
                                              fontSize: 17,
                                              fontWeight: FontWeight.bold,
                                            ),
                                            // inputFormatters: [
                                            //   LengthLimitingTextInputFormatter(15)
                                            // ],
                                            validator: (value) {
                                              if (value == null ||
                                                  value.isEmpty) {
                                                return 'Name is required';
                                              }
                                              return null;
                                            },
                                          ),
                                        ),
                                      ),
                                    ),
                                  ],
                                ),
                                Row(
                                  children: [
                                    const Padding(
                                      padding: EdgeInsets.all(30),
                                      child: Text(
                                        'Last Name:',
                                        style: TextStyle(
                                          fontSize: 20,
                                          fontWeight: FontWeight.bold,
                                        ),
                                      ),
                                    ),
                                    const Spacer(),
                                    Padding(
                                      padding: const EdgeInsets.all(30),
                                      child: SizedBox(
                                        width: width / 2.5,
                                        child: TextFormField(
                                          controller: editedLastName
                                            ..selection =
                                                TextSelection.collapsed(
                                                    offset:
                                                        data3.lastName.length),

它看起来像TextEditingController上的 flutter 文档说

TextEditingController 也可用于为文本字段提供初始值。 如果您使用已包含文本的 controller 构建文本字段,则文本字段将使用该文本作为其初始值。

要在 Flutter 中设置文本输入的初始值,请在初始化时将其设置在 controller 中:

TextEditingController textControllerWithDefault = TextEditingController(text: 'hello world');

在您的情况下,应该如下所示: TextEditingController editedFirstName = TextEditingController(text: data.firstName)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM