“非活动InputConnection上的beginBatchEdit”,在编辑TextFormField时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“非活动InputConnection上的beginBatchEdit”,在编辑TextFormField时相关的知识,希望对你有一定的参考价值。

我正在尝试创建一种表单,用户可以使用简单的TextFormField更改其用户数据(例如,用户名,电子邮件等)。 TextFormField包含当前用户数据(例如,用户名),并且用户应该能够通过按“确认”按钮来更改文本并提交新输入。您可能会在代码示例中看到,在从Firebase接收数据(自定义“ UserData”对象)(可能不是最好的解决方案,但它可以正常工作)后,我已经需要一些解决方法来使用当前用户数据填充TextFormField猜)。

很遗憾,更改TextFormField内部的文本无法正常工作。 添加/删除每个字符之后,手机的键盘关闭。在我的调试控制台中,伴随着以下错误消息的出现:

W/IInputConnectionWrapper(19623): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(19623): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(19623): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(19623): getSelectedText on inactive InputConnection

请在下面找到我的代码示例。我试图尽可能简化它,同时不遗漏潜在的错误源。

其他信息:我使用名为wc_form_validators的flutter插件进行FormField验证。变量“ generalNameValidator”在另一个文件中定义。但我认为您不必为此担心,因为它可以在我的应用程序的其他页面中正常工作。

class Edit extends StatefulWidget 
  @override
  _EditState createState() => _EditState();


class _EditState extends State<Edit> 

  String newName = '';
  bool isInit = false;
  TextEditingController myNameController;

  void _setFormfields() 
    myNameController = new TextEditingController(text: newName);
    isInit = true;
  

  @override
  Widget build(BuildContext context) 

    final _formKey = GlobalKey<FormState>();    
    final user = Provider.of<User>(context);

    return StreamBuilder<UserData>(
      stream: DatabaseService(uid: user.uid).userStream,
      initialData: UserData(uid: user.uid, name: "..."),
      builder: (context, snapshot) 
        UserData userData = snapshot.data;
        newName = userData.name;

        // checks if app has already received UserData from Firebase
        if (!isInit && newName != "...") _setFormfields();

        return Scaffold(
          body: Form(
            key: _formKey,
            child: Column(
              children: <Widget>[
                TextFormField(
                  onChanged: (value)     
                    setState(() => newName = value);
                  ,
                  validator: generalNameValidator,
                  controller: myNameController,
                ),

                RaisedButton(
                  child: Text("CONFIRM"),
                  onPressed: () 
                    if (_formKey.currentState.validate()) 
                      setState(() => newName = myNameController.text);
                      print("new Name is: " + newName);
                    
                  
                ),
              ],
            ),
          ),
        );
      
    );
  

供参考:我已经花时间在this related stackoverflow discussion上,但是据我所知,没有哪一个分析工具真正适合我的问题。当然,我对颤振/飞镖的经验很少。

有人知道我的问题是什么原因以及如何解决?如果有任何详细问题或需要更多代码示例,请随时询问。

提前感谢。

答案

这个固定的矿井。试试吧

android清单文件中,将android:windowSoftInputMode值更改为"adjustNothing"

以上是关于“非活动InputConnection上的beginBatchEdit”,在编辑TextFormField时的主要内容,如果未能解决你的问题,请参考以下文章