
dart
文章平均质量分 64
ameryzhu
这个作者很懒,什么都没留下…
展开
-
关于flutter pubspec.yaml动态版本号问题
问题:拉出老的release库的代码,发现flutter部分的代码无法编译通过,打不出老的release包。问题分析:develop分支flutter库代码中的pubspec.yaml中的版本号都是动态模式。加了^符号,会默认指向a.b.c 版本号中c的最高位置。例如: ^0.1.2如果远端的pub库上的最新版本是0.1.3,那么本地使用的实际最终会是0.1.3。在自动对齐的过程中,有可能出现一些三方库的api变更,导致flutter编译的时候第三方库指向了最新版本的不.原创 2021-01-27 18:57:32 · 2634 阅读 · 0 评论 -
Aspectd 原理浅析
以一个简单的例子来解释aspectd改造后的代码的调用过程。声明一个简单的类Aclass A { int m;}void main() { A a = A(); print('a value :${a.m}'); ...}在main()方法中打印一下。写一个注解,hook 一个名为A的类的构造函数。向该类调用的前后点加注释。import 'package:aspectd/aspectd.dart';@Aspect()@pragma("vm:entry原创 2021-01-11 00:08:25 · 710 阅读 · 2 评论 -
AspectD 构建流程
项目构建流程下面分析一下aspectd是的执行过程是怎样的,我们先看一下aspectd给flutter tools打的git patch上的代码。主要改了两个类。一个新添加的aspectd.dart,另一个common.dart是系统原有的类。我们先看common.dart可以看到对KernelSnapShot类的build方法做了一些修改。也就是修改了原来生成dill的流程。把原来的编译流程抽取出来到buildImpl()方法中。增加了如下判断。 await b原创 2021-01-10 23:27:16 · 337 阅读 · 1 评论 -
AspectD 项目结构分析
应用场景AspectD是一款闲鱼推出的开源的代码插桩工具。使用它需要hook flutter的sdk。因为它需要修改flutter的构建流程。flutter产物有一个从dart代码到app.dill再到kernel.bin的过程。分析项目如何集成我们先以官方的example为例来分析一下。对于普通的flutter工程,你可能以为example是项目的入口,其实不是。aspectd因为要去做一些hook操作。修改了项目的入口,每次都会去找项目中是否有aspectd_impl目录,如果有的原创 2021-01-10 23:26:34 · 363 阅读 · 0 评论 -
从dill角度解释dart const 与final的区别
const和final来修饰属性field都表示对象不可变。但是const在编译期起到作用。而final则是在运行期起作用。可以通过dart sdk源码中提供的dump_kernel工具来更深刻地认识一下。dart编译的过程,会先扫描dart文件,生成ast树,然后生成dart intermidate language file即app.dill,然后根据aot或者jit生成不同的产物。可以看一下const在ast转换成dil文件后,产物中的形态。static const field asy.原创 2021-01-07 16:08:40 · 367 阅读 · 0 评论 -
Error 105 received from application: Isolate must be runnable
最近在处理flutter内存泄漏相关的代码。经过一番分析后发现是我通过FlutterJNI获取与VM通信的地址时错误调用FlutterJNI导致。FlutterJNI flutterJNI = new FlutterJNI();flutterJNI.attachToNative(false);String url = FlutterJNI.getObservatoryUri();在flutterJNI调用attachToNative()会导致flutter engine层重新构造一个Flu原创 2020-09-27 19:47:12 · 739 阅读 · 0 评论 -
通过analyzer分析dart代码
比如有个需求:通过分析注解,来生成一段dart代码。dart上如果要自动生成代码,那么就需要用到代码生成器,code generator,这和Android里面apt类似。一般我们会引用source_gen声明一些generator,然后放在build.yaml里面,调用build_runner来生成代码。如果不想使用框架,而是自己手写这个过程呢?1.从dart文件读入代码2.分析代码,读出里面的annotation对应的value值。3.根据value值,自己再生成代码字符串.原创 2020-06-19 16:37:12 · 3443 阅读 · 2 评论 -
Flutter web 跨域问题
背景:用flutterweb工程做了一个产物化平台,现在想在里面去展示aar构建的信息。nexus有api可以对外来访问。通过dio去拿相应的数据即可。问题:80端口下面的flutter web工程访问8081端口下的nexus服务,请求失败。http://127.0.0.1:8081/service/rest/v1/components/bWF2ZW4tcmVsZWFzZXM6Zjg5OGIzOTAzY2I5OWM1OTYyNTVjZGUzNDQ2N2Q0OGE通过postman或者客原创 2020-05-26 18:58:49 · 3913 阅读 · 0 评论 -
flutter --version卡死解决办法
开启verbose查看信息。flutter --version --verbose看到一直卡在github.com pull这里,于是考虑到修改flutter git镜像到国内。修改_flutterGit的路径为再次运行运行顺利。原创 2020-05-13 16:44:20 · 3263 阅读 · 0 评论 -
windows、ubuntu一个机器配两套flutter环境方法
如果下两份fluttersdk,然后手动修改.bash_rc就会非常麻烦。而经常会有这样的需求,比如:1.想从旧的sdk 1.9升级代码到新的sdk 1.12.13,需要两个环境都跑2.想在develop、master分支跑flutter web等等有没有简单的办法?利用alias1.修改~/.bash_rc如果没有添加如下脚本则手动加上if [ -f ~/.bash_aliases ]; then. ~/.bash_aliasesfi2.touch .bash_al原创 2020-05-12 22:51:12 · 334 阅读 · 0 评论 -
Flutter For Web配合Nginx搭建一个简单的网页
Ubuntu上部署的项目多了,想弄个entrance一起管理一下。先看下最终效果:1.开启flutter的web模式//只有master和develop等分支支持flutter web,stable是不行的。flutter channel master//开启支持web模式flutter config --enable-web trueflutter devices可以看到新增了chrome//创建一个新web项目flutter create .flutt原创 2020-05-12 20:07:47 · 1711 阅读 · 1 评论 -
pub私有仓库相关问题
启动过程端口占用:windows上启动显示端口占用。1.找到8080占用的端口:netstat -aon|finstr "8080"2.killtaskkill /pid 6008 /f3.再次启动dart仓库dart ./example/example.dart...原创 2019-10-10 11:00:43 · 417 阅读 · 0 评论 -
dart pub私有仓库搭建、私有仓库上传方法、上传工具定制
dart 的官方网站提供了一个simple dart server,具体使用方法参考相关github的地址。https://github.com/dart-lang/pub_server我们选了一个PC作为服务器,24小时不关机。然后在内网中部署服务。配置好后,服务启起来。主要障碍在于上传的过程需要科学上网,科学上网结束后,又需要切回到内网。使用flutter 默认的pub c...原创 2019-09-29 15:18:01 · 6464 阅读 · 1 评论