flutter-开发问题系列之十四   2022-01-08


这是 todoline++ 项目开发过程中遇到的问题系列, 记录下来供大家参考。
本篇是最后一篇, 包括疑问类和报错类两部分:

todoline++ 官网请看这里: https://todoline-plus-plus.github.io/

疑问类

1 flutter 如何获取系统临时路径?

使用path_provider获得应用路径和临时文件路径

1
2
3
4
5
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;

Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
2 上架到 Google Play 隐私生成政策:

blog.csdn.net/xxx823952375/article/details/89395534
app-privacy-policy-generator.firebaseapp.com/

3 flutter 如何读取本地文件?
1
String a = await rootBundle.loadString('data/agreeText.txt');

来源: jianshu.com/p/f4cc6a258162

4 flutter 打包详细说明:

请参考:
bookstack.cn/read/flutter-1.2-zh/65cbdef5d8028edd.md

注意:
flutter 从 1.2 版本开始, 默认启用混淆, 因此不用再进行混淆设置, 如果遇到安装闪崩要关闭, 请参考这里: blog.csdn.net/weixin_38025168/article/details/104019388

5 AboutDialog flutter 给我们提供的 About 页面。

它的好处是我们使用的插件, 它都会列出所有的 license, 这样我们添加什么插件就不用添加协议声明了.

报错类

1 java.io.IOException: setDataSource failed.
使用插件 audioplayers 来播放音乐, 设置的文件名不存在
2 Provided initialDate 2021-12-29 17:33:42.698 must satisfy provided selectableDayPredicate.
将系统日期往前调整后就报此错误!
3 Could not resolve all artifacts for configuration ‘:url_launcher_android:debugUnitTestRuntimeClasspath’.
打包时没有联网, 联网就可以解决问题了
4 xxx\android\app\src\main\res\mipmap-anydpi-v26\ic_launcher.xml:4: AAPT: error: resource mipmap/ic_launcher_foreground (aka com.github.todoline.plus.plus.tracker:mipmap/ic_launcher_foreground) not found.

我发现, 通过 potoshop 调整图片的中心, 就可以避免, 比如我的 TodoLine++ 的 logo, 把重心往右下角调整一点点就不会报错了, 但如果把重心往右上角调整一点点, 两个头发接触到边框时就会报错。 原因未知!

这个问题反复出现, 但是每次再多试几次就可以了!

5 No implementation found for method getAll on channel plugins.flutter.io/package_info
我在使用 package_info 这个插件遇到了这个问题, 于是换成 package_info_plus, 这两个插件差不多
6 todoLine++ 的 apk 安装在小米 4 显示的图标是 android 的图标, 不是自己设计出来的图标

在其他手机上就能够正确显示出来, 但是就在小米 4 手机上就是显示不出来, 找到下面的帖子, 但是按照他的方法来也是不行
stackoverflow.com/questions/51569550/change-flutter-icon-that-shows-when-overview-button-pressed-in-android

他说重启手机后就可以。
但是对我来讲, 重启后不行

于是又找到 flutter 官网的帖子也是不行
github.com/flutter/flutter/issues/25136
他的办法是:

  1. 重启手机
    2) flutter clean 后 build release

按照这个办法也是不行, 我自己对比了下 mainifest.xml 文件, 发现能够在小米 4 上正常显示的跟不能正常显示的有一个区别:
不能正常显示的有两个 activity, 但是我做了一个测试, 并不是有两个 activity 就无法正常显示。

问题在哪里哪呢?
这时候我想到一个问题:
在安装应用的时候, andorid 操作系统是如何读取 APK 文件中的 LOGO 的?

于是我又在 google , 发现了介绍 android logo 适配的博文, 准确的讲, 本来设置 logo 是一个非常简单的问题, 设置一个图片就可以了, 但因为国内手机厂家对 android 系统的底层进行修改, 搞了特殊性, 然后就开始出现混乱, 特殊性在哪里呢? android 开源的精神在于自由, logo 的形状是圆形和还是圆角型, 由开发者来决定, 但是小米就是强制要求所有logo图标是圆角型, 于是 google 开始整顿 android logo, 这样就出现了 android 8.0 以后开始使用新的规则, 这个新规则把图标分为前景色和背景色, 前景色用来定义图标, 而背景色用来衬托图标, 这样小米你不是要求圆角型吗? 只要你把背景色的形状更改就可以了, 于是问题就来了, 小米4他能识别新规则吗? 肯定不行啊, 老规则的名称默认只有一个, 比如 ic_luncher, 新规则下有两个: ic_luncher_background 和 ic_luncher_foreground, 然后小米 4 你只能识别老规则, 于是找不到图标了, 找不到怎么办呢? 我猜测只能默认使用 android 图标。

如何解决这个问题: 你只能使用老规则, 在 flutter 中, 你老老实实的设计图标, 然后替换掉原来的 flutter 图标就可以了, 如果遇到图标变小, 只能通过 ps 来处理, 不要通过 android studio 中的图标设置导向来处理, 否则就会出现两个名称, 然后你就遇到了这个问题。

参考: cnblogs.com/whycxb/p/9738681.html


分享到:


  如果您觉得这篇文章对您的学习很有帮助, 请您也分享它, 让它能再次帮助到更多的需要学习的人. 您的支持将鼓励我继续创作 !
本文基于署名4.0国际许可协议发布,转载请保留本文署名和文章链接。 如您有任何授权方面的协商,请邮件联系我。

Contents

  1. 疑问类
    1. 1 flutter 如何获取系统临时路径?
    2. 2 上架到 Google Play 隐私生成政策:
    3. 3 flutter 如何读取本地文件?
    4. 4 flutter 打包详细说明:
    5. 5 AboutDialog flutter 给我们提供的 About 页面。
  • 报错类
    1. 1 java.io.IOException: setDataSource failed.
    2. 2 Provided initialDate 2021-12-29 17:33:42.698 must satisfy provided selectableDayPredicate.
    3. 3 Could not resolve all artifacts for configuration ‘:url_launcher_android:debugUnitTestRuntimeClasspath’.
    4. 4 xxx\android\app\src\main\res\mipmap-anydpi-v26\ic_launcher.xml:4: AAPT: error: resource mipmap/ic_launcher_foreground (aka com.github.todoline.plus.plus.tracker:mipmap/ic_launcher_foreground) not found.
    5. 5 No implementation found for method getAll on channel plugins.flutter.io/package_info
  • 6 todoLine++ 的 apk 安装在小米 4 显示的图标是 android 的图标, 不是自己设计出来的图标