Flutter 报错总结

  • github 上 clone 下来的项目报错/找不到文件?
    1、仓库 clone 下来后我们执行flutter run Terminal 中提示我们 Target file "lib/main.dart" not found.这时我们要判断打开示例项目的路径对不对,对带有示例的仓库,我们如果要打开演示示例,需要用 vscode打开示例所在的文件夹,一般是 example 文件夹
    2、在我们使用正确的路径打开项目后,有很多报错导入的文件找不到,这个时候我们需要在 Terminal 中 执行以下flutter pub get 命令,执行完导入的一些库就能够找到了

  • Terminal 中提示 [!] Your app isn't using AndroidX.
    这种情况需要我们在 android/gradle.properties文件中设置

android.enableJetifier=true
android.useAndroidX=true

gradle 版本不对

  • Terminal 中报错 Minimum supported Gradle version is 5.4.1. Current version is 4.10.2. If using the gradle wrapper, try editing the distributionUrl in /Users/zhangjiwen/Desktop/flutter_k_chart/example/android/gradle/wrapper/gradle-wrapper.properties to gradle-5.4.1-all.zip
    解决办法是:我们在android/gradle/wrapper/gradle-wrapper.properties中将distributionUrl中的 gradle zip 包改成我们需要的版本。
    例如:没改之前是distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip 修改后: distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
  • Terminal 中报Exception in thread "main" java.util.zip.ZipException: zip END header not found
    这个错也是 gradle版本不对造成的,将 android -> gradle -> wrapper -> gradlewrapper.properties文件中的 distributionUrl=https://services.gradle.org/distributions/gradle-4.10.2-all.zip中的 gradle-4.10.2-all.zip 改为与 Flutter 对应的版本既可

NoSuchMethodError 总结

  • NoSuchMethodError: The method '***' was called on null
    在新增 Provider 状态管理之后,我们需要执行flutter run ,如果使用热重载的话Termianl中就会报上面的错误
  • NoSuchMethodError: The method '/' was called on null
    尽管在某些页面设置过了 ScreenUtil.instance 但是切换都某些页面的时候还是报了这个错,这就需要我们在报错的页面也设置一下ScreenUtil.instance

Flutter 模拟器 加载网络资源加载不出来的问题

  • 需要我们在 DNS 上新加一个 8.8.8.8

Container 不能同时设置color和 decoration,同时设置会报错Cannot provide both a color and a decoration ,the color argument is just a shorthand for 'decoration: new BoxDecotation(color: color)'

模拟器加载不出来网络图片

  • 模拟器加载不出来网络图片的表现就是网络图片不显示,页面点击没反应,这个时候我们需要新增一个DNS: 8.8.8.8 就好了

网络请求的错误

  • 在使用dio进行网络请求的时候出现 FormatException: Unexpected character (at character 1) 报错,因为dio请求返回的数据默认是以json的格式读取的,而返回的数据是密文形式,需要根据接口设置设置dio.options.responseType,这里设置为dio.options.responseType = ResponseType.plain;就好了

