Flutter WidgetsBinding.instance.addPostFrameCallback((_)错误

mes*_*esh 6 dart flutter

朋友们大家好,首先我很抱歉我的英语不好。\n当我开始在 flutter-Dart 中调试代码时遇到错误。

\n
          import 'package:flutter/foundation.dart';\n          import 'package:flutter/material.dart';\n          import 'package:get/get.dart';\n          import 'package:http/http.dart' as http;\n\n          // Bu alan benim soru de\xc4\x9fi\xc5\x9fkenlerimi Getx yard\xc4\xb1m\xc4\xb1 ile tuttu\xc4\x9fum classd\xc4\xb1r.farkll\xc4\xb1 de\xc4\x9fi\xc5\x9fken classlar\xc4\xb1 yaz\xc4\xb1labilir.\n          class memberController extends GetxController {\n            //5 benim de\xc4\x9fikenimin ilk de\xc4\x9feridir.\n            var _memberName = "a".obs;\n            var _memberPhoto = "a".obs;\n\n            //get ile \xc3\xa7eker, set ile veriyi atar\xc4\xb1m.\n            get memberName => _memberName.value;\n            set memberName(yeniDeger) => _memberName.value = yeniDeger;\n\n            get memberPhoto => _memberPhoto.value;\n            set memberPhoto(yeniDeger) => _memberPhoto.value = yeniDeger;\n          }\n\n          void main() => runApp(MyApp());\n\n          class MyApp extends StatelessWidget {\n            memberController _controller1 = Get.put(memberController());\n\n            @override\n            Widget build(BuildContext context) {\n              return MaterialApp(\n                title: 'Material App',\n                home: Scaffold(\n                  body: SafeArea(\n                      child: Column(\n                    children: [\n                      TextField(\n                        onChanged: (Value) {\n                          _controller1.memberName = Value;\n                        },\n                        decoration:\n                            InputDecoration(border: InputBorder.none, hintText: 'memberName'),\n                      ),\n                      TextField(\n                        onChanged: (Value) {\n                          _controller1.memberPhoto = Value;\n                        },\n                        decoration:\n                            InputDecoration(border: InputBorder.none, hintText: 'memberPhoto'),\n                      ),\n                      ElevatedButton(\n                        onPressed: () async {\n                          final uriAAA = 'https://www.meshcurrent.online/myWebApp/add_user.php';\n                          var map = new Map<String, dynamic>();\n                          map['memberName'] = _controller1.memberName;\n                          map['memberPhoto'] = _controller1.memberPhoto;\n\n                          http.Response response = await http.post(\n                            Uri.parse(uriAAA),\n                            body: map,\n                          );\n                        },\n                        child: Text('SORUYU EKLE'),\n                      ),\n                    ],\n                  )),\n                ),\n              );\n            }\n          }\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的代码 memberAdd.dart 文件。\n此代码的目标。\n-有两个文本字段,我将使用 getx 库从文本字段获取文本。当文本字段 onChanged getx _controller1.memberName 和 _conroller1.memberPhoto 变化时。\n当我按下 Elevated 按钮时,我会将数据从 texfields 发送到 webserber。

\n

但我收到这个错误

\n
/C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/extension_navigation.dart:357:33: Error: Method \n   'addPostFrameCallback' cannot be called on 'SchedulerBinding?' because it is \n      potentially null. 'SchedulerBinding' is from \n     'package:flutter/src/scheduler/binding.dart' \n    ('/C:/src/flutter/packages/flutter/lib/src/scheduler/binding.dart').\n      package:flutter/\xe2\x80\xa6/scheduler/binding.dart:1\n     Try calling using ?. instead.\n     SchedulerBinding.instance.addPostFrameCallback((_) {\n
Run Code Online (Sandbox Code Playgroud)\n

像这样的错误文字还有很多。

\n

请帮助我。\n我正在使用 Visual Studio

\n

Ale*_*ntt 3

解决方案

这是一个已知的问题

您可以使用这个临时解决方案

但总而言之,只需更新您的pubspec.yaml

dependencies:
  # ...
  get: ^4.6.x # Remove this line
  get: 4.6.1 # And replace with this line
  # ...
Run Code Online (Sandbox Code Playgroud)

这将强制使用不存在错误的版本。

但这个错误是从哪里来的呢?

此错误意味着您的代码中没有任何内容,而是GetX您在项目中使用的包中的错误。因此,您在项目中无能为力来解决这个问题。

通过查看异常位置,您可以注意到这与您的代码无关:

C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/extension_navigation.dart:357:33
Run Code Online (Sandbox Code Playgroud)

.pub-cache/hosted/pub.dartlang.org是 Flutter 托管您所依赖的库的目录。

有时我们遇到的异常/错误与我们的项目本身无关,而是与我们依赖的包/库/插件相关。造成这种情况的原因有很多,但最常见的是当 Flutter 发生重大重大更改并且包无法正确迁移时,包的用户就会陷入包维护者犯下的错误。

解决方法

说得直白一点:没有绝对的解决办法,但有一个正确的方向:

  • 查找错误在哪里(哪个包?哪个存储库?)
  • 搜索与您提到相同错误的问题或 PR(如果幸运的话,您会在此步骤中找到解决方案,这就是您现在的情况)
  • 如果您没有找到任何相关内容,请自行搜索解决方案并提出问题或拉取请求(或者,如果您不知道如何解决,也可以提出问题,请尝试提供尽可能多的详细信息)
  • 等待合并并发布包含错误修复的新版本。您可以创建一个包含您的修复程序的插件分支,并使您的项目依赖于它(具有修复程序的版本)