正文
flutter有哪些坑 flutter常见问题
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
flutter开发中一些技巧和坑点
在Dart中,当你不需要去改变一个变量的时候,应该使用final或者const,而不是使用var去声明一个变量。一个final变量只允许被赋值一次,必须在定义时或者构造函数参数表中将其初始化。
const所修饰的是编译时常量,我们在编译时就已经知道了它的值,它的值是不可改变的。
const比final更加严格,看以下例子:
对于表达式:
如果tar为null或tar[a]为null或tars(b)的值为null,都会导致表达式为null。
实现跳转到广告按back返回是主界面
如何强制竖屏
在线上的app,如果flutter报错,那一片红可是非常的辣眼睛,给用户的体验也很不好,其实我们可以自定义错误页面
在Flutter中,加载本地图片会存在一个加载过程。比如点击图标做图标的切换时,那么首次会发生闪动的情况。尤其是做类似引导页这类需求是,通过左右滑动切换图片时会发生比较明显的白屏一闪而过。
解决方法很简单,就是使用 precacheImage ,它将图像预存到图像缓存中。如果图像稍后被使用,它会被加载得更快。
在iOS 13中遇到了http网页打不开的问题,添加以下文字到Info.plist
yourdomain.com 是你请求的链接的域名
已有iOS项目集成Flutter遇到的一些坑
1.XCode10.3,CocoaPods1.7.5, Flutter 1.8.4-pre.65(一定是master channel,不能是stable), 根据标题中的环境对应的版本自行升级,如版本高太多的话不敢保证一定会成功。
2.参照官方文档的iOS部分很快就构建好了,于是Commod+B构建,可是马上会遇到第一个坑,如下图:
ld: warning: directory not found for option '-L/Users/wang/Library/Developer/Xcode/DerivedData/test_flutter-dbqsilcpjusqpadpdwvgsoqctumw/Build/Products/Debug-iphonesimulator/FlutterPluginRegistrant'
ld: library not found for -lFlutterPluginRegistrant
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我晕这是什么鬼啊,尝试了各种方式都无效:
怀疑是没有找到静态库 lib(FlutterPluginRegistrant.a),工程目录和flutter_module目录以及flutterSDK的安装目录都搜遍了,也没有发现这个文件。。。。。。
于是怀疑是新版本的Flutter将FlutterPluginRegistrant.a移除了,根本就不存在这个文件,接下来在宿主iOS工程下的Pods目录中的『Pods-test_flutter.debug.xcconfig』文件中搜索" FlutterPluginRegistrant ",果然发现了一些线索
接下来将 带有 『 FlutterPluginRegistrant 』内容的部分全部删除( Pods-test_flutter.debug.xcconfig也如法炮制 ),修改后的配置如下:
接下来Command+B再次构建,奇迹发生了,刚才的错误消失了,继续往下走,
参照官方文档将 Appdelegate.m文件改为如下内容
Command+B走起,然而第二个坑来了,
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_GeneratedPluginRegistrant", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
彻底晕倒,这又是什么鬼。。。自习一看才发试一个经典错误,原来是编译期的符号表$_GeneratedPluginRegistrant在链接期间找不到,由于GeneratedPluginRegistrant是在FlutterPluginRegistrant中定义的,这更加说明了FlutterPluginRegistrant.a根本不存在,于是接下去到刚才用命令"flutter create -t module --org com.example flutter_module"构建的 flutter_module 目录中去搜索文件GeneratedPluginRegistrant(mac系统下用finder搜索小伙伴们一定都会了),果然有所收获,在../flutter_module/.ios/Flutter/FlutterPluginRegistrant/Classes/目录下发现了两个文件GeneratedPluginRegistrant.h和GeneratedPluginRegistrant.m,这下就好办了,在宿主工程中把这两个文件添加进来,方式任意,可以reference也可以copy过来。
二话不说马上Command+B构建工程,大功告成!!可以来支烟庆祝一下了!
希望此文可以帮助迷茫中的你走出困境,现在网上关于这个错误的解决方案少之甚少,如果看到这里,此时你的问题已经得到解决了!!
Flutter遇到的坑
最近写了一个LoadingView用于页面的网络加载,使用的是StatefulWidget。由于项目是使用的Get对状态进行控制的,所以在GetBuild中对Loading进行刷新。但在使用中发现rebuild LoadingView没有刷新状态,看参数是在Widget中更新了的。
后续定位发现,StatefulWidget在rebuild的时候,并不会重新执行initState方法,而只会执行build方法,这也符合state和widget的一对多原则。知道问题所在,修改也非常简单。去掉state中的status变量,使用widget中的initStatus值即可。
在此记录,对于Get的一些注意点。
目前项目中对Widget进行了内嵌LoadingView的BaseWidget封装,对GetxController进行了LoadingStatus状态操作的BaseController封装。发现在第二个继承了BaseWidget的页面中,对绑定的Controller进行update操作无效。
阅读源码后发现,GetBuilder的global参数默认是true,在没有指定tag的情况下,会根据controller作为key进行全局map,若第二次调用时,会先通过Controller进行get,正好我们的BaseWidget使用的是BaseController导致全局只有一个Controller从而导致第二个页面无法刷新问题。我们只需要在基类中将global改为false,直接使用init的controller即可。
目前在做App的主题色切换功能,发现在部分主题色下,Appbar的标题和Action自动变成深色,查阅资料后得知,由于色值的computeLuminance值过大导致Brightness自动为Brightness.light。
知道原因后就好办了,通过设置ThemeData里面的Brightness类型的参数为Brightness.dark(注意我们只需要Appbar为深色,brightness参数控制的是整个页面,不修改)。经验证,primaryColorBrightness控制Appbar的标题和action,修改即可。
flutter 蓝牙开发遇到的坑
flutter 蓝牙开发遇到的坑
最近在做个flutter蓝牙功能,用的flutter_blue,在iOS上没有任何问题,照着例子写完,正常运行蓝牙功能,但是在安卓上发现各种坑,用这个插件首先是有些设备拿不到设备名称,还有就是读写特征和ios上拿到的也不一样。折腾好久,最后在github上找到外国友人给出的方案,就是用flutter_bluetooth_serial这个插件可以解决以上问题,就试了一下,结果真可以解决问题,而且这个用法感觉比flutter_blue 更强大,不需要通过读写特征值进行通讯,直接就能通过connection写入和接收数据。做下记录,希望能帮到有同样问题的人。因为我在遇到问题时,百度了全是不能解决问题的办法。
flutter有哪些坑的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于flutter常见问题、flutter有哪些坑的信息别忘了在本站进行查找喔。