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

Flutter升级flutter_smartlook至4.1.7后运行报错求助

升级flutter_smartlook至4.1.7后与Flutter 3.13.0兼容问题排查

问题描述

我在应用中使用flutter_smartlook做监控,原本运行正常,但升级到最新版本4.1.7后出现编译错误,降级回4.1.5就恢复正常。因为必须使用最新的Flutter 3.13.0版本,所以不得不升级这个包,想知道问题出在哪?

错误信息

/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_smartlook-4.1.7/lib/wireframe/element_descriptors/canvas_descriptor.dart:7:7: Error: The non-abstract class 'CustomCanvas' is
missing implementations for these members:
 - Canvas.clipPath
 - Canvas.clipRRect
 - Canvas.clipRect
 - Canvas.drawAtlas
 - Canvas.drawColor
 - Canvas.drawDRRect
 - Canvas.drawImage
 - Canvas.drawImageNine
 - Canvas.drawImageRect
 - Canvas.drawOval
 - Canvas.drawPaint
 - Canvas.drawParagraph
 - Canvas.drawPicture
 - Canvas.drawPoints
 - Canvas.drawRRect
 - Canvas.drawRawAtlas
 - Canvas.drawRawPoints
 - Canvas.drawShadow
 - Canvas.drawVertices
 - Canvas.getDestinationClipBounds
 - Canvas.getLocalClipBounds
 - Canvas.getSaveCount
 - Canvas.getTransform
 - Canvas.restore
 - Canvas.restoreToCount
 - Canvas.rotate
 - Canvas.save
 - Canvas.saveLayer
 - Canvas.scale
 - Canvas.skew
 - Canvas.transform
 - Canvas.translate
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class CustomCanvas extends Canvas {
      ^^^^^^^^^^^^
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.clipPath' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.clipRRect' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.clipRect' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawAtlas' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawColor' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawDRRect' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawImage' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawImageNine' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawImageRect' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawOval' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawPaint' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawParagraph' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawPicture' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawPoints' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawRRect' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawRawAtlas' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawRawPoints' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawShadow' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.drawVertices' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.getDestinationClipBounds' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.getLocalClipBounds' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.getSaveCount' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.getTransform' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.restore' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.restoreToCount' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.rotate' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.save' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.saveLayer' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.scale' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.skew' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.transform' is defined here.
org-dartlang-sdk:///lib/ui/canvas.dart: Context: 'Canvas.translate' is defined here.
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_google_places_sdk-0.3.2+9/lib/flutter_google_places_sdk.dart:123:55: Error: Member not found: 'ALL'.
    PlaceTypeFilter placeTypeFilter = PlaceTypeFilter.ALL,
                                                      ^^^
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_google_places_sdk-0.3.2+9/lib/flutter_google_places_sdk.dart:132:11: Error: No named parameter with the name
'placeTypeFilter'.
          placeTypeFilter: placeTypeFilter,
          ^^^^^^^^^^^^^^^
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_smartlook-4.1.7/lib/wireframe/element_descriptors/canvas_descriptor.dart:13:7: Error: Superclass has no constructor named
'Canvas'.
  ) : super(recorder);
      ^^^^^
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_smartlook-4.1.7/lib/wireframe/element_descriptors/canvas_descriptor.dart:17:11: Error: Superclass has no method named
'drawRect'.
    super.drawRect(rect, paint);
          ^^^^^^^^
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_smartlook-4.1.7/lib/wireframe/element_descriptors/canvas_descriptor.dart:27:11: Error: Superclass has no method named
'drawCircle'.
    super.drawCircle(c, radius, paint);
          ^^^^^^^^^^
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_smartlook-4.1.7/lib/wireframe/element_descriptors/canvas_descriptor.dart:39:11: Error: Superclass has no method named
'drawArc'.
    super.drawArc(rect, startAngle, sweepAngle, useCenter, paint);
          ^^^^^^^
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_smartlook-4.1.7/lib/wireframe/element_descriptors/canvas_descriptor.dart:45:11: Error: Superclass has no method named
'drawPath'.
    super.drawPath(path, paint);
          ^^^^^^^^
/Users/casperonflutter/.pub-cache/hosted/pub.dev/flutter_smartlook-4.1.7/lib/wireframe/element_descriptors/canvas_descriptor.dart:65:11: Error: Superclass has no method named
'drawLine'.
    super.drawLine(p1, p2, paint);
          ^^^^^^^^
Unhandled exception:
Null check operator used on a null value
#0      ProgramCompiler._emitSuperConstructorCallIfNeeded (package:dev_compiler/src/kernel/compiler.dart:1962:47)
#1      ProgramCompiler._emitConstructorBody (package:dev_compiler/src/kernel/compiler.dart:1901:19)
#2      ProgramCompiler._emitConstructor.<anonymous closure>.<anonymous closure> (package:dev_compiler/src/kernel/compiler.dart:1848:19)
#3      ProgramCompiler._superDisallowed (package:dev_compiler/src/kernel/compiler.dart:4107:24)
#4      ProgramCompiler._emitConstructor.<anonymous closure> (package:dev_compiler/src/kernel/compiler.dart:1847:15)
#5      ProgramCompiler._withLetScope (package:dev_compiler/src/kernel/compiler.dart:2693:25)
#6      ProgramCompiler._withCurrentFunction (package:dev_compiler/src/kernel/compiler.dart:4097:18)
#7      ProgramCompiler._emitConstructor (package:dev_compiler/src/kernel/compiler.dart:1845:16)
#8      ProgramCompiler._defineConstructors (package:dev_compiler/src/kernel/compiler.dart:1459:28)
#9      ProgramCompiler._emitClassDeclaration (package:dev_compiler/src/kernel/compiler.dart:879:19)
#10     ProgramCompiler._emitClass (package:dev_compiler/src/kernel/compiler.dart:802:25)
#11     List.forEach (dart:core-patch/growable_array.dart:416:8)
#12     ProgramCompiler._emitLibrary (package:dev_compiler/src/kernel/compiler.dart:740:23)

问题原因分析

  1. flutter_smartlook 4.1.7适配缺失:Flutter 3.13.0将Canvas改为抽象类,要求子类必须实现所有抽象方法。但flutter_smartlook 4.1.7中的CustomCanvas类直接继承Canvas后,仅实现了drawRect、drawCircle等少量方法,未覆盖全部抽象方法,触发编译错误。同时代码中调用的Canvas构造器、父类方法在新版本Flutter中已不存在或变更,进一步引发报错。
  2. flutter_google_places_sdk版本过时:你使用的0.3.2+9版本依赖的Flutter API已被废弃,PlaceTypeFilter.ALL被移除,相关方法参数也做了调整,导致参数不存在的错误。

解决方案

  • 优先升级依赖包:
    • 检查flutter_smartlook的最新版本,若有适配Flutter 3.13.0的版本,直接升级。
    • 将flutter_google_places_sdk升级到最新版本,新版本会适配Flutter的API变更,解决PlaceTypeFilter和参数问题。
  • 官方未修复时的临时方案:
    • 若flutter_smartlook暂无适配版本,可尝试使用其预览版或测试版(如有发布)。
    • 自行fork flutter_smartlook仓库,修改canvas_descriptor.dart中的CustomCanvas类:改为抽象类、添加noSuchMethod实现,或改为委托模式(持有Canvas实例而非直接继承),绕过抽象类的强制实现要求。
  • 反馈问题:向flutter_smartlook官方提交issue,说明兼容Flutter 3.13.0的问题,推动官方修复。

内容的提问来源于stack exchange,提问作者Senthur Kumaran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:05:53