- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个表单,里面有很多 TextFormField 和(目前)一个 DropDownButton。
当我点击其中一个 TextFormFields 时,键盘会闪烁但不会停留。我发现的唯一解决方法是开始在我的计算机键盘上打字,让手机键盘自行弹出 - 显然不是在任何地方打字 - 然后,当键盘已经启动时,点击 TextFormField 然后我是能够输入文本,但是一旦我点击出该字段,输入的文本就会消失。这个创可贴对除Name以外的所有字段都无效,因为它们的keyboardTypes都是数字键盘。因此,由于既不输入字母也不输入数字会在手机上调用此键盘,因此不可能让这些字段的键盘具体化。
我确信表单是问题所在,因为对于相同的分层,如果我将 Padding 的子项更改为直接转到相同的 ListView,所有 TextFormField 问题都会消失。
我选择不包括我的 DropDownButton 问题的相关代码,因为它可能不相关,因为它是唯一在我临时删除 Form 小部件时没有解决的问题。
With temporary workaround, entered text still will not remain after exiting field
DropDownButton wont display selected value
class NewPage extends MaterialPageRoute<Null>{
final formKey = GlobalKey<FormState>();
String _name;
void _submit(){
final form = formKey.currentState;
if(form.validate()){
form.save();
print("$_name");
}
}
final name = TextFormField(
//all other TextFormFields are declared as name is
validator: (val) =>
val.isEmpty? "Name can't be empty.': null,
onSaved: (val) => _name = val,
decoration: InputDecoration(
labelText: "Name",
labelStyle: TextStyle(
fontSize: 20.0,
),
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 12.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20.0),
)
)
);
final age = TextFormField(
keyboardType: TextInputType.number,
validator: null,
decoration: InputDecoration(
labelText: "Age",
labelStyle: TextStyle(
fontSize: 20.0,
),
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 12.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20.0),
)
),
);
return Scaffold(
body: Padding(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child: new Form(
key: formKey,
child: new ListView(
children: <Widget> [
SizedBox(height: 100.0),
name,
SizedBox(height: 20.0),
new Text("Sex:"),
sex,
SizedBox(height: 20.0),
age,
//and so on
new RaisedButton(
onPressed: _submit,
child: new Text("Go"),
),
],
),
),
),
);
}
最佳答案
我认为问题可能源于 class NewPage extends MaterialPageRoute<Null>
.除非你正在创建一个新的路由子类来显着改变路由的行为,否则你不应该从它扩展——如果你要扩展它,那将是在你对 flutter 的工作原理有深刻的理解之后。
我相信您想要做的是扩展 StatefulWidget 并制作相应的 State<>。如果您出于某种原因需要制作路线,您仍然可以传入一个可以满足您需要的构建器,即 new MaterialPageRoute(builder: (context) => new NewPage())
.
当我在模拟器中运行它时,这对我有用。我在下拉列表中添加也只是为了好玩 =D。
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
void main() => runApp(new MaterialApp(home: new NewPage()));
class NewPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => new NewPageState();
}
class NewPageState extends State<NewPage> {
final formKey = GlobalKey<FormState>();
String _name;
String _sex;
void _submit() {
final form = formKey.currentState;
if (form.validate()) {
form.save();
print("$_name");
}
}
@override
Widget build(BuildContext context) {
final name = TextFormField(
//all other TextFormFields are declared as name is
validator: (val) => val.isEmpty ? "Name can't be empty." : null,
onSaved: (val) => _name = val,
decoration: InputDecoration(
labelText: "Name",
labelStyle: TextStyle(
fontSize: 20.0,
),
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 12.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
);
final age = TextFormField(
keyboardType: TextInputType.number,
validator: null,
decoration: InputDecoration(
labelText: "Age",
labelStyle: TextStyle(
fontSize: 20.0,
),
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 12.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
);
final sex = DropdownButton(
items: [
new DropdownMenuItem(child: new Text("Male"), value: "male"),
new DropdownMenuItem(child: new Text("Female"), value: "female"),
new DropdownMenuItem(child: new Text("Other"), value: "other"),
],
onChanged: (val) => setState(() => _sex = val),
value: _sex,
);
return new Scaffold(
body: Padding(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child: new Form(
key: formKey,
child: new ListView(
children: <Widget>[
SizedBox(height: 100.0),
name,
SizedBox(height: 20.0),
new Text("Sex:"),
sex,
SizedBox(height: 20.0),
age,
//and so on
new RaisedButton(
onPressed: _submit,
child: new Text("Go"),
),
],
),
),
),
);
}
}
如果这不能解决问题,一些额外的信息(例如您使用的设备)会有所帮助。此外,发布一个实际编译的代码示例将有助于我们帮助您 - 我建议在下次发布问题之前检查一下。
关于android - Flutter Form Widget 不会显示文本或键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50865068/
我的设置.py: LANGUAGE_CODE = 'de' TIME_ZONE = require_env("TIME_ZONE_IDENTIFIER") USE_I18N = True USE_L1
谁能给我解释一下 Django 的 forms.Form 和 forms.ModelForm 的相同点和不同点? 最佳答案 从 forms.Form 创建的表单由您手动配置。您最好将这些用于不直接与模
我在用 angularjs 构建的表单上遇到此错误。 `错误:[$compile:multidir] 多个指令 [form, form] 请求 'form' Controller :
我是 Spring 的新手,在尝试显示表单错误时遇到了一些麻烦。 我有以下表格: User Name:
我希望在提交表单时找出 spring:bind 和 form:form 标记库之间的区别。 我的 JSP 片段如下: ....
类型‘AbstractControl’上不存在属性‘Controls’。
有一个问题与此非常相似,但我想以不同的方式提出。 我是一个非常自定的人,但有时我确实喜欢走捷径。就这样吧。 我确实发现这两个类非常相似,尽管其中一个“帮助”程序员更快地编写代码或减少代码/重复代码。将
我在控制台中收到此错误。 “表单提交已取消,因为表单未连接” 自从我们将应用程序迁移到更新版本的 React 后,尝试将我的 redux-form 从 v5 迁移到 v6 之后。 我不确定这里出了什么
我想要的是一个表单,在提交时运行验证检查,并突出显示所有无效字段并添加工具提示。 我正在有效地寻找这样的东西: dojo.forEach(dijit.byId('myForm')._invalidWi
我需要设置symfony2表单元素的值。 我在 Controller 操作中使用了doctrine2实体, Symfony\Component\Form\AbstractType 和createFor
这是用于将数据提交到自定义列表的自定义 Editform.aspx。用户完成表单后,他应该能够点击按钮甚至“确定”按钮,并让 sharepoint 将表单数据提交到列表,然后重定向到项目显示表单 (d
我想知道在 spring 标签中编写所有表单是否是一种好习惯,或者我可以将 spring 表单标签与 html 表单标签混合使用吗? 最佳答案 当您需要 Spring 表单提供的功能时使用它们: 绑定
我正在构建动态表单并希望“即时”添加表单组。 这是我的代码,几乎可以工作: import {Component, OnInit} from '@angular/core'; import {FormG
表格 Form.Load 有什么区别? , Form.Shown和 Form.Activated事件?他们被解雇的顺序是什么? 最佳答案 参见 Windows Forms Events Lifecyc
我正在使用具有路线跟踪功能的 Xamarin Forms 开发一些应用程序。尽管我正在使用 AppCenter,即在 App.xaml.cs OnStart 我添加 protected asy
我正在实现一个 gameboy 模拟器,就像我之前的许多人一样。 我正在尝试实现 PPU 并为此使用代表屏幕的类。 // needed because VS can't find it as depe
我是 Orbeon Form 新手,想使用它。不过,我尝试过 Orbeon Form 网站上的 Form 示例,并用泰语输入了一些数据。是的,可以在“泰语”字段中输入数据。但是当我尝试生成“PDF”时
那么让表单一遍又一遍有效地呈现相同表单的最佳方法是什么,并根据实体的属性值有条件地禁用字段? 我有一个发票实体,需要一个用于创建发票的表单,以及在发票流程的各个阶段(生成、发送、支付等)禁用各个字段的
因此,我一直在与我的同事(开发人员和设计人员)就 Web 表单的自动填充工具进行亲切的辩论。这是一个重要的开发问题,因为它会影响表单的构建方式。 问)自动填充工具(例如 Google 工具栏或 Chr
那么让表单一遍又一遍有效地呈现相同表单的最佳方法是什么,并根据实体的属性值有条件地禁用字段? 我有一个发票实体,需要一个用于创建发票的表单,以及在发票流程的各个阶段(生成、发送、支付等)禁用各个字段的
我是一名优秀的程序员,十分优秀!