Flutter重启程序跳转至image_provider.dart(rethrow)问题求助
问题解答
代码问题排查
先看你贴的这段Flutter代码:
Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ Expanded( child: TextButton( onPressed: () { setState(() { leftImageName = Random().nextInt(6) + 1; }); }, child: Image.asset( 'images/$leftImageName.png', )), ), Expanded( child: TextButton( onPressed: () { setState(() { rightImageName = Random().nextInt(6) + 1; }); }, child: Image.asset('images/$rightImageName.png')), ), ], ), ),
重启程序跳转到image_provider.dart并出现(rethrow),大概率是图片加载失败触发了异常,可能的原因有这几个:
leftImageName和rightImageName没有初始化值,程序启动时直接用未赋值的变量拼接路径,导致路径无效images文件夹里缺少1.png到6.png中的某几张图片,或者pubspec.yaml里没正确声明图片资源- 图片文件名大小写不匹配(Flutter在iOS和Android平台对文件名大小写敏感)
rethrow的含义
rethrow是Dart异常处理里的关键字,作用是把当前catch块捕获到的异常重新向上抛出,而且会保留异常的原始调用堆栈信息。和直接throw 异常不同,直接throw会生成新的堆栈轨迹,而rethrow能让上层代码拿到最开始抛出异常的位置,更方便定位问题。
你看到image_provider.dart里的rethrow,就是图片加载模块捕获到资源不存在的异常后,把它重新抛出来,让上层代码或Flutter框架处理,所以调试时会跳转到这个位置。
内容的提问来源于stack exchange,提问作者lucy
相关产品推荐
相关产品推荐

