Flutter
gaoyp
这个作者很懒,什么都没留下…
展开
-
dart用puppeteer从web页抓取数据前需先调用page.waitForSelector
在调用page.evaluate执行js从页面取数据之前,需要先page.waitForSelector,waitForSelector的参数貌似和page.evaluate中要抓取的内容没关系也可以,关键是调用page.waitForSelector等待web页加载完成后再调用page.evaluate,否则有可能取不到数据。原创 2023-01-22 17:10:02 · 928 阅读 · 0 评论 -
是否可以用不同版本的Flutter版本打包在iOS上实现马甲包
突然有一个想法,在Flutter大版本不变的前提下,在打包时用Flutter的不同版本来打包,不知道可不可以骗过苹果应用商店对马甲包的审查。有打马甲包需求的朋友有兴趣可以试一试这个思路,或者尝试过的,麻烦在文章的回复里面留言。原创 2022-12-09 18:54:14 · 946 阅读 · 2 评论 -
Flutter递归遍历文件夹
Dart以递归的方式遍历整个文件夹。原创 2022-12-09 18:47:44 · 1430 阅读 · 0 评论 -
Flutter在pubspec中添加的资源为目录时,子目录只包含根目录同名的文件
子目录下只包含与主目录中的文件同名的文件。如果想要添加子文件夹中的所有文件,需要为每个目录创建一个条目。原创 2022-12-06 16:53:07 · 655 阅读 · 0 评论 -
在github上查询某个Flutter库的使用示例
在Flutter开发时,有时想看一下某个库的使用示例,或者是想看一下这个库使用的人多不多。于是想到可以通过查询pubspec.yaml中这个库的名字来实现上面的目的。同样的iOS也可以通过查Podfile文件来实现。原创 2022-10-23 09:14:39 · 775 阅读 · 0 评论 -
Flutter命令行工程中在macOS下取Download目录
命令行工程中不能使用path_provider,path_provider需要Flutter包的支持。用"~/Downloads",经测试也不行,如下代码执行失败。var response = await dio.download(href,savePath);最后的解决方案是用macOS的命令id -un 先取得用户名,再拼出Downloads的绝对路径来。...原创 2022-06-18 15:55:45 · 827 阅读 · 0 评论 -
AMapFlutterLocation的回调方法转为异步操作
用Completer实现class LocationInfo{ double longitude; double latitude; String address; LocationInfo({this.latitude, this.longitude,this.address});}class LocationUtil{ ///界面初始化完成 static Future<LocationInfo> fetchLocation() async { .原创 2022-04-25 14:45:41 · 415 阅读 · 4 评论 -
Flutter amap_flutter_map 缩放地图使两点都在地图上显示
CameraUpdate update = CameraUpdate.newLatLngBounds(bound, 10);_mapController?.moveCamera(update);上面这个不好用,实际测试,并不会缩放地图。最后只能是先算出两点的中心点后,以中心点为基点,计算两点间的横向距离,再由距离大体估算出zoom的值来:_configWorkDayMap() async { //116 LatLng latLng1 = LatLng(39.91,116.6.原创 2022-04-25 11:28:20 · 947 阅读 · 1 评论 -
Flutter开发的plugin中引用的url_launcher升级后,plugin的podspec文件的修改
自己开发的plugin中引用了url_launcher,在plugin升级到null safe后,需要把plugin中引用的url_launcher从5.7.0升级到6.0.20。在升级后,Flutter 工程在run时,在pod install时报插件依赖的url_launcher找不到。先说最后的解决方案:在插件的podspec文件中:flutter_plugin/ios/amap_map_fluttify.podspec把原来的s.dependency 'url_launcher'原创 2022-04-14 15:21:49 · 2753 阅读 · 1 评论 -
Xcode13.3 13.2以及Flutter新版本的稳定性问题
最近升级Flutter工程到null safe。被各种环境问题折磨。发现Xcode和Flutter的新版本都有很多兼容性问题。Flutter 2.10及以后版本,在arm版mac的iPhone虚拟机上粘贴功能有问题。经查说是只在虚拟机有问题,在真机没问题。结果想打包后在真机安装测试时,发现Xcode打包应用报错。需要升级pod包。打development包时,Xcode的auto签名方式各种问题,然后准备在钥匙串中手动制作开发证书时,又是一堆问题。developer.apple.com网站上也是一堆原创 2022-04-08 15:31:33 · 2741 阅读 · 0 评论 -
Xcode升到13.3以后打包应用报 Segmentation fault: 11 (in target ‘DKImagePickerController‘ from project ‘Pods‘)
Flutter工程在升级Xcode到13.3后打包应用报错如下:Segmentation fault: 11 (in target 'DKImagePickerController' from project 'Pods')但是运行不出错。最终解决:在ios目录下,运行pod update。pod install不行。参考https://github.com/flutter/flutter/issues/100142直接原因:pod库DKImagePicker原创 2022-04-08 15:15:20 · 3500 阅读 · 0 评论 -
使Flutter工程支持null safe
支持null safe的flutter最低版本是2.0.0,对应的dart sdk是2.12.0。1、要使工程支持null safe,电脑上必须安装Flutter 2.0.0 及以上的版本。2、要将pubspec.yaml中的sdk大于2.12.0此处设置的是dart的版本,如下:environment:sdk: ">=2.12.0 <3.0.0"3、如果电脑上的Flutter是 2.0.0的,但是pubspec中的sdk设置的值低于2.12.0,如下:原创 2022-03-31 18:06:02 · 3271 阅读 · 0 评论 -
Flutter格式化电话号码
工作上需求从手机的通讯录导入用户,取得用户的姓名和电话号码。在pub上搜到star高的有contacts_service和flutter_contacts。但是从这两个库中取到的电话号码格式如下:1 (391) 012-6666。应该这两个库是外国人写的,没有考虑到中国的问题。最后找到了phone_numbers_parser这个库,可以把电话号码格式化为符合中国人习惯。代码如下。final cnPhone = PhoneNumber.fromNational('cn', '1 (391)原创 2022-03-30 17:08:53 · 2375 阅读 · 0 评论 -
Flutter iOS打包时报错 Unexpected type InvalidType InvalidType
在运行应用时不报错,但是iOS打报时报错:Unexpected type InvalidType InvalidType(<invalid>)#0 TypesBuilder.fromStaticType (package:vm/transformations/type_flow/types.dart:103:7)#1 SummaryCollector._staticType (package:vm/transformations/type_flow/summary_collector原创 2022-03-22 23:32:27 · 2181 阅读 · 0 评论 -
在Apple M1 CPU的电脑上设置应用以rosetta方式运行的原理
在 M1 的 苹果电脑上配置开发环境时,很多教程会提示将XCode或Simulator设置为以rosetta的方式运行以解决编译时的问题。 一开始不是很理解,rosetta不是为了兼容老的应用,使编译为x86-64格式的老应用也能运行在M1的ARM cpu上而作的运行时转义吗?没搞明白设置应用为rosetta方式是什么意思,难道这个应用即可以按rosetta的方式运行,也可以按arm的原生的方式运行?那这个应用到底是x86格式的还是arm格式的? 后来发现可设置为...原创 2022-03-11 17:22:22 · 3589 阅读 · 0 评论 -
flutter 旧有V1项目升级V2
需要修改下面的文件 android/app/src/main/AndroidManifest.xml修改后的样例:<manifest> <application android:name="${applicationName}"> <activity> <!-- <meta-data android:name="io.flutt..原创 2022-03-07 17:43:32 · 3887 阅读 · 1 评论 -
Flutter 转 null safe时报错: The argument type ‘Object‘ can‘t be assigned to the parameter type XXX
在将Flutter工程转为 null safe的时候,遇到下面的错误:error: The argument type 'Object' can't be assigned to the parameter type 'ImageProvider<Object>'.这个问题不是太好处理,在排查后用下面的方法解决了问题:Object imageSource;#修改前:ImageProvider image = imageSource is Asset原创 2022-03-07 15:28:04 · 3599 阅读 · 0 评论 -
Flutter bezier_chart库支持null safe
bezier_chart库在https://pub.flutter-io.cn/上的最新版时1.0.17+1,并不支持null safe。经检查发现在bezier_chart库的git库中上已经支持了null safe,只是在pub上没有升级。https://github.com/aeyrium/bezier-chart直接引用git就可以了。在pubspec.yaml中如下修改:#bezier_chart: ^1.0.17bezier_chart:git:url: ...原创 2022-03-04 15:19:50 · 2000 阅读 · 0 评论 -
Flutter将工程迁移到空安全的常用代码修改方式
1、形参加 ?2、实参加! ,强制将可空的变量转为不可空的变量。3、实参加 as , dart的空安全严格检查数据类型。4、实在不行,在声明变量是不设置类型,在下面的代码中作类型和null判断。flutter识别这种代码作的判断。5、可空的Function类型变量修改为:_callback?.call()类的实例变量相关:1、变量声明加late,但需要确保在类的初始化函数中会赋值。2、不可空类型变量声明处赋初始值。3、变量声明处原创 2022-03-02 11:31:15 · 4487 阅读 · 0 评论 -
IntelliJ、Android Studio 支持多个字符的快捷键 Second stroke
Second stroke 中如果只有字符键,则指定的字符必须和快捷键的主体部分同时按下。如果Second stroke 中有cmd、ctrl、shift,则在按下主快捷键再放起后,再按下Second stroke中的快捷键。参考:https://intellij-support.jetbrains.com/hc/en-us/community/posts/360001788480-Multi-letter-shortcutsIs there way to create multiple..原创 2022-02-25 17:36:28 · 959 阅读 · 0 评论 -
Flutter elevation属性名称的含义
在Flutter里,elevation这个属性是给widget加阴影的。而elevation词的本意是海拔、高度。只所以用elvation这个词是因为,一般给widget加阴影的目的是让widget看起来有立体感,而立体感实际就是让平面的物体看起来有高度。所以这个属性就叫elevation了。...原创 2022-02-25 09:54:09 · 2549 阅读 · 0 评论 -
判断一个Flutter的包是plugin还是package
如果是plugin的话,因为需要依赖iOS或Android原生的代码,在集成到工程中时,可能比package麻烦很多。 下面是判断一个Flutter的三方包是否是plugin的一个简单方法:打开Flutter包的pubspec.yaml文件,如果有下面内容的则是plugin,需要依赖Android或iOS的原生能力。flutter: plugin: platforms: android: package: plug...原创 2022-02-20 18:13:19 · 346 阅读 · 0 评论 -
Flutter 公司组织结构实体类递归构造 递归查询
服务端返回的公司组织结构实体对象的结构是树状的,客户端在构建实现对象时,需要递归的把各级的实体类都构建出来。在查询的时候,也需要用递归的方式来查询。void main() { doFind();}void doFind() { String jsonString = getJsonString(); Map<String, dynamic> rootMap = jsonDecode(jsonString); OrganizationModel root...原创 2022-01-25 11:24:56 · 2342 阅读 · 0 评论 -
Flutter 递归查询Map(字典)
下面代码从模拟的公司组织架构数据中,把各级部们的员工都查找出来。void main() { doFind();}void doFind(){ String jsonString = getJsonString(); Map<String,dynamic> rootMap = jsonDecode(jsonString); List foundUsers = []; recursiveFind(rootMap,foundUsers); print('.原创 2022-01-24 18:34:47 · 1997 阅读 · 0 评论 -
Flutter的dio库调用request时,使options的baseUrl失效
如果request的path参数是完整的url,以http开头,则baseUrl不起作用。Dio dio = Dio();dio.options.baseUrl = 'http://baidu.com';//下面的请求baseUrl不会生效dio.request('https://cn.bing.com/search?q=123');原创 2022-01-18 16:12:02 · 2296 阅读 · 0 评论 -
Flutter使嵌套的GestureDetector都可以收到点击事件
如下面的普通写法,只有内部的 GestureDetector可以接收事件,而外部的GestureDetector是收不到事件的。GestureDetector( onTap: () { print('tap on parent'); }, child: Container( width: 100, height: 100, color: Colors.blue, child: GestureDetector(.原创 2022-01-16 17:22:47 · 2905 阅读 · 0 评论 -
Flutter使用系统的Builder组件处理复杂页面逻辑
Flutter构建界面时,有时在界面的一部分中需要定义一些变量或作一些逻辑判断以实现不同情况输出不同界面的目的。这种情况可以用系统的Builder组件作为父组件,Builder组件的builder参数是一个Function,可以在builder参数的函数体内中定义变量、作逻辑处理。如下:Builder(builder: (context) { String title = ''; bool check = true; if (check) { return TextButton.原创 2022-01-08 10:09:57 · 1817 阅读 · 0 评论 -
Flutter集成友盟的SDK
集成的是友盟最新的SDK:umeng_common_sdk 1.2.3。SDK的地址:umeng_common_sdk | Flutter Package友盟+组件化基础库:Common Flutter plugin(Android & iOS).https://pub.flutter-io.cn/packages/umeng_common_sdk官方的集成文档:开发者中心https://developer.umeng.com/docs/119267/detail/174923.原创 2021-12-30 15:08:33 · 2911 阅读 · 1 评论 -
Flutter 将友盟最新的null safe的SDK转为非null safe
友盟要求为了合规检查,必须SDK必须升到最新版。但是友盟最新的SDK是null safe的。但是公司的项目还是非null safe的。为了接入最新的友盟的SDK,就把友盟的SDK改成非null safe的了。友盟SDK的dart代码很少,两分钟就能改完。1、把pubspec.yaml中的sdk的版本改到2.7.0,如下:environment:sdk: '>=2.7.0 <3.0.0'flutter: ">=1.10.0"2、把所有错误中的"?"和"!"原创 2021-12-28 14:06:58 · 1373 阅读 · 0 评论 -
Flutter的Text控件显示纯英文时高度和汉字不一致的问题
调整前:调整后:解决方案:strutStyle: StrutStyle(forceStrutHeight: true,leading: 0.5,),解决原理:中文和英文字体默认的leading不一样。StrutStyle的leading属性是指字体的倍数,比如:0.5就是0.5*字体的高度,而且这个高度要分成两半,上下各分一半。参考:https://juejin.cn/post/7034416015442345991...原创 2021-12-24 10:14:56 · 4164 阅读 · 0 评论 -
使Flutter在格式化代码时保留换行
在格式化时保留一个换行比如:if(1==1 || 2 == 2 || 3 ==3)想在格式化时,在 “||”后面增加换行如下:if(1==1|| 2 == 2|| 3 ==3)这样条件比较复杂时,可以看得更清楚。下面是实现方式:只要在写代码时,在合适位置增加注释符:"//",并在“//”后面手动加一个换行,在格式化代码时,“//”后面的换行就会保留。比如上面,在 "||"后增加一个空的注释://,就可以了。如下:if(1==1 //|| 2 =原创 2021-12-03 14:53:28 · 1881 阅读 · 0 评论 -
Flutter中设ListView的shrinkWrap为ture导致的崩溃
shrinkWrap会使ListView的懒加载失效,全部行都会加载到内存中,如果行数太多,并且每行的图片也大,则会导致内存溢出而崩溃。如果需要截ListView的全图,可以设shrinkWrap为ture。如果Column中嵌套ListView,ListView设置 shrinkWrap 为true,则ListView不能单独滚动了,只有随Column滚动。...原创 2021-10-09 11:16:04 · 2028 阅读 · 0 评论 -
Flutter 使Row的子元素可以自适应高度
https://stackoverflow.com/questions/52113356/flutter-vertical-divider-as-tall-as-its-parentYou can use IntrinsicHeight for this.I used Container for my divider in this example, because I needed border radius on my divider, but you can use VerticalDivid原创 2021-09-30 09:51:45 · 3062 阅读 · 0 评论 -
Flutter按下变色的图标按钮
TextButton( child: Padding( padding: EdgeInsets.only(left: 20, right: 20), child: Text.rich( TextSpan(style: TextStyle(color: Colors.black54, fontSize: 13), children: [ WidgetSpan( child: Icon( Icons.arrow_bac.原创 2021-09-28 13:21:01 · 1799 阅读 · 0 评论 -
加载Flutter Assets中2倍图的一些细节
如果只有2倍图,放在了2.0x文件夹下,没有1倍图。则在.yaml文件中,此图必须全名匹配才行。按目录匹配的话,就找不到图。如果在.yaml文件中是按目录匹配图的,则1倍图和2倍图都必须的放到正确的倍数目录下。个人理解是,如果按目录匹配图时,会先在assets根目录下找这张图,如果找不到,就不再找了。不会到2.0x目录中找了。如果在ymal中图是精确匹配的写法的话,则assets的根目录和2倍图目录都会找。示例:目录:assets |-2....原创 2021-09-24 13:40:45 · 1102 阅读 · 0 评论 -
rfw-google官方发布了由服务端下发的文本构建界面的组件
https://pub.flutter-io.cn/packages/rfwhttps://github.com/flutter/packages/tree/master/packages/rfwRemote Flutter WidgetsThis package provides a mechanism for rendering widgets based on declarative UI descriptions that can be obtained at runtime.可以用原创 2021-09-18 14:05:17 · 556 阅读 · 0 评论 -
Flutter中父widget调用子widget的方法
一、定义globalKey,注意<>中的是State类。final _childWidgetKey = GlobalKey();二、在父页面初始化子widgetChildPage(key:_receiveKey),三、class ChildPage extends StatefulWidget {ChildPage({Key key}) : super(key: key);@overrideChildPageState createState() => Child原创 2021-09-18 13:55:26 · 2009 阅读 · 2 评论 -
Flutter跳出多层循环
flutter - Is there a Goto function in Dart? - Stack Overflowvoid main() {outerloop: // This is the label namefor (var i = 0; i < 3; i++) { print("Outerloop:${i}"); for (var j = 0; j < 5; j++) { if (j == 3){ continue outerloo原创 2021-09-16 14:47:28 · 1373 阅读 · 0 评论 -
Flutter用递归遍历并查找子项
Map<String, dynamic> values = { '1': <String, dynamic>{ '1-1': '1-1-value', }, '2': <String, dynamic>{ '2-1': '2-1-value', '2-2': <String, dynamic>{'2-2-1': '2-2-1-value'} }, '3': <String, dynamic>{ ...原创 2021-09-16 14:43:59 · 1012 阅读 · 0 评论 -
Flutter主调函数的返回类型隐式限定被调方法返回值的泛型
postJson是被调方法,postRule是主调方法。1、要被限定的方法Future<T> postJson<T>(}2、显示的限定postJson方法返回值的类型:static Future<Map<String, dynamic>> postRule() async {return postJson<Map<String, dynamic>>();}3、隐式限定static Futu原创 2021-09-01 17:56:14 · 610 阅读 · 0 评论