- 博客(52)
- 资源 (2)
- 问答 (2)
- 收藏
- 关注
原创 Rust Reqwest+Rustls 自签名证书校验
所以这里必须保证reqwest引用的rustls库和本地工程一致。以上就是实现不校验签名的逻辑,后续自己可以在对应回调进行逻辑判断。
2024-10-17 14:22:02
696
原创 Flutter 类似onResume 监听,解决入场动画卡顿(2)
接着完善上一篇内容,上一篇我们是能监听到初次进入路由页面节点,往往还想监听从当前路由跳转到其他路由后,再返回到当前路由页面,上一篇内容就无法满足当前需求了,不过我们完全可以按照上一篇的原理实现这个需求。为第一次进入路由页面回调。
2023-10-25 09:31:19
689
原创 Flutter 类似onResume 监听,解决入场动画卡顿
那可不可以实现在路由进场完成后,再去请求数据,刷新界面呢,很遗憾官方没有类似的监听,官方提供的路由状态监听,是在调用push切换路由时,立即生效,和我们的期望不一致。由于Flutter性能原因,也获取因为数据量比较大,在新页面路由进场动画执行过程中,接口请求结果回来了,很可能在进场动画执行过程中,刷新界面,导致进场动画卡顿。在Flutter 实际开发过程中,页面数据往往是异步加载,接口请求回来后,数据刷新显示到界面上。在查看了Flutter 源码,发现了一个取巧的方案,提供给大家。
2023-10-21 15:17:44
1469
原创 一行代码解决Flutter fl_chart库触摸线条提示和页面左右滑动冲突
现在项目中多个Tab页面放置了图表控件,图表支持触摸弹出线条指引提示,在实际项目接入过程中测试发现,长按线条时,左右滑动指引提示,Tab不跟随滑动,但是当触摸时间不长,刚出现线条指引时立刻左右滑动页面,线条指引消失了,页面也变成了Tab左右滑动了,达不到想要的交互需求。我们可以看到该长按识别器,支持duration自定义,我们完全可以控制这个时间让它在很短时间内进入长按识别,进而可以一直捕获到手势,不至于滑动时执行onCancel。现在转变思想,当触摸时间比较短时,让长按识别器捕获手势即可。
2023-09-19 20:41:39
692
原创 TheRouter 框架原理
我们在按照TheRouter框架添加了各种注解后,在编译期间,会自动生成一个合成类,将我们添加了@FlowTask(taskName = "xxx")注解的方法全部放到一个静态public static void addFlowTask(android.content.Context context, com.therouter.flow.Digraph digraph)方法中。继续接着执行Init方法,开始执行asyncInitRouteMap()方法,该方法主要是用来加载路由配置。
2023-09-07 09:40:56
808
原创 Mac 编译x264源码No working C compiler found 错误
Mac 编译x264源码No working C compiler found 错误
2023-03-07 17:03:26
1409
原创 Mac M1解决mach-o, but wrong architecture
Mac M1解决mach-o, but wrong architecture
2022-08-17 15:54:23
1371
原创 Flutter ListView controller.animateTo 无效
Flutter ListView controller.animateTo 无效
2022-07-15 17:49:09
1972
原创 Flutter Web 硬件键盘监听
Flutter web在开发页面时使用到键盘监听,网上找了一圈都推荐使用RawKeyboardListener组件但是在实际开发过程中发现该组件时常失灵导致无法监听到键盘输入。现在给出解决方案,使用HardwareKeyboard对象。使用方法获取HardwareKeyboard 单例,然后添加自己的回调方法 late HardwareKeyboard hardwareKeyboard; @override void initState() { hardwareKeybo
2022-05-18 10:07:12
1443
2
原创 Flutter中Mobx的实现原理
Mobx 可能先前H5 使用的较多,楼主为Android 原生开发转Flutter ,对Mobx较为陌生,在使用Mobx时想确认该框架如何实现局部刷新。本文只涉及Mobx 局部刷新的实现原理,Mobx的具体使用方法,可以百度查询Mobx会自动创建xxxx.g.dart 文件 @override String? get currentShowCard { _$currentShowCardAtom.reportRead(); return super.currentSh
2022-02-14 15:24:07
1182
原创 Flutter工程依赖其他Library的module
Flutter工程项目想要使用其他Library的module如何使用呢?Flutter工程在选择依赖时,往往一个一个依赖就是一个库,那如果依赖库又有依赖,单独将每一个库都创建一个仓库单独放置也是可以的,这里提供另外一种思路。将所有依赖的module放置到一个工程里面,然后将这个工程上传到远程这里需要注意工程根目录需要创建pubspec.yamlname: mylibrarydescription: library.# The following line prevents the
2022-01-20 14:19:07
2349
原创 深入理解Flutter 源码刷新机制--------relayoutBoundary的妙用
大家有没有想过,当子widget属性变化后,通过setState通知底层引擎刷新,那么当前页面上的所有Widget都会刷新吗,准确说应该是RenderObject Tree会整个刷新吗?聪明的你肯定能想的到,当然不会把整个RenderObject Tree刷新当一个组件的大小被改变时,其parent的大小可能也会被影响,因此需要通知其父节点。如果这样迭代上去,需要通知整棵RenderObject Tree重新布局,必然会影响布局效率。因此,Flutter通过RelayoutBoundary将Rend
2022-01-17 16:10:25
2140
原创 深入理解Flutter 源码刷新机制--------一个例子讲清渲染流程
结合前面几篇文章,今天我们例举一个简单的demo说明Flutter刷新机制demo说明:创建一个StatefulWidget 里面放置一个定时器,每间隔10s刷新一次,然后将容器背景改成随机颜色import 'dart:async';import 'dart:math';import 'dart:ui';import 'package:flutter/material.dart';void main() { runApp(DemoWidget());}class Demo
2022-01-13 20:53:30
1634
原创 深入理解Flutter 源码刷新机制--------一张图讲清渲染流程
在分析Flutter渲染逻辑时,往往逻辑绕来绕去,看起来吃力头疼。在其他网站找到一张这样的流程图能过清晰明了的说明Flutter渲染流程如上图:当 RenderObject 需要重新 layout 时,调用markNeedsLayout方法,该方法会将当前 RenderObject 加入 PipelineOwner#_nodesNeedingLayout或传给父节点去处理; 当 RenderObject 的 Compositing Bits 有变化时,调用markNeedsCompos..
2022-01-13 17:48:14
1188
原创 深入理解Flutter 源码刷新机制------被遮挡路由如何被分离
接上篇https://blog.youkuaiyun.com/bawomingtian123/article/details/122407247上一篇我们分析到旧路由被新的路由覆盖后,跟踪源码发现,即使旧的路由在定时调用setState 方法,由于Flutter刷新机制,该路由页面不会重新paint,从而达到高性能的目标。那Flutter是如何做到被覆盖的路由即使调用setState也不被刷新呢,我们还是从上一篇文章结尾聊起/// Update the display lists for all rend
2022-01-13 16:22:36
757
原创 深入理解Flutter 源码刷新机制-----路由覆盖会被刷新吗?
被遮挡路由会被刷新吗?通过分析源码发现,被遮挡的路由是不会被刷新,这里的刷新是只不会被paint我们知道state在调用了setState后实际是调用了_element!.markNeedsBuild()分析markNeedsBuild源码发现,该方法会把当前element标记为dirty脏数据, void markNeedsBuild() { ... if (dirty) return; _dirty = true; owner!.schedule
2022-01-10 12:21:08
718
原创 Flutter Web 鼠标样式修改
在使用Flutter开发Web中为了更好的交互体检,往往会根据需求动态修改鼠标样式。MouseRegion( cursor: judgeMouseCursor(), onEnter: (PointerEnterEvent event) { mouseDragDirection = -1; }, onExit: (PointerExitEvent event)
2021-12-28 17:06:15
2201
原创 Flutter 使用Dart Format格式化代码
在实际工作中,我们可能在一些页面展示源码,源码可能是字符串拼接动态生成,那么这样的拼接代码在展示时,由于空格和换行影响往往展示效果极差,Android Studio自带的代码一键格式化功能够完美的解决这个问题,这个也是我们想要的效果。由于Flutter开发使用的是Dart语言,它的语言特性和其他语言有一定差异,在网上百度了一圈也没有很好的解决方案,最后在Google后发现了官方的解决方案。GitHub - dart-lang/dart_style: An opinionated formatter/
2021-12-20 21:04:09
3610
原创 Flutter TextField 设置边框无效
在使用TextField组件时,想要设置外边框颜色,按照下面写法设定无效TextField( decoration: InputDecoration( contentPadding: EdgeInsets.all(10.0), border: OutlineInputBorder( borderRadius: BorderRadius.circular(0.0),
2021-12-15 16:01:24
3999
原创 Flutter 修改Slider 滑杆刻度
在使用Flutter自带的Slider组件时,使用divisions字段后,滑杆会显示刻度小点,需求是隐藏刻度实现方式:自定义tickMarkShape,强制修改activeTickMarkColor和inactiveTickMarkColorimport 'package:flutter/material.dart';/// Created by bawomingtian on 9.12.21./// 隐藏Slider滑杆刻度class AllocateRoundSliderTickMa
2021-12-09 14:08:47
1806
原创 修改Flutter Material主题Slider线条宽度
在使用Flutter自带的slider组件时,发现自带的slider显示效果不理想,左边线条明显大于右边查看Flutter源码发现,底层会对左边线条增加2个像素的宽度解决方案:使用自定义SliderTheme包裹Slider组件,自定义RoundedRectSliderTrackShape复现里面paint方法 void paint( PaintingContext context, Offset offset, { required RenderBox pa
2021-12-09 10:45:25
3160
1
原创 Flutter 鼠标右键
import 'package:universal_html/html.dart';void main() { // Disable the default browser behavior for right clicking // 屏蔽浏览器默认的右键点击事件 window.document.onContextMenu.listen((evt) => evt.preventDefault()); runApp(MyApp());}//具体使用Contain.
2021-12-06 14:08:28
3474
原创 Flutter Web读写文件
Read:Use this library to select a file:pub.dev/packages/file_picker(Web migration guide)import 'dart:html' as webFile;import 'package:file_picker_web/file_picker_web.dart' as webPicker;if (kIsWeb) { final webFile.File file = await webPicker.Fil..
2021-12-02 15:18:41
2972
原创 Rust 插入排序
//插入排序fn insert_sort(array:&mut [i32]) -> &mut [i32]{ let len = array.len(); let mut i = 1; let mut j = 0; let mut _tmp = 0; while i<len { j = i; _tmp = array[i]; while j>0&&array[j-1]>_tmp { .
2021-11-25 17:16:43
221
原创 Rust 选择排序
Rust 选择排序//选择排序fn select_sort(array:&mut [i32]) ->&mut[i32]{ let len = array.len(); let mut i = 0; let mut j = 0; let mut min = 0; let mut _tmp = 0; while i<len-1 { j = i+1; while j<len {
2021-11-25 16:44:11
175
原创 Rust 冒泡排序
//冒泡排序fn main() { let mut array = [2,8,10,4,748,23,96,584,12,0,999,1000]; let len = array.len(); let mut i = 0; let mut j = 0; let mut _tmp = 0; while i<len { j = i+1; while j<len { if array[i].
2021-11-25 13:58:52
165
Flutter 渲染机制Throttle如何理解
2022-01-06
使用IntelliJ IDEA java开发插件,把exe打包进插件
2021-03-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人