如何正确预填颤形场?

问题描述 投票:4回答:2

我正在尝试创建一个“编辑配置文件”页面,我正在加载所有用户数据并让用户修改它。但是,在value上同时使用textTextEditingController属性导致无法修改TextFormField中的数据。我可以添加到它的开头,但我不能从中删除任何字符。

为了进一步详细说明这种行为,在下面的屏幕截图中,我可以在字段中输入更多内容(就像我做的“Asdf”),但是从光标所在的位置,我无法将光标向右移动或删除“F”或者最初放置在那里的任何角色。

Form behavior

在qazxsw poi的qazxsw poi函数中,qazxsw poi param是提交时表格的全文,在本案例中为“AsdfFrederick”。

这是我的代码:

OnSaved

这是TextFormField

value
forms flutter
2个回答
7
投票

弄清楚:从import 'dart:async'; import 'package:flutter/material.dart'; import '../models/user.dart'; class EditProfileView extends StatefulWidget { @override _EditProfileViewState createState() => new _EditProfileViewState(); } class _EditProfileViewState extends State<EditProfileView> { final GlobalKey<FormState> _formKey = new GlobalKey<FormState>(); void _handleSubmitted() { final FormState form = _formKey.currentState; if (!form.validate()) { } else { form.save(); User.instance.save().then((result) { print("Saving done: ${result}."); Navigator.pop(context); }); } } @override Widget build(BuildContext context) { final ThemeData themeData = Theme.of(context); final DateTime today = new DateTime.now(); // controllers for form text controllers final TextEditingController _firstNameController = new TextEditingController(); //_firstNameController.value = new TextEditingValue(text: User.instance.first_name); _firstNameController.text = User.instance.first_name; final TextEditingController _lastNameController = new TextEditingController(); _lastNameController.text = User.instance.last_name; return new Scaffold( appBar: new AppBar(title: const Text('Edit Profile'), actions: <Widget>[ new Container( padding: const EdgeInsets.fromLTRB(0.0, 10.0, 5.0, 10.0), child: new MaterialButton( color: themeData.primaryColor, textColor: themeData.secondaryHeaderColor, child: new Text('Save'), onPressed: () { _handleSubmitted(); Navigator.pop(context); }, )) ]), body: new Form( key: _formKey, autovalidate: _autovalidate, onWillPop: _warnUserAboutInvalidData, child: new ListView( padding: const EdgeInsets.symmetric(horizontal: 16.0), children: <Widget>[ new Container( child: new TextFormField( decoration: const InputDecoration(labelText: "First Name", hintText: "What do people call you?"), autocorrect: false, controller: _firstNameController, onSaved: (String value) { User.instance.first_name = value; }, ), ), new Container( child: new TextFormField( decoration: const InputDecoration(labelText: "Last Name"), autocorrect: false, controller: _lastNameController, onSaved: (String value) { User.instance.last_name = value; }, ), ), ], ))); } } 切换到flutter doctor,创建局部变量来存储对字段的更改,并使用% flutter doctor [✓] Flutter (on Mac OS X 10.12.6 16G29, locale en-US, channel alpha) • Flutter at /Users/frederickcook/flutter • Framework revision 701d534ba9 (2 weeks ago), 2017-09-12 14:01:51 -0700 • Engine revision 31d03de019 • Tools Dart version 1.25.0-dev.11.0 [✓] Android toolchain - develop for Android devices (Android SDK 26.0.0) • Android SDK at /Users/frederickcook/Library/Android/sdk • Platform android-26, build-tools 26.0.0 • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 1.8.0_112-release-b06) [✓] iOS toolchain - develop for iOS devices (Xcode 9.0) • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 9.0, Build version 9A235 • ios-deploy 1.9.2 • CocoaPods version 1.2.1 [✓] Android Studio (version 2.3) • Android Studio at /Applications/Android Studio.app/Contents • Java version OpenJDK Runtime Environment (build 1.8.0_112-release-b06) [✓] IntelliJ IDEA Community Edition (version 2017.2.5) • Flutter plugin version 17.0 • Dart plugin version 172.4155.35 [✓] Connected devices • iPhone 7 • 2AE532E3-5B4B-4D8D-8CFB-F54C3BF6F8EE • ios • iOS 11.0 (simulator) 设置初始形式值而不是在TextFormField中进行。

TextField

3
投票

使用initState属性可以很好地与build配合使用。

© www.soinside.com 2019 - 2024. All rights reserved.