颤振 - 跨度不能有零长度

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(),
      ),
    );
  

【讨论】:

以上是关于颤振 - 跨度不能有零长度的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能拖动跨度,而是拖动 img?

为啥我不能在颤振中添加包

为啥颤振本地化不能正常工作?

不能在颤振中使用()(AKA:匿名函数)[重复]

颤振列表错误参数类型'List'不能分配给参数类型'String'

颤振 JSON 解析。不能显示多个字段值