Flutter按钮跳转页面时终端报错但功能正常问题求助
问题回顾
你碰到的情况挺有意思:点击首页的浮动操作按钮跳转到带TextField的页面时,终端刷出一堆Dalvik的错误日志,但应用功能完全正常,输入啥的都没问题。报错内容是这样的:
E/dalvikvm( 1787): Could not find class 'android.view.inputmethod.CursorAnchorInfo$Builder', referenced from method io.flutter.plugin.editing.InputConnectionAdaptor.finishComposingText
W/dalvikvm( 1787): VFY: unable to resolve new-instance 411 (Landroid/view/inputmethod/CursorAnchorInfo$Builder;) in Lio/flutter/plugin/editing/InputConnectionAdaptor;
D/dalvikvm( 1787): VFY: replacing opcode 0x22 at 0x000e
D/dalvikvm( 1787): DexOpt: unable to opt direct call 0x0846 at 0x10 in Lio/flutter/plugin/editing/InputConnectionAdaptor;.finishComposingText
跳转的按钮代码是:
onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => SharedPreference1())); },
为啥会出现这个错误?
说白了就是你的模拟器Android版本太老了!CursorAnchorInfo.Builder这个类是Android 5.0(API 21)才加进去的,而你用的模拟器系统版本低于API 21。Flutter的输入插件会尝试调用这个类来处理文本输入相关的逻辑,但低版本系统里找不到它,所以就抛出了这个找不到类的错误。不过好在Flutter做了兼容处理,所以功能不受影响,只是日志看起来闹心而已。
怎么解决?
给你几个可行的方案:
- 升级模拟器系统:新建一个API 21及以上的Android模拟器,再跑应用,这个错误就直接消失了,这是最靠谱的解决办法。
- 直接忽略:既然完全不影响功能,这个错误就是个“纸老虎”,只是日志输出而已,你完全可以不管它,继续开发就行。
- 降级Flutter SDK(不推荐):如果非要用低版本模拟器,可以试试降级到Flutter 2.x的旧版本,那些版本的输入插件可能还没用到
CursorAnchorInfo.Builder,但这样会错过Flutter的新特性和bug修复,不太建议。
顺便提下代码里的小细节(和错误无关,但能优化代码)
- 你把
_notesController1、_notesController2还有data都设成全局变量了,建议放到对应的State类里,避免全局状态带来的潜在问题,代码也更规范。 - 你的State类叫
Hero,但Flutter本身就有个Hero组件,重名容易混淆,建议改成SharedPreference1State这类更清晰的名字。
内容的提问来源于stack exchange,提问作者NevMthw

