当选择TextField或TextFormField时,Flutter应用程序会冻结

19

我有一个Flutter应用程序,在所有方面都正常运行,除了当我选择一个TextField(或TextFormField)时。当我选择TextField时,光标在TextField中闪烁,但我无法键入任何内容,并且所有其他按钮,如floatingActionButton和AppBar中的后退按钮,都停止工作。实质上,该应用程序似乎已经冻结,但我没有收到任何错误消息。

在两个包含FocusNodes和TextEditingControllers的不同页面尝试多次修复问题后,我回到了起点,加入了一个新页面,其中包含来自Flutter网站的代码,但是这个基础代码中的TextField仍然会锁定应用程序。

import 'package:flutter/material.dart';

class EventDetailForm extends StatefulWidget {
  static const String routeName = "/events/event-detail-form";
  @override
  _EventDetailFormState createState() => _EventDetailFormState();
}

class _EventDetailFormState extends State<EventDetailForm> {
  final myController = TextEditingController();
  @override
  void dispose() {
    myController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Event Detail')),
      body: Padding(
          padding: const EdgeInsets.all(16),
          child: TextField(
            controller: myController,
          )),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          return showDialog(
              context: context,
              builder: (context) {
                return AlertDialog(
                  content: Text(myController.text),
                );
              });
        },
        child: Icon(Icons.text_fields),
      ),
    );
  }
}

很遗憾,我没有收到任何错误信息。光标只是在文本字段中闪烁,其他所有功能都失去了作用,我不得不退出并重新启动。我不确定还应该考虑什么。是否有人对可能导致这种情况的原因有任何想法?

6个回答

12

模拟器 -> 设备 -> 抹掉所有内容和设置 对我有效。


8

当我将Xcode升级到iOS 13.1时,遇到了同样的问题。我切换到不同的模拟器后,问题就解决了。


感谢提供的额外信息。我采用了awaik的解决方案,即切换到Beta频道,并且它起作用了。然后我去处理应用程序的其他事情。当我在10天后回到表单时,我的问题又出现了。这一次我切换到另一个模拟器,问题得到了解决。我投票支持两个答案,因为它们都行之有效...不幸的是,我是个新手,我的投票还没有计入。 - xdevco
1
关闭模拟器并重新打开(同一个)对我也有帮助。似乎是当我将模拟器保持打开状态达3或4天时会出现这个问题。 - ncuillery

2

可能有点晚了,但我今天也遇到了这个问题。我也将channel更改为beta,但不幸的是并没有起作用。显然对我起作用的是当我将频道重新设置为stable后重新启动模拟器。


1

我不确定你是怎么想到的,但这解决了我的问题。谢谢! - xdevco
欢迎 :) 这很容易 - 我的应用程序一直运行得很完美,但在我更新后就出现了问题。因此,原因在于Flutter引擎本身。在这种情况下,我们可以降级版本或尝试beta通道,在该通道上,开发人员可能已经修复了该错误。 - awaik
已切换到beta版本,但问题仍然存在 :/ - kashlo
你能执行"flutter doctor -v"命令并检查Flutter版本吗? 在新版本中,它应该可以在稳定渠道上运行。 - awaik

0

我觉得我来晚了,但这个问题在2021年仍然存在。

我尝试了所有的解决方案,但无法修复它。无论我在TextField、TextFormField或autocomplete_textfield中输入什么字符都不可见。

我通过将Widget作为showGeneralDialog()打开而不是使用Navigator.of(...)来解决了这个问题。以下是示例代码。

await showGeneralDialog(
    barrierColor: AppStyle.primaryColor.withOpacity(0.3),
    transitionBuilder: (context, a1, a2, widget) {
      return Transform.scale(
        scale: a1.value,
        child: Opacity(opacity: a1.value, child: WidgetScreenToOpen()),
      );
    },
    transitionDuration: Duration(milliseconds: 500),
    barrierDismissible: true,
    barrierLabel: 'Label',
    context: context,
    pageBuilder: (context, animation1, animation2) {
      return Container();
    }).then((result) {
  return result;
});

0

我没有改变频道,只需要简单的flutter upgrade就可以解决这个问题。我还关闭了Android Studio和所有模拟器,重新启动后,问题就消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接