数据解析错误

  • Exception has occurred. _TypeError (type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>') 这里提示我们接口返回给我们一个list,但我们以Map去处理了

使用 Provider 报 Tried to listen to a value exposed with provider, from outside of the widget tree

在使用Provider提供的 Provider.of<*****>(context,listen: false).xxxxxxx(); 获取共享对象时,listen 参数一定要使用false,否则就会报上面的错误,如果这里不适用。该方法的listen参数默认是true; static T of<T>(BuildContext context, {bool listen = true})

这里需要注意的是:在我们使用Provider.of修改值的时候listen参数需要设置为false;当我们使用Provider.of获取值的时候listen参数需要设置为truelisten参数到底是使用true还是使用false取决与,当取的值变化的时候控件要不要更新。

VSCode 运行flutter项目报Building for iOS Simulator, but the linked and embedded framework 'App.framework' 的错

  • 使用xcode 打开flutter 下的iOS项目找到App.framework 删除,清理缓存,重新用xcode编译就行了

调用Cupertino样式警告框报错

  • 使用CupertinoAlertDialog在安卓上报The following NoSuchMethodError was thrown building LayoutBuilder: The getter alterDialogLabel was called on null 的错
  • 解决: 在MaterialApp 的 localizationsDelegates 属性中添加 FallbackCupertinoLocalisationsDelegate() 项,FallbackCupertinoLocalisationsDelegate代码如下:
MaterialApp(
          ......
          localizationsDelegates: [
            FallbackCupertinoLocalisationsDelegate(),
          ],
          ......
)
import 'package:flutter/cupertino.dart';

class FallbackCupertinoLocalisationsDelegate extends LocalizationsDelegate<CupertinoLocalizations> {
  const FallbackCupertinoLocalisationsDelegate();
 
  @override
  bool isSupported(Locale locale) => true;
 
  @override
  Future<CupertinoLocalizations> load(Locale locale) =>
      DefaultCupertinoLocalizations.load(locale);
 
  @override
  bool shouldReload(FallbackCupertinoLocalisationsDelegate old) => false;
}

运行安卓模拟器报A problem occurred configuring project ':path_provider'. > Could not resolve all artifacts for configuration ':path_provider:classpath'.

  • 完整报错信息如下:
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':path_provider'.
> Could not resolve all artifacts for configuration ':path_provider:classpath'.
> Could not resolve com.android.tools.build:gradle:3.3.0\.
Required by:
project :path_provider
> Could not resolve com.android.tools.build:gradle:3.3.0\.
> Could not get resource '[https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom](https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom)'.
> Could not GET '[https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom](https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom)'.
> Connect to 127.0.0.1:8888 [/127.0.0.1] failed: Connection refused (Connection refused)
> Could not resolve com.android.tools.build:gradle:3.3.0\.
> Could not get resource '[https://jcenter.bintray.com/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom](https://jcenter.bintray.com/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom)'.
> Could not GET '[https://jcenter.bintray.com/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom](https://jcenter.bintray.com/com/android/tools/build/gradle/3.3.0/gradle-3.3.0.pom)'.
> Connect to 127.0.0.1:8888 [/127.0.0.1] failed: Connection refused (Connection refused)
> Could not get unknown property 'android' for project ':path_provider' of type org.gradle.api.Project.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at [https://help.gradle.org](https://help.gradle.org)
  • 解决过程:
    1、首先,我以为是安卓模拟器的问题,我就用安卓模拟器运行之前其他的项目没结果完美运行,没有任何问题。
    2、既然不是安卓模拟器的问题,那么应该就是我们代码里配置的原因,然后我就分析报错原因,既然报错是跟path_provider相关,那么我就去搜path_provider相关的东西,发现我们的pubspec.ymal文件中并没有导入path_provider的库,但是pubspec.lock文件中确有这个库。然后我在网上搜跟path_provider相关的报错原因,千奇百怪,各种答案尝试后还是解决不了问题。然后报错信息还有跟gradle相关的,然后我又搜报错的gradle的信息,各种答案也是解决不了,然后我在想是不是墙的原因,然后我代理打开,依旧不行,然后我又想到去用阿里云的镜像,然后还是不行,我有点泄气了。目光重新回到path_provider
    3、目光重新回到path_provider上,这时我想到是不是pub没有找到合适的版本,因为我们引入的三方库的版本号都是写死的,那么我就把所有引入的库改成版本可变的,然后重新运行还是报错。
    5、然后我查了一下这个库是干什么用的,大概是用来做本地存储的,我就分析了我们引入的库里面有没有需要使用到本地存储的。然后发现我们引入了一个叫cached_network_image的库用来做图片缓存,既然缓存肯定涉及到本地数据的操作。
    6、我将pubspec.ymal文件中导入cached_network_image的代码给注释掉,代码中用到cached_network_image的代码都注释,然后删除app,重新运行,结果没错了,安卓模拟器运行起来了。这时我确定应该是cached_network_image中引用了path_provider库导致的。
    7、删除cached_network_image库后,我发现之前编译产生的.flutter-plugins 和 .flutter-plugins-dependencies文件也没有了。
    8、这个时候我又想,为什么安卓同事的为什么可以运行呢?我猜是他们使用的flutter 版本和dart版本有可能跟我的不一样导致的,然后我去查看了他们的flutter 版本和dart sdk版本,结果我们使用的版本是一样的。这就很好奇了,同样的代码他们没问题,我这边确有问题。那到底问题出在哪里?
    9、第二天我想总结一下昨天遇到的问题,然后就把昨天注释掉的cached_network_image库重新导入,然后删除app重新运行,我满心期待报错信息的出现,结果,我靠安卓模拟器启动了,我靠,又正常了,真TM太神奇了,我也懵了,不知道问题到底出在哪里了。

控制台输出setState() or markNeedsBuild() called during build.提示

The following assertion was thrown while dispatching notifications for TradeProvider:
flutter: setState() or markNeedsBuild() called during build.
flutter: This _DefaultInheritedProviderScope<TradeProvider> widget cannot be marked as needing to build
flutter: because the framework is already in the process of building widgets.  A widget can be marked as
flutter: needing to be built during the build phase only if one of its ancestors is currently building. This
flutter: exception is allowed because the framework builds parent widgets before children, which means a
flutter: dirty descendant will always be built. Otherwise, the framework might not visit this widget during
flutter: this build phase.
flutter: The widget on which setState() or markNeedsBuild() was called was:
flutter:   _DefaultInheritedProviderScope<TradeProvider>
flutter: The widget which was currently being built when the offending call was made was:
flutter:   Builder
  • 这里是我们在initstatus方法中直接或间接的调用了setStatus导致的,出现这种问题是要修改掉了,因为init的时候还没执行build方法,第一次执行build应有系统去调用的。
  • 安卓模拟器打不开图片请使用:8.8.8.8
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容