- 博客(268)
- 资源 (24)
- 收藏
- 关注
原创 flutter开发小技巧
直接使用字符串来拼接 URI 地址需要关注地址中拼接的每个部分的合法性,并且在处理复杂逻辑时需要更冗长的处理,如果变量包含非法字符(如中文),整个地址非法。运算符允许更安全地进行类型检查,如果转换失败,也不会抛出异常。进行类型失败会抛出异常。如:在路由跳转中使用。
2024-08-25 00:47:48
30
原创 kotlin中协程相关
协程不是线程,是基于线程封装的库,可以使用协程库提供的API方便的灵活的指定协程中代码执行的线程、切换线程,但不需要接触线程Thread类。类似于Android的AsyncTask或者RxJava的Schedulers,都解决了异步线程切换的问题,然而。
2024-05-12 22:19:15
958
1
原创 Kotlin语言泛型的形变是什么?
逆变指的是,这个泛型,只能是消费者,此泛型有泛型父类转子类的强转相关的概念存在,可理解此泛型,可以接收此泛型类型的父类型。不变指的是:这个泛型,可以是生产者,也可以是消费者,此泛型没有任何泛型继承相关的概念,可以理解是完全独立出来的泛型。协变指的是,这个泛型,只能是生产者,此泛型有泛型继承相关的概念存在,可以理解此泛型,可以接收此泛型类型的子类型。例如:下面案例中,此泛型只能是生产者,说白了,只能给用户端,读取泛型,却不能修改泛型。例如:下面案例中,此泛型既可以是生产者,也可以是消费者。
2024-05-12 21:28:01
386
1
原创 如何在原生项目中集成flutter
因为flutter的Android engine是用来Java8的特性,所以在引入flutter时需要配置你的项目都Java8编译选项(app/build.gradle)//--org后面为域名 flutter_module为module名称。开发着更新一下依赖。就可以完成功能的更新。这样的话Native。这种集成方式不需要所有团队成员都安装flutter。2.attach到Android项目中。的代码,并不知道具体实现方式。1.关闭app(这一步很关键)开发者在开发完功能模块。
2024-04-17 23:20:00
1109
1
原创 windows常用命令
该工具可以允许用户扫描所有受保护的系统文件,并且检查系统文件的完整性,然后恢复Windows损坏的系统文件。重装系统后,如果在不联网的情况下进入到安装界面“让我们为你连接到网络”这一步,到这里就不能再继续了,“下一步”这个按钮是灰的,不能点击,也没有其他任何可以点击的选项。文件的密钥与当前账户绑定到了一起,如果某个人获取了文件但是没有密钥,他无法查看内容。curl简单来说是一个命令行的网络请求工具,他请求了 ipinfo.io这个网址,网站则返回了我的公网IP地址。接下来介绍三个有用的网络命令,
2024-04-09 11:49:55
735
原创 flutter性能优化总结
选择一个特定的单元格作为 “锚” —所有单元格的尺寸都将相对于这个单元格。例如,你想要所有单元格都具有或大或小的效果(或类似需要轮询所有单元格的计算)时,就会发生内部传递。方法中进行重复且耗时的工作,因为当父 widget 重建时,子 Wdiget 的。在构建可复用的 UI 代码时,最好使用 StatelessWidget 而不是函数。将嵌套过多的 widget拆成不同的 widget,并进行封装。避免在动画中裁剪,尽可能的在动画开始之前预先裁剪图像。widget,尤其是在动画中避免使用。
2024-04-06 00:17:14
1129
1
原创 flutter项目使用ffi和原生交互问题积累
build 目录可能在 Android Studio 内看不到,到文件夹下去操作就行,release 阶段也需要在对应目录放置库文件。使用xcode打开Runner.xcworkspace,在linkBinaryWithLibraries里把xxx.a包含进来。项目名/build/app/intermediates/merged_native_libs/debug/out/lib。然后在AppDelegate.m里对静态库里面的任意函数如:native_add的调用。2.flutter项目中运行。
2024-03-25 22:49:41
626
原创 CMakeLists生成动态库.so和静态库.a
一、下载NDKCMake- NDK : 26.2.11394342 或 23.1.7779620二、新建android\app\CMakeLists.txt文件CMakeLists.txt内容三、app/build.gradle配置四、放c++代码:/android/app/cpp/native_lib.cpp。
2024-03-25 22:36:40
1141
原创 xcode生成静态库.a
一、生成静态库1.打开 Xcode 创建一个新的 Static Library 工程,取名applestudio2.创建工程完毕后,简化目录结构删除系统自动创建的同名类:applestudio.h和applestudio.m把自己的代码复制进去,如例子:guiconnect.h 和 guiconnect.m3.设置适配所有模拟器架构:project -> buildSeting -> Build Active Architecture Only 设为 NO。
2024-03-25 22:26:08
1188
原创 ios开发错误积累
2、下载完成后,执行以下命令添加:xcrun simctl runtime add /路径/iOS_17.4_Simulator_Runtime.dmg(这个是自己下载的文件的地址)1、去官网下载自己需要 地址(
2024-03-14 20:54:52
924
转载 Flutter 小技巧之优化使用的 BuildContext
这是因为 Element 里会判断此时的 _StateLifecycle 状态,如果此时是 _StateLifecycle.created 或者 _StateLifecycle.defunct ,也就是在 initState 和 dispose ,是不允许执行 of(context) 操作。 获取到 sm 对象,之后就算你直接退出当前的列表页面,5秒过后 SnackBar 也能正常弹出。还记得前面的 log 吗?
2024-01-11 15:47:13
96
转载 git中fork的使用
在 Git 中,Fork 是指复制一个已有的 GitHub 项目到自己的账户下,然后在自己的账户中对该项目进行操作。Fork 操作在协作开发中非常常见,它可以帮助开发者更好地参与到开源项目中来。当一个开源项目被 fork 后,其他开发者可以在自己的 fork 项目中修改代码,然后通过 Pull Request 向原项目提交代码贡献,既方便了个人的开发,也为原项目贡献了更多的代码。Fork 操作只在远程仓库中进行,不会影响你的本地代码库。
2024-01-09 23:57:05
2184
原创 flutter 图片相关
Flutter中ListView加载图片数据的优化方案:当开始滚动时不加载图片,滚动结束后再加载图片,用到的关键技术:NotificationListener监听滚动状态。2.如果要优化下载,需要把图片缓存在磁盘上,下次直接从磁盘读取,就像 web 缓存那样,缓存用三方插件:cached_network_image。BoxFit.cover最常用 显示可能拉伸,可能裁切,充满(图片要 不要求全图显示,充满整个容器,还不变形)。BoxFit.fitWidth:宽度充满(横向充满),显示可能拉伸, 可能裁切。
2023-07-30 11:29:43
1109
原创 flutter多版本切换
执行完后,当前目录下会生成一个 .fvm 文件夹,考虑将 .fvm/ 添加到 .gitignore 文件,避免误传上库。参考链接:https://blog.csdn.net/qq_33220645/article/details/127012269。在当前 flutter_project 目录执行 fvm use version 即可切换flutter SDK版本。2、删除文件夹flutter目录文件(这里的flutter是原来的符号连接)1、项目clean然后切换自己需要的分支。
2023-06-09 10:12:37
4709
原创 flutter面试
1、main()和runApp()函数在flutter的作用分别是什么?有什么关系吗?main函数是类似于java语言的程序运行入口函数 runApp函数是渲染根widget树的函数 一般情况下runApp函数会在main函数里执行2.widget生命周期,widget类型http://t.csdn.cn/z90io3、在flutter里streams是什么?有几种streams?有什么场景用到它?Stream 用来处理连续的异步操作,Stream 是一个抽象类,用于表示一系列异步数.
2022-05-22 20:39:26
776
原创 flutter异步相关
被async*标记的函数会在返回一组返回值,这些返回值会被包裹在Stream中。==================Dart中async和async*的区别start==============================================Dart中async和async*的区别end==============================StreamController(),只能有一个监听,会缓存数据,如上面的代码,10秒之前用户的操作在10秒之后会被打印出来。
2022-04-21 15:44:39
261
转载 flutter中compute和isolate
async和await: 对于普通的任务,使用async和await可实现异步处理任务,而async的处理方式并非使用的是多线程,而是依然在UI线程中处理任务,是在同一个线程上的并发操作。 对于比较繁重的处理任务,可使用compute来开启新isolate,来处理任务。 isolate: 是类似于线程,但不共享内存的独立的worker。是一个独立的dart程序执行环境。 对于每一个flutter应用,当应用被启动时都会有一个默认的isolate,称为root isolate。我们自己的..
2022-03-22 11:19:23
1969
原创 flutter状态管理库provider使用笔记
1.为保留状态,选择ChangeNotifierProvider.value,销毁自己手动处理(provider销毁自己手动处理参考:flutter_deer_master开源项目中GoodsSortBottomSheet类里面的处理方式, goods_edit_page.dart :dispose())Selector类和Consumer类似,只是对build调用Widget方法时提供更精细的控制,简单点来说,Selector也是一个消费者,它允许你可以从模型中准备定义哪些属性。
2022-03-21 10:07:54
484
原创 Flutter中数组list的浅拷贝和深拷贝问题
浅拷贝:拷贝指针 深拷贝:拷贝一份新的对象浅拷贝出现的问题:操作一个数组另一个数组也发生改变List list = ['1', '2', '3', '4', '5'];List copyList = list;copyList[0] = 'abc';print(list);///打印: [abc,2,3,4,5]print(copyList);///打印: [abc,2,3,4,5]上面问题解决办法:使用深拷贝list.from()List list = ['1', '2
2022-02-24 09:47:47
4240
1
原创 flutter web 微信授权和微信支付
flutter web 微信授权1 .通过微信开放平台获取授权参数参数说明appid 公众号的唯一标识redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理response_type 返回类型,请填写codescope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授
2022-01-24 10:08:14
4594
原创 flutter开发web项目
让项目支持web :flutter create .运行:flutter run -d chromeflutter run -d chrome --web-renderer html打包:flutter build web --web-renderer html官方链接:Flutter on the Web参考视频:构建 Flutter web 应用 (From Mobile App to web App)_哔哩哔哩_bilibili部署参考链接:「Flutter for Web..
2021-12-20 11:45:01
14561
原创 Mac下Homebrew的安装
简介Homebrew 官方网站Homebrew是一个包管理器,用于安装Apple没有预装但你需要的UNIX工具。(比如著名的wget)。Homebrew会将软件包安装到独立目录(/usr/local/Cellar),并将其文件软链接至/usr/local。Homebrew不会将文件安装到它本身目录之外,所以您可将Homebrew安装到任意位置。Homebrew使macOS更完整。使用gem来安装gems、用brew来安装那些依赖包。wget是一个从网络上自动下载文件的自由工具,支持
2021-09-22 15:01:44
437
原创 flutter中state生命周期与app生命周期与路由监听
State生命周期initStateinitState 是 StatefulWidget 创建完后调用的第一个方法,而且只执行一次,类似于 Android 的 onCreate、iOS 的 viewDidLoad(),所以在这里 View 并没有渲染,但是这时 StatefulWidget 已经被加载到渲染树里了,这时 StatefulWidget 的mounted的值会变为 true,直到dispose调用的时候才会变为 false。可以在initState里做一些初始化的操作。...
2021-08-27 10:13:16
2354
原创 kotlin学习笔记
kotlin官方学习网站:https://developer.android.google.cn/kotlin/add-kotlin.kt编译成.javatools--->kotlin--->Show Kotlin Bytecode-->DecompileKotlin 基础语法1.Var 与 Valvar 关键字: 可变变量var <标识符> : <类型> = <初始化值>// 可以改,可以读 get set 如:var i..
2021-08-04 15:44:48
255
转载 flutter单例设计模式
单例设计模式(Singleton Design Pattern) 理解起来非常简单。一个类只允许创建一个实例,那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。作为最简单的一种设计模式之一,对于单例本身的概念,大家一看就能明白,但在某些情况下也很容易使用不恰当。相比其他语言,Dart 和 Flutter 中的单例模式也不尽相同,本篇文章我们就一起探究看看它在 Dart 和 Flutter 中的应用。Flutter(able) 的单例模式一般来说,要在代码中使用单.
2021-08-02 14:03:25
524
1
原创 OkHttp使用与源码分析
OKhttp介绍https://square.github.io/okhttp/由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。支持HTTP/2并允许对同一主机的所有请求共享一个套接字 通过连接池,减少了请求延迟 默认通过GZip压缩数据 响应缓存,避免了重复请求的网络 请求失败自动重试主机的其他ip,自动重定向使用方法OKh..
2021-07-24 15:47:21
140
原创 Handler相关
什么是Handler机制在Android开发的过程中,会将耗时的一些操作放在子线程(work thread)中去执行,然后将执行的结果告诉UI线程(main thread),因为UI的更新要通过Main thread来进行(其实特殊子线程也可以更新UI)。那么这里就涉及到了如何将子线程的数据传递给主线程的问题。所以Android系统提供了一个消息传递的机制——Handler,可用于将子线程的数据传递给主线程,其实,Handler不仅仅能将子线程的数据传递给主线程,它能实现任意两个线程的数据传递。H
2021-07-20 17:29:15
672
1
原创 flutter中的动画基础知识
1.动画介绍Flutter中的动画系统基于Animation对象的,它不是一个Widget,这是因为Animation对象本身和UI渲染没有任何关系。Animation是一个抽象类,就相当于一个定时器,它用于保存动画的插值和状态,并执行数值的变化。widget可以在build函数中读取Animation对象的当前值, 并且可以监听动画的状态改变。2.在Flutter中有哪些类型的动画?在Flutter中动画分为两类:基于tween或基于物理的。补间(Tween)动画:在补间动画中,定义了开始
2021-07-09 14:25:10
1725
2
原创 flutter性能分析
官网文档地址:https://flutter.cn/docs/testing/ui-performance代码优化工具 : PerformanceOverlayA. 在 Flutter 项目中打开 PerformanceOverlay1.首先打开 PerformanceOverlay 工具,在 AndroidStudio -> Preference -> Language&Frameworks -> Flutter 中打开相应开关,如图:2.然后 run 我
2021-07-07 10:13:36
1919
1
原创 flutter异常处理
Dart代码运行时发生的异常与Java、kotlin、OC等具有多线程模型的编程语言不同,Dart是一门单线程的编程语言,采用事件循环机制来运行任务,所以各个任务的运行状态是互相独立的。也即是说,当程序运行过程中出现异常时,即使没有像Java那样使用try-catch机制来捕获异常,Dart程序也不会退出,只会导致当前任务后续的代码不会被执行,而其它功能仍然可以继续使用。异常捕获根据异常代码的执行时序,Dart异常可以分为同步和异步异常两类。首先我们看同步异常的捕获方式:同步异常的捕获方式
2021-07-06 14:46:32
1580
1
原创 Android知识总结
Android中Activity的四种LaunchMode和Intent 的flag的使用https://blog.csdn.net/haoxuhong/article/details/81297259对Android之事件分发机制的理解https://blog.csdn.net/haoxuhong/article/details/100110200Android中集合总结https://blog.csdn.net/haoxuhong/article/details/80576045
2021-07-05 15:24:43
84
1
转载 ConstraintLayout的使用
前言ConstraintLayout 是一个使用“相对定位”灵活地确定微件的位置和大小的一个布局,在 2016 年 Google I/O 中面世,它的出现是为了解决开发中过于复杂的页面层级嵌套过多的问题——层级过深会增加绘制界面需要的时间,影响用户体验,以灵活的方式定位和调整小部件。从 Android Studio 2.3起,创建layout文件就已经是默认ConstraintLayout了,但是尽管Google如此大力推这项技术,但在当时很少有人使用,近些年逐渐被大家拿起来,啊真香!(此处无图
2021-07-05 11:07:25
325
原创 Android-Flutter面试
分了五个模块java、Android、网络、dart、flutterjavaGC机制垃圾回收需要完成两件事:找到垃圾,回收垃圾。 找到垃圾一般的话有两种方法:引用计数法: 当一个对象被引用时,它的引用计数器会加一,垃圾回收时会清理掉引用计数为0的对象。但这种方法有一个问题,比方说有两个对象 A 和 B,A 引用了 B,B 又引用了 A,除此之外没有别的对象引用 A 和 B,那么 A 和 B 在我们看来已经是垃圾对象,需要被回收,但它们的引用计数不为 0,没有达到回收的条件。正因为这个循环引用
2021-07-02 10:45:24
635
Android 仿美团网实现左右滑动查看更多分类的功能
2019-01-15
Android中常见的弹框:Spinner、Dialog、PopupMenu、PopupWindow
2018-09-14
CollapsingToolbarLayout折叠toolbar的使用说明
2018-08-29
android中显示本地或网络GIF图片
2018-07-20
线程池demo
2018-07-05
android6.0权限管理封装demo
2018-05-15
ios直播打包好的真机IJKMediaFramework.framework
2018-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人