颤振 - 跨度不能有零长度
Posted
技术标签:
【中文标题】颤振 - 跨度不能有零长度【英文标题】:Flutter - spans cannot have a zero length 【发布时间】:2017-10-21 03:16:48 【问题描述】:我正在开发一个使用 Textfield
的 Flutter 应用程序。
我像这样声明TextField
:
new TextField(
controller : _controller,
decoration : new InputDecoration(
hintText: 'Message...'
)
)
TextField
显示在我的小部件中,但是当我点击它时,键盘会自动关闭,并且控制台中会出现以下错误
E/SpannableStringBuilder(17860): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
我在 android(Samsung Galaxy Grand Prime,Android 5.1)上使用 IntelliJ 中的 Flutter 插件运行此程序。
我该如何解决这个问题?
编辑:从这个答案 (Android - SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length) 中可以看出,我尝试过切换键盘(谷歌和三星),还是一样
【问题讨论】:
你是如何初始化_controller的? 最终 TextEditingController _controller = new TextEditingController(); 如图所示:flutter.io/text-input 【参考方案1】:我认为完整的错误可能在其他地方。如果问题特定于一个 android 设备,我建议打开一个新的颤振问题。
【讨论】:
将尝试使用其他 android 设备,我会与您保持联系 刚刚尝试使用 Galxy Tab A 并没有得到错误。将打开一个问题。谢谢柯林【参考方案2】:我的解决方法是添加autocorrect: false
,并设置keyboardType: TextInputType.visiblePassword
错误发生在我的s8plus 上,它没有发生在我的iPhone 模拟器上。
return TextFormField(
controller: emailController,
autofocus: true,
autocorrect: false,
keyboardType: TextInputType.visiblePassword,
validator: validateEmailOrPhoneNumber,
onChanged: (text)
this._validateEmailORPhoneNumber(text);
this._onTouched('emailOrPhoneNumber');
,
onTap: () => _onTouched('emailOrPhoneNumber'),
decoration: InputDecoration(
prefixIcon: isPhoneNumber
? Container(
width: 70,
child: leftSection,
)
: null,
labelText: 'Email or Phone number',
hintText: 'Enter Email or Phone number'),
);
【讨论】:
【参考方案3】:我有同样的错误。就我而言,问题不在于TextFormField
。这是因为 Form
小部件中的密钥。如果您使用密钥,则通用小部件必须是StatefulWidget
,而不是StatelessWidget
。
代码错误
class MyWidget extends StatelessWidget
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context)
// TODO: implement build
return Scaffold(
body: Form(
key: _formKey,
child: TextFormField(),
),
);
正确的代码
class MyWidget extends StatefulWidget
@override
State<StatefulWidget> createState()
// TODO: implement createState
return _MyWidgetState();
class _MyWidgetState extends State<MyWidget>
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context)
// TODO: implement build
return Scaffold(
body: Form(
key: _formKey,
child: TextFormField(),
),
);
【讨论】:
以上是关于颤振 - 跨度不能有零长度的主要内容,如果未能解决你的问题,请参考以下文章