为什么绑定的事件会自动立即执行?

这个问题可能从Vue过来的用户经常遇到,在Vue中事件绑定是:@click=”onClick” 也可以是@click=”onClick()”
@click=”onClick”的含义是给click事件绑定一个回调函数,而@click=”onClick()”的含义则是给click事件绑定一段内联js语句,无论哪种方式都不会在解析渲染的时候执行;而flutter没有“内联dart语句”这种说法,而从Vue过来的用户, 如果习惯的写成:onTap: _onTap()的话,每次渲染立即执行_onTap方法;

GestureDetector 点击没有响应

设置一个空的的Container,并且想捕捉这个Container的点击事件,然后做一些事情,但是即使这个Container尺寸不是0,也无法点击。查看官方文档,说明说下:

  • 如果一个GestureDetector组件有一个子节点,那么他的size由子节点决定,也就说和子节点保持一致;
  • 如果GestureDetector组件没有子节点,那么他就会扩展到和父组件一样的size。
  • 默认情况下,GestureDetector会直接忽略掉不可见子组件的touch事件。可以使用behavior属性去修改这种默认行为。默认值有三个:
    • deferToChild 取决于不透明的孩子组件, 只要有组件命中,当前组件命中 如果是透明组件则直接击穿;
    • opaque 将透明子组件当作不透明来处理,不可以击穿
    • translucent 如果子组件透明,当作不透明处理,同时可以击穿

注意:上述behavior针对的是原生事件 pointerDown pointerMove等,手势识别的话,需要考虑到手势竞争,因此每次手势只能由一个组件触发对应事件。

Access denied finding property “vendor.camera.aux.packagelist”

解决:

1
2
3
4
5
6
7
8
9
10
11
12
没有申明权限
在/android/app/src/profile/AndroidManifest.xml中添加权限申明:
<uses-permission android:name="android.permission.CAMERA"/>
并且在调用摄像头之前先查询权限
try {
if (ContextCompat.checkSelfPermission(this.mActivity, Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity)this.mActivity, new String[] {Manifest.permission.CAMERA},
50); }
// TODO
} catch (Exception e) {
}

flutter 修改android或这ios的默认语言

1
2
1、删除android或者ios目录
2、flutter create -a java .

PresentationContext cannot be cast to android.app.Activity

1
2
3
4
5
报错:
PresentationContext cannot be cast to android.app.Activity

解决:
某些自动注入的Context不是activity实例,可以直接使用MainActivity代替
1
2
3
4
5
6
7
8
9
10
11
12
报错:
Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute application@label value=(novenn_miaoyin) from AndroidManifest.xml:10:9-39
is also present at [org.wysaid:gpuimage-plus:2.6.3] AndroidManifest.xml:13:9-41 value=(@string/app_name).
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:8:5-29:19 to override.

解决:
在project/android/app/src/main/Manifest.xml的Application下添加属性
tools:replace="android:label"

同时在manifest节点上添加
xmlns:tools="http://schemas.android.com/tools"