Android

在 Android 项目中调用 Flutter,flutter将作为一个Module被元工程引用,为了方便管理,我将flutter项目的工程和Android工程放在同一层级
创建flutter module

1
flutter create -t module flutter_demo

在 Android 工程项目中的settings.gradle中添加

1
2
3
4
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir,
'../flutter_demo/.android/include_flutter.groovy'))

在需要引用的 App Module 添加依赖

1
2
3
dependencies {
implementation project(':flutter')
}

注意:需要将 App 的 sdk:minSdkVersion 和 flutter 的设置一致,同时需要 flutter android 工程中可能还在引用 support 的包,可以升级为 androidx.appcompat

示例

避免接受到不相关的LiveData回调
首先我们要知道Room的实现机制

  1. 使用triggers监听到了表的增删改查
  2. Room创建了一个InvalidationTracker观察表是否发生改变
  3. InvalidationTracker.Observer#onInvalidated调用,通知Observer重新查询

Room只知道你的表发送了变化,但是不知道具体发生了什么变化,而且并不知道这些变化观察者是否关心。Room本身并不保存数据所以它也无法判断,观察者要的数据要否变化。

所以在实际使用中你需要自己过滤掉不需要的通知

1
2
3
4
5
6
7
@Dao
abstrat class UserDao : BaseDao<User>() {
@Query("SELECT * FROM Users WHERE userid = :id")
protected abstract fun getUserById(id : String) : Flowable<User>

fun getDistinctUserBy
}