这个问题很奇怪,在完全重新启动应用程序后,它可以正常工作,直到你导航到CreateJoinPage,然后导航回主页,然后导航到CreateJoinPage,然后try 执行代码块,错误消息将开始弹出.我正在CreateJoinPage中创建一个侦听器,用于侦听socket.io的输入:

void createRoomSuccessListener(BuildContext context) {
_socketClient.on('createRoomSuccess', (room2) {
  Provider.of<RoomDataProvider>(context, listen: false)
      .updateRoomData(room);
  Provider.of<RoomDataProvider>(context, listen: false).insertPlayer(room);
  Navigator.push(
    context,
    MaterialPageRoute(
        builder: (contextPage) => const ActivitySelectionPage()),
  );
});

}

这个错误是从作为代码一部分的两个Provider.of行中调用的.

这个监听器是从我的CreateJoinPage(StatelessWidget)岁起调用的:

SocketMethods().createRoomSuccessListener(context);

完整错误代码为:

错误:查找停用小部件的祖先不安全.

推荐答案

看起来问题是context在套接字事件到达的同时被销毁.修复如果释放CreateJoinPage小部件,则应删除侦听器.首先,将CreateJoinPageStatelessWidget更改为StatefulWidget以覆盖disposed方法,如下所示:


void removeRoomSuccessListener() {
  _socketClient.off('createRoomSuccess');
}


class CreateJoinPage extends StatefulWidget {

  @override
  State<CreateJoinPage> createState() => _CreateJoinPageState();

  ...
}

class _CreateJoinPageState extends State<CreateJoinPage> {
  @override
  void dispose() {
    SocketMethods().removeRoomSuccessListener(context);
    super.dispose();
  }

  ...
}

并以同样的方式宣布SocketMethods.removeRoomSuccessListener人:

void removeRoomSuccessListener() {
  _socketClient.off('createRoomSuccess');
}

Flutter相关问答推荐

为什么我不能看到类音频源在flutter?'

如何在扩展其他小部件时访问Ref

如何将Will POP示波器转换为POP数据抖动的POP示波器

将图标呈现在Flutter 克牌小工具的角落上

为什么我的PUT请求不能正常工作?

轻松本地化包翻译在底部导航栏项目标签Flutter 翼dart 中不起作用

如何在Flutter中将背景 colored颜色 更改为黑色?

使用 Flutter 显示/隐藏带有下拉抽屉动画的小部件

创建仅定义导出的文件是否有意义?

尽管我的 url 链接正确,但 ArgumentError(无效参数:URI 文件中未指定主机:///)错误

Flutter底部面板局部显示

你如何在 Flutter 中组合两个数组?

在 flutter 的另一个类中使用变量值

Flutter 中出现错误空判断运算符用于空值

无法在 flutter 中更新 void 方法内的变量值

如何按值对列表中的 map 进行排序

更改文本字段Flutter 中最大字母的 colored颜色

一个或多个插件需要更高的 Android SDK 版本

如何从dart 中的当前日期时间中减go 1 天?

如何做到这一点,当我们在 textified 中输入 ab 然后将 applebanana 显示为一个单词?飘飘然