Flutter Text字段在写入大于或小于初始值的内容后不更新



我有两个TextFormFields,每个都有一个初始值,但当我在文本字段上键入一些内容,并从初始值中添加或删除一些内容,然后在键盘上按enter或done时,文本编辑控制器不会更新。我试着用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也可以用于为文本字段提供初始值。如果使用已包含文本的控制器构建文本字段,则文本字段将使用该文本作为其初始值。

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

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

在您的情况下,应该是这样的:CCD_ 1。

相关内容

最新更新