Flutter小部件绑定实例.addPostFrameCallback((_) 错误。

6

大家好,首先很抱歉我的英语不好。 在使用flutter-Dart调试代码时遇到了错误。

          import 'package:flutter/foundation.dart';
          import 'package:flutter/material.dart';
          import 'package:get/get.dart';
          import 'package:http/http.dart' as http;

          // Bu alan benim soru değişkenlerimi Getx yardımı ile tuttuğum classdır.farkllı değişken classları yazılabilir.
          class memberController extends GetxController {
            //5 benim değikenimin ilk değeridir.
            var _memberName = "a".obs;
            var _memberPhoto = "a".obs;

            //get ile çeker, set ile veriyi atarım.
            get memberName => _memberName.value;
            set memberName(yeniDeger) => _memberName.value = yeniDeger;

            get memberPhoto => _memberPhoto.value;
            set memberPhoto(yeniDeger) => _memberPhoto.value = yeniDeger;
          }

          void main() => runApp(MyApp());

          class MyApp extends StatelessWidget {
            memberController _controller1 = Get.put(memberController());

            @override
            Widget build(BuildContext context) {
              return MaterialApp(
                title: 'Material App',
                home: Scaffold(
                  body: SafeArea(
                      child: Column(
                    children: [
                      TextField(
                        onChanged: (Value) {
                          _controller1.memberName = Value;
                        },
                        decoration:
                            InputDecoration(border: InputBorder.none, hintText: 'memberName'),
                      ),
                      TextField(
                        onChanged: (Value) {
                          _controller1.memberPhoto = Value;
                        },
                        decoration:
                            InputDecoration(border: InputBorder.none, hintText: 'memberPhoto'),
                      ),
                      ElevatedButton(
                        onPressed: () async {
                          final uriAAA = 'https://www.meshcurrent.online/myWebApp/add_user.php';
                          var map = new Map<String, dynamic>();
                          map['memberName'] = _controller1.memberName;
                          map['memberPhoto'] = _controller1.memberPhoto;

                          http.Response response = await http.post(
                            Uri.parse(uriAAA),
                            body: map,
                          );
                        },
                        child: Text('SORUYU EKLE'),
                      ),
                    ],
                  )),
                ),
              );
            }
          }

这是我的memberAdd.dart代码文件。 这段代码的目标: - 有两个文本框,我将使用getx库从文本框中获取文本。当文本框的onChanged事件发生时,_controller1.memberName和_conroller1.memberPhoto也会更改。 - 当我按下Elevatedbutton时,我将把数据从文本框发送到web服务器。
但是我遇到了错误。
/C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/extension_navigation.dart:357:33: Error: Method 
   'addPostFrameCallback' cannot be called on 'SchedulerBinding?' because it is 
      potentially null. 'SchedulerBinding' is from 
     'package:flutter/src/scheduler/binding.dart' 
    ('/C:/src/flutter/packages/flutter/lib/src/scheduler/binding.dart').
      package:flutter/…/scheduler/binding.dart:1
     Try calling using ?. instead.
     SchedulerBinding.instance.addPostFrameCallback((_) {

有很多像这样的错误文本。

请帮帮我。 我正在使用Visual Studio。


请澄清您的具体问题或提供额外的细节,以准确突出您所需的内容。目前的描述不够清晰,很难确定您在询问什么。 - Community
4个回答

3

解决方案

这是一个已知问题

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

但总的来说,只需更新你的pubspec.yaml

dependencies:
  # ...
  get: ^4.6.x # Remove this line
  get: 4.6.1 # And replace with this line
  # ...

这将强制使用一个没有该错误的版本。

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

这个错误不是来自于你的代码,而是来自于你在项目中使用的GetX包。所以在你的项目中没有什么你可以做来修复它。

你可以通过查看异常位置来发现这不是关于你的代码的问题:

C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/extension_navigation.dart:357:33
.pub-cache/hosted/pub.dartlang.org是Flutter托管您所依赖的库的目录。
有时我们会遇到与我们的项目本身无关但与包/库/插件有关的异常/错误。这可能有很多原因,但最常见的是Flutter进行了重大的破坏性更改,而包没有正确迁移,然后包的用户就会遇到由包维护者造成的错误。
解决方法
直截了当地说:没有绝对的解决方法,但有一个正确的方向:
  • 找到错误所在的位置(哪个包?哪个仓库?)
  • 搜索提到与你相同错误的问题或拉取请求(如果你幸运的话,你会在这一步找到解决方案,就像现在的情况一样)
  • 如果你没有找到任何相关信息,请自己寻找解决方案并打开一个问题或拉取请求(如果你不知道如何修复,也可以只打开一个问题,尽可能提供详细信息)
  • 等待合并和新版本发布以修复你的错误。你可以创建一个插件分支,其中包含你的修复,并使你的项目依赖它(一个具有修复的版本)

嗯,我明白了。谢谢你的帮助。现在它可以工作了。 - mesh

1
如果您无法升级或降级Flutter版本,可以尝试使用这个百分比指示器的版本(用双引号括起来)。 percent_indicator: "^2.1.9+1" 然后,执行clean和flutter pub get命令。 对我而言,这个方法有效。

1
问题在于导致此问题的软件包已更新为兼容最新版本的Flutter 3.0.0。您可以选择以下两种方法中的一种:
  1. 将Flutter版本更新到3.0.0或更高版本
  2. 降级软件包版本,使其与当前Flutter版本兼容,删除pubspec.yaml中的脱字符(^)
如果您选择第二个选项,因为现在可能不希望将项目更新到最新版本的Flutter,那么您最好查看软件包的版本历史记录,并降级到在该版本之前可用于新的Flutter SDK版本的版本。
如果版本历史记录不清楚,您还有另一种选择,即转到GitHub上的软件包问题页面(请参见pub.dev软件包页面右侧的“View/report issues”),搜索是否有人已报告了该问题(您可以使用搜索栏并搜索“SchedulerBinding”或类似内容),并查看评论中是否有任何人指出更改前的版本。
如果仍然找不到最后一个兼容版本,则可以尝试使用软件包版本历史记录中提供的每个版本进行试错。不要忘记从pubspec.yaml文件的软件包版本中删除(^)符号,否则它将继续使用最新版本。

0

我遇到了同样的错误,解决方法如下:

问题:

velocity_x: ^3.5.1flutter 2.10 不兼容,因为 ^3.5.1 是针对 flutter 3 的。

解决方案:

  • 步骤 1:在 pubspec.yaml 中将 velocity_x: ^3.5.1 更改为 velocity_x: ^3.4.0

  • 步骤 2:在 pubspec.lock 中将 velocity_x 的 version: "3.5.1" 更改为 version: "3.4.0"

  • 步骤 3:flutter clean

  • 步骤 4:flutter run

我认为这个方法会对你有用。


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