Open Link-Fight opened 5 years ago
You might wonder why StatefulWidget and State are separate objects. In Flutter, these two types of objects have different life cycles. Widgets are temporary objects, used to construct a presentation of the application in its current state. State objects, on the other hand, are persistent between calls to build(), allowing them to remember information.
不同于StatelessWidget
,在使用StatefulWidget
时候,需要额外写个对于的State
,并且要独立分开写。这样做的原因是,这两个对象有着不一样的生命周期。Widgets
存在时间比较短暂,可以认为是State
某一个状态的表现,一旦State
改变了,Widgets
就要重新创建。而State
就要持久些,因为它要记住状态。
getTypeName(dynamic obj) {
return reflect(obj).type.reflectedType.toString();
}
使用 dart:convert
中的 jsonEncode
和 jsonDecode
方法。
使用toString()方法能将对象转换成字符串,但是会丢失引号等信息,不再是标准JSON,导致服务端解析不正常
使用的flutter版本是1.10.15-pre.163,在build 项目时候,DEBUG CONSOlE提示 Your app isn't using AndroidX.
。就是提示要升级到AndroidX:
Google 2018 IO 大会推出了 Android新的扩展库 AndroidX,用于替换原来的 Android扩展库,将原来的android.替换成androidx.;只有包名和Maven工件名受到影响,原来的类名,方法名和字段名不会更改。接下来我们来看看使用 AndroidX的扩展库需要哪些配置
它这个提示我一直没怎么理,直到我要使用 camera 0.5.6+1,直接就是报error了:
Launching lib\main.dart on MI 6 in debug mode... [!] Your app isn't using AndroidX. To avoid potential build failures, you can quickly migrate your app by following the steps on https://goo.gl/CP92wY.
FAILURE: Build failed with an exception.
What went wrong: Execution failed for task ':app:preDebugBuild'.
Android dependency 'androidx.lifecycle:lifecycle-runtime' has different version for the compile (2.0.0-rc01) and runtime (2.0.0) classpath. You should manually set the same version via DependencyResolution
Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 3s AndroidX incompatibilities may have caused this build to fail. Please migrate your app to AndroidX. See https://goo.gl/CP92wY.
现在看来路有两条了:
1 看看怎么升级到AndroidX:这个百度,谷歌千百遍,发现flutter官网就有 AndroidX Migration,不过要使用android studio。
2 查看插件camera
的Changelog
,发现0.2.9+1
版本没有升级到AndroidX,可以使用这个。
迁移到AndroidX后,还是有些手尾问题: 就是要项目中一个库,但是有两个版本的依赖,要选择使用哪个。 按照这个博客的提示解决了
Weight
SnackBar / of
通常发生在
StatefulWidget
组件内(我的刚好是)解决方案有:
我采用的是第一种方案[1],
Create an inner BuildContext
。picture-using-camera
按照demo的代码,来跑时候。显示遇到
flutter_test
和path
包的依赖冲突,把path
锁定到1.6.2
后解决。在真机调试中,先报出jar包下载失败,这翻墙以及切换了不同的线路后,解决。
接着又遇到报错: 意思就是
camera
包支持的sdk:minSdkVersion
,比项目支持的sdk:minSdkVersion
要高。我采取的解决方案是提高项目的sdk:minSdkVersion
, 打开文件./android/app/build.gradle
,把原来minSdkVersion 16
改为minSdkVersion 21
即可。