You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter从3.0.5降级至2.5.0后报错,寻求解决方案

Flutter降级到2.5.0后兼容问题解决办法

问题描述

我用git checkout 2.5.0将Flutter版本从3.0.5降级到2.5.0后,项目出现了无法解决的错误,希望让项目在2.5.0版本正常运行。

报错信息

../../../Downloads/flutter_windows_2.10.2-stable/flutter/.pub-cache/hosted/pub.dartlang.org/percent_indicator-4.2.1/lib/linear_percent_indicator.dart:162:5: Warning: The class 'WidgetsBinding' cannot be null.
Try replacing '?.' with '.'
    WidgetsBinding?.instance?.addPostFrameCallback((_) {
    ^^^^^^^^^^^^^^
../../../Downloads/flutter_windows_2.10.2-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_messaging_platform_interface-3.2.0/lib/src/method_channel/utils/exception.dart:13:11: Error: Method not found: 'Error.throwWithStackTrace'.
    Error.throwWithStackTrace(exception, stackTrace);
          ^^^^^^^^^^^^^^^^^^^
../../../Downloads/flutter_windows_2.10.2-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_messaging_platform_interface-3.2.0/lib/src/method_channel/utils/exception.dart:16:9: Error: Method not found: 'Error.throwWithStackTrace'.
  Error.throwWithStackTrace(
        ^^^^^^^^^^^^^^^^^^^
../../../Downloads/flutter_windows_2.10.2-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_messaging_platform_interface-3.2.0/lib/src/method_channel/utils/exception.dart:11:7: Error: A non-null value must be returned since the return type 'Never' doesn't allow null.
Never convertPlatformException(Object exception, StackTrace stackTrace) {
      ^
../../../Downloads/flutter_windows_2.10.2-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_platform_interface-6.2.0/lib/src/method_channel/utils/exception.dart:14:11: Error: Method not found: 'Error.throwWithStackTrace'.
    Error.throwWithStackTrace(exception, stackTrace);
          ^^^^^^^^^^^^^^^^^^^
../../../Downloads/flutter_windows_2.10.2-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_platform_interface-6.2.0/lib/src/method_channel/utils/exception.dart:17:9: Error: Method not found: 'Error.throwWithStackTrace'.
  Error.throwWithStackTrace(
        ^^^^^^^^^^^^^^^^^^^
../../../Downloads/flutter_windows_2.10.2-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_platform_interface-6.2.0/lib/src/method_channel/utils/exception.dart:12:7: Error: A non-null value must be returned since the return type 'Never' doesn't allow null.
Never convertPlatformException(Object exception, StackTrace stackTrace) {
      ^

pubspec.yaml内容

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: 
  cupertino_icons: null
  firebase_auth: 
  firebase_core: 
  firebase_messaging: 
  flutter_google_places: null
  flutter_spinkit: ^5.1.0
  geocoder: 
  geoflutterfire: 
  geolocator: 
  google_maps_flutter: null
  google_maps_webservice: null
  http: null
  location: ^4.4.0
  modal_bottom_sheet: ^2.0.1
  percent_indicator: ^4.2.1
  provider: null
  rxdart: any
  shared_preferences: ^2.0.15
  uuid: null
  url_launcher: ^6.0.5
  get_it: ^7.2.0
  plugin_platform_interface: 
  geolocator_platform_interface: 
  geocoding: ^2.0.4
  google_api_availability:
  google_api_headers: ^1.1.1
  mockito: ^5.2.0

解决办法

1. 修正Dart SDK版本约束

Flutter 2.5.0对应的Dart版本是2.14.0,你的pubspec里sdk: ">=2.1.0 <3.0.0"范围太宽泛,改成:

environment:
  sdk: ">=2.14.0 <3.0.0"

确保SDK版本和当前Flutter版本严格匹配,避免语法兼容问题。

2. 降级不兼容的依赖包

报错核心是依赖版本过高,不兼容Flutter 2.5.0,修改pubspec的dependencies为以下兼容版本:

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: ^3.1.0
  cupertino_icons: ^1.0.4
  firebase_auth: ^3.3.0
  firebase_core: ^1.10.0
  firebase_messaging: ^11.2.0
  flutter_google_places: ^0.3.0
  flutter_spinkit: ^5.1.0
  geocoder: ^0.2.1
  geoflutterfire: ^3.0.1
  geolocator: ^8.2.0
  google_maps_flutter: ^2.1.1
  google_maps_webservice: ^0.0.20
  http: ^0.13.4
  location: ^4.4.0
  modal_bottom_sheet: ^2.0.1
  percent_indicator: ^3.4.0
  provider: ^6.0.2
  rxdart: ^0.27.3
  shared_preferences: ^2.0.15
  uuid: ^3.0.6
  url_launcher: ^6.0.5
  get_it: ^7.2.0
  plugin_platform_interface: ^2.1.2
  geolocator_platform_interface: ^4.0.0
  geocoding: ^2.0.4
  google_api_availability: ^2.0.1
  google_api_headers: ^1.1.1
  mockito: ^4.1.3
  • percent_indicator降级到3.4.0,适配旧版Flutter的WidgetsBinding写法
  • Firebase系列依赖全部降级到兼容Flutter 2.5.0的稳定版本
  • mockito降级到4.1.3,兼容Dart 2.14的语法规范

3. 清理缓存并重新获取依赖

执行以下命令彻底清理缓存并重新拉取适配的依赖:

flutter clean
flutter pub get

如果问题依旧,可以手动删除本地.pub-cache目录中对应的高版本依赖包,再重新执行flutter pub get。

4. 手动修复依赖源码(可选)

如果不想降级percent_indicator,可以找到本地依赖中的linear_percent_indicator.dart文件(路径即报错提示的路径),将第162行的:

WidgetsBinding?.instance?.addPostFrameCallback((_) {

改成:

WidgetsBinding.instance.addPostFrameCallback((_) {

因为Flutter 2.5.0中WidgetsBinding.instance是非空的,不需要空安全的?.操作符。

内容的提问来源于stack exchange,提问作者Praveesh Ramroop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:40:47