Flutter WidgetsBinding.instance.addPostFrameCallback((_) err



朋友们好,首先为我糟糕的英语道歉。当我在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。飞镖文件。此代码的目标。-有两个文本字段,我会得到文本字段与getx库的文本。当textfields onChanged时,get_controller1。memberName和_controller1。memberPhoto来不及赶到。-我将发送我的数据从文本域webserber当我按下Elevatedbutton.

但是我得到了这个错误

/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

解决方案

这是一个已知问题。

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

总之,只要更新你的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有重大的破坏性更改,而包不能正确迁移时,包的用户就会陷入包维护者所犯的错误。

解决方案方法很简单:没有绝对的修正,但有一个正确的方向:

  • 查找bug在哪里(哪个包?哪个仓库?)
  • 搜索与您提到相同错误的问题或pr(如果您幸运的话,您会在此步骤中找到解决方案,这就是您现在的情况)
  • 如果你没有找到任何相关的,搜索一个解决方案,自己打开一个问题或拉请求(或者你也可以只是打开一个问题,如果你不知道如何修复,尽量给出更多的细节,你可以)
  • 等待合并和新版本与您的错误修复。你可以创建一个包含修复的插件分支,并使你的项目依赖于它(一个有修复的版本)

问题是导致此问题的包已更新为与最新版本的Flutter 3.0.0兼容。

  1. 将您的Flutter版本更新到3.0.0或更高版本,或
  2. 将软件包版本降级为与当前Flutter版本仍然兼容的版本,并删除pubspeb.yaml中的插入符号(^)。

如果您选择第二个选项,因为现在可能不希望将您的项目更新到最新版本的Flutter,您最好的方法是查看软件包的版本历史记录,并降级到与新的Flutter SDK版本兼容之前的版本。

如果版本历史记录不清楚,你的另一个选择是去GitHub的软件包问题页面(参见pub.dev软件包页面的右侧,"查看/报告问题"),搜索是否有人已经报告了这个问题(你可以使用搜索栏寻找"schedulebinding";或者类似的东西),看看是否有人在问题的评论中指出了更改前的版本。

如果您仍然找不到最后一个兼容的版本,您可以对包的版本历史中可用的每个版本进行试错。不要忘记在您的pubspec包的版本中删除(^)符号。否则它仍将使用最新版本。

如果无法升级或降级flutter的版本,可以尝试此版本的百分比指示器(带双引号)。percent_indicator:"^ 2.1.9 + 1".然后,干净利落地去酒吧吧。

这对我来说很有效。

我得到了相同的错误,为我工作的解决方案如下

问题:

velocity_x: ^3.5.1不与flutter 2.10.工作,因为^3.5.1flutter 3

解决方案:

  • 步骤:1inpubspec.yamlchangevelocity_x: ^3.5.1byvelocity_x: ^3.4.0

  • 步骤:2inpubspec.lockchange velocity_xversion: "3.5.1"byversion: "3.4.0"

  • 步骤:3flutter clean

  • 步骤:4flutter run

我想这对你会有用的

相关内容

最新更新