这是 todoline++ 项目开发过程中遇到的问题系列, 记录下来供大家参考。
本篇记录一些开发中遇到的疑问:
todoline++ 官网请看这里: https://todoline-plus-plus.github.io/
1 flutter Text 组件, 设置 overflow 不起作用
之前 Text 组件的文字太长, 希望截断并使用… 来表示, 之前的方法如下:
1 | A) Text 外面套一个 Expanded 组件 |
但是今天设置发现, 不起作用, 把之前设置成功的代码拷贝过来, 依然不起作用。
只好写代码手工截断。
2 flutter 项目更改图标后, 看起来非常的小
查看网上的资料, 通过 android 项目的办法来解决, 也就是把 flutter 项目目录下的 android 目录当作 android 项目来对待, 然后使用 android studio 来打开该项目, 然后在修改图标文件。
在 flutter 中把 android 目录当作 android 工程来打开的办法如下:
1 | android studio ==> projectName ==> android ==> right click ==> flutter ==> open android module in android studio |
来源:
stackoverflow.com/questions/58051362/flutter-android-launcher-icon-looks-very-small
3 flutter 如何打包?
使用 cmd 命令:
- 一键打包: flutter build apk
- 分架构打包: flutter build apk –target-platform android-arm,android-arm64,android-x64 –split-per-abi
来源: blog.csdn.net/campchan/article/details/118912540
4 flutter Column 组件, 如果项目太多, 超出屏幕高度所能够显示的高度, 就会报错, 怎么办?
之前看到 Column, 认为它和 ListView 是一样的, 今天终于看到了他们的区别。
5 flutter 项目, 如何修改程序图标?
全部是按照原生项目的办法来解决, flutter 项目下有 android, ios, windows 等这些目录, 这些目录对应着各自的原生项目, 我们完全可以把它当作一个原生项目来对待就可以, 下面是各自对应的文件目录:
android: project-name\android\app\src\main\res
IOS: 没开发过IOS, 不知道。
window: projectName\windows\runner\app_icon.ico
6 flutter 中有一个专门处理日期的类:DateUtils
这是查看源代码的时候发现的, 平时处理日期的时候就不用自己再动手写了!
7 flutter floor 框架的 @Query 注解中, select count 语句总是返回 null 值, 得不到统计数值
查看代码发现, floor 生成的代码中, 使用的是 _queryAdapter.queryNoReturn() 方法, 执行该方法后不会返回查询到的数据, 因此为 null。
那怎么办呢?
通过测试发现, dao 类中如果返回的数据类型是 @entity 标记的类, 他就会返回数据, 否则生成的代码中就会调用 _queryAdapter.queryNoReturn(), 这个不会返回任何数据.
解决办法:
我提交了一个问题给开发者, 目前暂时的解决办法是:
- 新建一个实体类, 然后在查询
- 查询出所有的数据, 然后再用代码统计
8 easyIsolate 使用心得
初始化时 worker 需要发送消息才会在 IsolateHandler 中运行
pub.dev/packages/easy_isolate
9 Flutter 插件实现 JavaScript 和 Dart 交互数据
该功能还没有实现过, 下面的地址仅供参考:
zhuanlan.zhihu.com/p/372006972
10 据说 RxDart 是一个非常牛逼的框架, 用来处理异步非常方便, 具体请参考:
blog.csdn.net/hjjdehao/article/details/104280422
11 路由设置中 initialRoute 和 home 的区别是?
12 flutter 中的 build 方法和 initState 不能添加 async 关键字
想在系统中初始化数据库对象, 有两个独立的线程需要使用数据库对象:
- 程序主线程,
- 后台运行通知的副线程
本来想在某个开始位置初始化数据库对象, 然后在启动第二个线程, 发现 main 入口中无法初始化, 这个时候 floor 基础类还没有初始化, 所以只能在 build 或者 initState 方法中初始化数据库对象, 但是我们需要等到数据库对象初始化完成后才能进行下一步, 所以需要 async, 但是发现这两个方法不能使用 async, 如果只有一个线程那好办, 抽出来在一个方法里面数据初始化就可以了, 但是有两个线程, 这个时候就难办了, 真不知道该如何是好!
最后解决方案: 初始化数据库对象独立抽出来变成一个方法, 该方法需要:
A) 可以多线程异步调用
B) 只能运行一次, 第二次必须退出, 这样可以确保数据库对象只初始化一次
C) 使用锁确保只有一个线程进入
13 Widget 如何继承?
被继承页面的代码如下:
1 | class BaseView<T> extends StatefulWidget { |
继承页面的代码如下:
1 | class Inbox extends BaseView { |
参考来源:
stackoverflow.com/questions/67145831/error-type-argument-t-doesnt-conform-to-the-bound-object-of-the-type-varia
14 flutter 如何判断操作系统平台?
1 | import 'dart:io' |
15 如何查看 Dart 和 Flutter安装路径
1 | where flutter dart |
参考来源: blog.csdn.net/ezconn/article/details/114480894
16 flutter pub get 后下载的插件放在哪里?
1 | C:\Users\xxx\AppData\Local\Pub\Cache\hosted\pub.flutter-io.cn\xxx |
怎么找到?
flutter 项目的根目录下面有一个文件: .flutter-plugins, 里面指明了每个安装插件的所在路径。
17 flutter 应用如何进行混淆?
还没有操作, 请参考:
jianshu.com/p/4dd5e5977f36
18 flutter 应用开机启动不让弹出页面怎么处理?
1 |
|
注意:
关键的代码是 onWillPop 里面的判断
平时我们在 main 函数的 build 方法里面, 直接返回 MaterialApp, 但为了使用 onWillPop, 我们不得不使用 WillPopScope
如果您觉得这篇文章对您的学习很有帮助, 请您也分享它, 让它能再次帮助到更多的需要学习的人. 您的支持将鼓励我继续创作 !