Flutter 踩坑

4,317 阅读2分钟

最近在学习 Flutter, 遇到一些奇奇葩葩的问题,各种买家秀与卖家秀令人懵逼,明明别人的代码也是这样写~~~~~~~~

一、Android 原生引入 flutter 的问题

其实这个引入步骤比较简单

  • 创建一个 flutter module
flutter create -t module flutter_module
  • 配置 android 项目 settings.gradle 文件
setBinding(new Binding([gradle: this]))  
evaluate(new File( 
    new settingsDir.parentFile,
        'flutter module的目录/.android/include_flutter.groovy'))
))
  • build.gradle 配置文件中添加依赖
implementation project(':flutter')

整体配置就这么简单,但是运行的时候的时候,项目挂了,出现了以下错误

错误: 程序包android.support.annotation不存在
错误: 找不到符号
符号: 类 Fragment
错误: 找不到符号
符号:   类 NonNull
位置: 类 FlutterFragment
错误: 方法不会覆盖或实现超类型的方法
错误: 找不到符号
符号:   方法 getArguments()
位置: 类 FlutterFragment
错误: 方法不会覆盖或实现超类型的方法
错误: 方法不会覆盖或实现超类型的方法

查看编译后的源码,确实 flutter_module 中一些依赖包不存在

google 一番之后发现是 Android 包管理机制的问题,如果我们在安装 Android Studio 的时候勾选了 Androidx,会默认使用 androidx 管理, 如图

对于这个,解决方案有

  1. 下载Android Studio重新安装,这种比较麻烦
  2. 全局修改配置,借助 Android Studio 工具实现代码 迁移,详情可参考 迁移指南 但是这些步骤还是不能解决我的问题,我的flutter_module 包依旧有一些旧的引用代码形式,仔细分析,我的 flutter_module 是通过 flutter create -t module 这种方式实现的,可能是这种命令生成的代码是旧的包管理机制,猜想有没有生成 androidx 机制的呢,Google 之后,发现真的有
flutter create --androidx -t module flutter_module

完美解决,山重水复疑无路???不存在的,果真,解决方案总比问题多

二、Android 启动不明原因

Process 'command 路径/flutter/bin/flutter'' finished with non-zero exit value 1

这个问题就更懵逼了,但是可以通过

build clean 

解决,原因还不是很清楚

三、总结

其实对于 前端同学,学习 flutter 过程中,可能更多的挑战是对原生陌生,还是需要了解一些原生开发知识,不过,很多问题 google 以下,冷静分析下还是能解决