这是 todoline++ 项目开发过程中遇到的问题系列, 记录下来供大家参考。
本篇记录一些开发中遇到的疑问:
todoline++ 官网请看这里: https://todoline-plus-plus.github.io/
1 flutter 单选框如何使用?
1 | Radio(value: false, groupValue: 1, fillColor: fillColor, onChanged: (val){}) |
2 flutter 如何后台运行
BackgroundFetch:
这是个插件, 该插件帮助我们管理后台任务, 但是很遗憾, 我下载该插件的时候报错, 代码仓库中没有对应的插件
pub.dev/packages/background_fetchIsolate:
相当于一个线程, 他允许你在后台运行, 特别是计算周期比较长的任务, 适合使用 Isolate, 这是 Dart 语言提供的。
psvmc.cn/article/2020-08-08-flutter-isolate.html
3 flutter 开发, 如何让 android app 自启动
我从网上找到的方法, 其实是 android 开发使用 java 的方法来实现该功能, dart 语言的方法我还没有实现过。
大概的步骤如下:
- 添加权限
- AndroidManifest.xml 配置 receiver, 以便于监听系统广播, 捕获启动广播
- 写一个 java class 类, 用来拦截系统的广播, 如果是启动系统的广播, 就启动App。
来源: blog.csdn.net/suyie007/article/details/90599866
注意: 如果没有效果, 不妨先 flutter clean 一下
4 弹出遮罩效果的窗口中, 操作后元素没有跟着改变
原因: 这个窗口使用到 showModalBottomSheet, 一般来讲 showModalBottomSheet 无法直接使用有状态组件(statefull), 要使用有状态组件(statefull), 使页面布局动态变化, 就需要使用到 StatefulBuilder, StatefulBuilder 会提供 setState 方法来动态更新组件, 使用动态布局, showModalBottomSheet
注意: StatefulBuilder 提供的 setState 参数, 应该修改一下名称, 让他跟主页面不同, 要不然, 主页面中的 setState 和 遮罩效果窗口中的 setState 名称一样, 就会发生混淆, 导致报错。
5 flutter 如何使用第三方图标
具体步骤如下:
- 把第三方图标下载下来
- pubspec.yaml 中配置第三方图标
- 代码中引用第三方图标
来源: blog.csdn.net/shuaizi96/article/details/88550217
6 flutter 如何弹出状态栏通知?
请使用插件: /flutter_local_notifications
请参考: blog.csdn.net/weixin_44350337/article/details/112717346
7 如何在弹出的窗口中动态改变布局元素? 也就是如何根据不同的情况显示不同的元素?
使用 StatefulBuilder 即可。
来源: newbedev.com/dart-how-to-setstate-in-alertdialog-flutter-code-example
1 | static void popupCustomWindow(BuildContext context, List<Widget> list) { |
改成:
1 | static void popupCustomWindow(BuildContext context, List<Widget> list) { |
注意: 中间多套了一个 StatefulBuilder
最后我们可以这样调用:
1 | _popupActionMenu(context, App.configs.inboxViewConfigs, (checked) { |
存在的问题:
需要使用关闭 Dialog 后再打开, 这样才会刷新, Navigator.of(context).pop(); 就是干这个用的。 这可能的原因是 AppCustomDialog 不是 StateFullWidget
来源:
newbedev.com/dart-how-to-setstate-in-alertdialog-flutter-code-example
8 flutter floor 如何使用数据库视图
请使用注解 @DatabaseView, 记得在 database 抽象类中添加 view 对象.
使用 DatabaseView 映射实体类和数据库视图
1
2
3
4
5
6
7
8''' (
select id, type from tsk union all
select id, type from rot union all
select id, type from hab
''', viewName: "td")
class Todo extends En.Entity {
// class members
}database 抽象类中指明 view
1
2
3
4
51, entities: [User], views: [Todo]) (version:
abstract class TodoLineDatabase extends FloorDatabase {
UserDao get userDao;
TodoDao get todoDao;
}
注意: DatabaseView 注解中写的 sql 语句, 字段名应该和实体类成员变量的名称一致, 不是跟 @ColumnInfo 中的配置名称一致
如果您觉得这篇文章对您的学习很有帮助, 请您也分享它, 让它能再次帮助到更多的需要学习的人. 您的支持将鼓励我继续创作 !