flutter
文章平均质量分 75
二蛋和他的大花
喜欢电脑,喜欢创新。
展开
-
跟我学企业级flutter项目:简化框架demo参考
最近很多人在问我,没有一个不错的demo,不会如何做单工程模式,如何封装网络请求,如何去做网络持久化。那么今天我将demo分享出来。现阶段还无法把我构建的flutter快速开发框架开源出来。暂时用简化demo来展示。...原创 2022-07-01 11:07:40 · 551 阅读 · 1 评论 -
flutter简单优秀的开源dialog使用free_dialog
今天我来介绍一款简单,易用的dialog,该dialog比较简洁,可以适应很多app(主要没有其他动画及以外的图片等,黑白风格可以适配多种样式的app)。如果你的app急需一款不错的dialog,并且你懒得开发,那么用这款就对了。......原创 2022-06-10 16:57:09 · 696 阅读 · 0 评论 -
跟我学企业级flutter项目:如何重新定制cached_network_image的缓存管理与Dio网络请求
flutter中需要展示网络图片时候,不建议使用flutter原本Image.network(),建议最好还是采用cached_network_image这个三方库。那么我今天就按照它来展开说明,我再做企业级项目时如何重新定制cached_network_image。由于我的项目网络请求采用Dio库,所以我希望我的图片库也采用Dio来网络请求,也是为了方便请求日志打印(在做APM监控时候可以看到网络请求状态,方便定位问题)。准备好mime_converter类,由于cached_network_image中原创 2022-06-01 11:09:45 · 1028 阅读 · 0 评论 -
跟我学企业级flutter项目:如何将你的项目简单并且快速屏幕自适应
你的flutter在小屏幕手机上出现文字丢失了么?你的flutter应用在小屏幕手机上排版出错了么?你的flutter应用在大屏幕手机上布局错乱了么?你在用flutter_screenutil做屏幕自适应么?今天我来给大家介绍一款简单不侵入代码的自适应。如果你有如下需求:1. 旧的flutter想快速屏幕适应各种手机2. 页面代码中不想增加关于适配屏幕的代码原创 2022-05-16 16:20:52 · 447 阅读 · 2 评论 -
深入浅出 Flutter Framework 之 PipelineOwner
OverviewPipelineOwner在 Rendering Pipeline 中起到重要作用:随着 UI 的变化而不断收集『 Dirty Render Objects 』 随之驱动 Rendering Pipeline 刷新 UI简单讲,PipelineOwner是『RenderObject Tree』与『RendererBinding』间的桥梁,在两者间起到沟通协调的作用。关系如上图:RendererBinding创建并持有PipelineOwner实例,Code1-第8转载 2022-05-10 16:07:11 · 276 阅读 · 0 评论 -
深入浅出 Flutter Framework 之 PaintingContext
Overview『 Widget 』—『 Element 』—『 RenderObject 』可称之为 Flutter Framework『三剑客』,其中 Widget、Element 都已介绍过,而 RenderObject 在这三者中属于最核心、最复杂的,涉及 Layout、Paint 等核心流程。 为了更好、更流畅地去理解 RenderObject,在正式介绍之前,需要做些准备工作,本文介绍的 PaintingContext 在 RenderObject 的绘制流程上扮演了重要角色。『Pain转载 2022-05-10 14:44:48 · 359 阅读 · 0 评论 -
深入浅出 Flutter Framework 之 Layer
Overview前面的文章中我们介绍过在 Flutter build、layout、render 过程中会生成 3 棵树:Element Tree RenderObject Tree Layer Tree可以说 Layer Tree 是 Flutter Framework 最终的输出产物,之后的流程就进入到 Flutter Engine 了。如上图:在build过程中,由 Element Tree 生成 RenderObject Tree (在 深入浅出 Flutter Frame转载 2022-05-10 14:32:46 · 459 阅读 · 0 评论 -
深入浅出 Flutter Framework 之 BuildOwner
OverviewBuildOwner在 Element 状态管理上起到重要作用:在 UI 更新过程中跟踪、管理需要 rebuild 的 Element (「dirty elements」); 在有「dirty elements」时,及时通知引擎,以便在下一帧安排上对「dirty elements」的 rebuild,从而去刷新 UI; 管理处于 "inactive" 状态的 Element。这是我们遇到的第一个 Owner,后面还有PipeOwner。整棵「Element Tree」共转载 2022-05-10 14:23:49 · 248 阅读 · 0 评论 -
跟我学flutter:细细品Widget(五)Element
Widget是描述一个UI元素的配置数据,Element才真正代表屏幕显示元素原创 2022-05-09 16:35:43 · 298 阅读 · 0 评论 -
跟我学flutter:细细品Widget(四)Widget 渲染过程 与 RenderObjectWidget
前言StatelessWidget 和 StatefulWidget 只是用来组装控件的容器,并不负责组件最后的布局和绘制。在 Flutter 中,布局和绘制工作实际上是在 Widget 的另一个子类 RenderObjectWidget 内完成的。RenderObjectWidget为RenderObjectElement提供配置信息。RenderObjectElement包装了RenderObject,RenderObject为应用程序提供真正的渲染。源码abstract class Rend原创 2022-05-05 15:48:29 · 1255 阅读 · 0 评论 -
跟我学flutter:细细品Widget(三)ProxyWidget,InheritedWidget
前言ProxyWidget作为抽象基类本身没有任何功能,但他有两个实现类ParentDataWidget & InheritedElement源码abstract class ProxyWidget extends Widget { const ProxyWidget({ Key? key, required this.child }) : super(key: key); final Widget child;}ParentDataWidgetParentData原创 2022-04-27 17:57:08 · 509 阅读 · 0 评论 -
跟我学企业级flutter项目:flutter模块化,单工程架构模式构思与实践
在原生Android开发的时候,我们经常会用到ARouter,来设计我们项目的整体架构。因为ARouter会帮助我们实现模块化的思想,那么在Flutter中如何去构建模块化的架构呢?再深入一点,如何去运行一个单一模块,不去跑整体项目呢?本篇文章将会带你学习Flutter版本下的单工程架构模式。原创 2022-04-26 17:06:10 · 2818 阅读 · 7 评论 -
跟我学flutter:细细品Widget(二)StatelessWidget&StatefulWidget
StatelessWidget和StatefulWidget是Flutter开发必不可少的。两者的区别在于state。有状态的widget需要继承StatefulWidget无状态的需要继承StatelessWidget。原创 2022-04-25 17:42:20 · 910 阅读 · 0 评论 -
跟我学flutter:细细品Widget(一)Widget&Element初识
前言Everything’s a widget!WidgetFlutter 中 Widget是一个“描述一个UI元素的配置信息”,Widget就是接受元素,而不是真是绘制的显示元素。类比原生的Android开发,Widget更像是负责UI配置的xml文件,而非负责绘制组件的View。 当一个Widget状态发生变化时,Widget就会重新调用build()函数来返回控件的描述,过程中Flutter框架会与之前的Widget进行比较,确保实现渲染树中最小的变动来保证性能和稳定性。换句话说,当Widge原创 2022-04-22 16:49:01 · 1564 阅读 · 0 评论 -
跟我学flutter:Flutter雷达图表(一)如何使用kg_charts
本节主要讲如何使用kg_charts中的雷达图表,来绘制一个雷达图,下一章节则会对如何绘制一个可点击雷达图表进行详细说明。最近我在开发有关雷达图表的的业务,但的确在线上找不到可以快速集成的雷达图表,找到一篇文章(Flutter雷达图package)但不是很好定制化我们的业务,但其中的代码有比较好的借鉴。然后我借鉴了部分代码,进行了kg_charts的开发。原创 2022-04-21 11:03:50 · 1571 阅读 · 0 评论 -
跟我学flutter:在国内如何发布自己的Plugin 或者 Package
前言平时在做flutter Plugin或者 Package的时候,如果觉得自己做的还不错,想要分享到PUB库上如何操作?虽然官方已经告诉我们如何操作,但是呢由于一些特殊的原因,采用官方的方式并不能上传到PUB库上,今天就跟着我学习一下如何上传pub库吧。准备开始开始前需要你已经有一个已经开发好的库来进行提交了。比如我的这个如图红色箭头表示的是必须要存在的两个文件,如果没有的话,需要添加你的开源协议。编写你的README文档。开源协议和README我就不做介绍了,咱们来看看yaml文件需要什么原创 2022-04-20 15:44:25 · 2190 阅读 · 0 评论 -
跟我学flutter:我们来举个例子通俗易懂讲解异步(一)ioslate
前言Dart是单线程的,Dart提供了Isolate,isolate提供了多线程的能力。但作为多线程能力的,却内存不能共享。但同样的内存不能共享,那么就不存在锁竞争问题。举个例子来展示作用如果一段代码执行事件很长,flutter如何开发。基本页面代码(一段代码)ElevatedButton( child: Text("登录"), onPressed: () { 执行运行代码(); }原创 2022-03-29 21:28:50 · 2114 阅读 · 0 评论 -
跟我学flutter:我们来举个例子通俗易懂讲解dart 中的 mixin
与java&kotlin不同的是,dart中有一个特殊的关键字mixin(mix-in),用这个关键字的类被其他类(包含)的时候,其他类就拥有了该类的方法。这样代码不通过继承(extend)就可以重用。原创 2022-03-24 16:20:24 · 2586 阅读 · 0 评论 -
跟我学企业级flutter项目:手把手教你制作一款低耦合空页面widget
前言如何开发一款易用的,并且可以扩展的空页面呢?那么今天我将带领大家手把手开发一款可扩展的空页面。开发前注意事项1、定义好空页面状态2、可扩展思想(用抽象或基类替代实体)3、抽离出空页面的结构空页面展示开始搭建一、页面分析空页面需要元素有:展示图片展示文案展示刷新按钮页面功能点:文案可自定义图片可自定义按钮可隐藏wiget作用范围:可包裹其他widget不包裹其他widget二、定义状态2.1 几种状态enum EmptyStatus { fai原创 2022-03-21 17:25:39 · 1544 阅读 · 1 评论 -
跟我学企业级flutter项目:如何封装一套易用,可扩展的Hybrid混合开发webview
Flutter作为基础的应用,如果要在flutter 中嵌入webview 去做Hybrid混合开发,咱们就必须要封装一套易用的webview,但网上关于flutter webview的文章极其的少。但的确也有做封装的文章,但是封装手法不够优雅,封装效果不够扩展。于是我打算把我的封装与大家分享,看我如何做到高扩展,高易用性。原创 2022-03-16 20:01:07 · 2712 阅读 · 0 评论 -
跟我学企业级flutter项目:如何用dio封装一套企业级可扩展高效的网络层
前言网上有很多,比如说“Flutter Dio 亲妈级别封装教程”这篇文章,该文章上有几点问题:重试机制代码错误token存取耦合很高网络请求只能针对单一地址进行访问网络请求缓存机制也不是很完美。一旦依照这样的封装去做,那么项目后期的扩展性和易用性会有一定的阻碍,那么如何做到token存取无耦合,而且还能让app多种网络地址一同请求,还可以做到针对不同请求不同超时时长处理,网络缓存还加入可自动清理的lru算法呢?那么今天这篇文章为你揭晓企业级flutter dio网络层封装。搭建前夕准备原创 2022-02-28 16:20:23 · 4178 阅读 · 9 评论 -
庖丁解牛:Android stuido中 git 操作详解
前言在开发flutter或android项目,选择用Android stuido是比较方便的,在git的可视化使用上,Android studio已经非常方便了,但是还是有很多的小伙伴,依旧用其他工具来管理git。那么今天我就来详细的介绍一下 Android stuido的git使用与操作。一、基本认知工作区项目目录下的文件可以称之为工作区暂存区添加文件git的基本使用是add到暂缓区,commit到本地仓库,push到远程仓库。...原创 2022-02-23 17:00:38 · 2797 阅读 · 0 评论 -
Flutter线上监控说明
概要移动端Apm系统作用:1、我们可以快速定位到线上App的实际使用情况,了解到App的奔溃、异常数据,从而针对潜在的风险问题进行预警,并进行相应的处理。2、了解App的真实使用信息,提高用户使用黏性。一、移动端常用apm指标1、崩溃率崩溃分析,是将 Android 和 iOS 平台常见的 APP 崩溃问题进行归类分析,帮助企业根据崩溃指标快速发现、定位问题。\2、UI卡顿拿Android来说:大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。Android系统每隔大概16.6原创 2022-01-27 11:57:39 · 2351 阅读 · 0 评论 -
跟我学企业级flutter项目:dio网络框架增加公共请求参数&header
前言在开发过程中,我们经常会用到网络请求,在flutter框架中,dio框架非常不错,所以今天的文章在dio的基础上搭建一套网络持久化框架,那么在flutter项目中如何搭建一套,高可用性,维护性较高的dio公共请求参数框架呢?搭建前夕准备一、基本认知要持久化那么必然要有存储设备持久化的数据在app启动后要即使填充到项目中由于项目中网络请求地址繁多,类型不同,需要持久化的位置不同二、基于基本认知来找合适的工具&必要点2.1 持久化的工具:我的推荐mmkvshare_pre原创 2022-01-26 14:08:25 · 3257 阅读 · 2 评论 -
跟我学企业级flutter项目:用bloc手把手教你搭建用户认证系统
前言在以flutter为底的app项目中,用户登录,退出等认证必须做在flutter项目里,那么采用何种状态管理,来全局管理用户认证呢?今天我就借助flutter_bloc这个库来搭建一套可以复用的成熟用户认证系统搭建前夕准备一、我们需要了解现有app有多少认证事件,那么常规来说,流程如下:1、启动app,判断有无token,有token则跳转首页获取数据,无token则跳转需要授权页面如登录页2、登录页登录,登陆后保存token,跳转首页3、退出登录,删除token跳转需要授权页那么总结起原创 2021-12-16 10:53:29 · 3876 阅读 · 16 评论 -
其他都是错的,只有这一篇正确解决:Flutter Textfield长按报错修复:NosuchMethodError: The getter ‘pasterButtonLabel‘ was ca
正确解决:Flutter Textfield长按报错修复:NosuchMethodError: The getter ‘pasterButtonLabel’ was ca ?????????为什么叫正确解决??关于这个问题,我在百度上看过很多人的答案,基本无一例外都是,说:“Cupertino缺少了对应的非英文版本的支持”。大家真的看过源码吗?真的是缺少Cupertino么?我是真不相信的,flutter出了这么多年,连个中文都不支持?然后我就查阅了源码:我发现了这个类 GlobalCupertin原创 2021-12-10 14:17:52 · 1959 阅读 · 0 评论 -
flutter 线上apm监控 远程日志 emas_tlog
emas_tlogali emas tlog阿里巴巴flutter版本 远程日志 TLog介绍远程日志服务提供远程手机日志拉取功能,解决移动App线上异常排查困难的问题。远程日志服务支持Android/iOS应用类型。产品架构1.移动App集成SDK。2.远程日志服务通过心跳探测识别已安装App的移动终端,并进行日志拉取配置。3.远程日志服务拉取指定移动终端App的用户日志,并对拉取任务进行管理。4.远程日志服务查看已从终端设备拉取至控制台的用户日志。官网地址:官网地址本项目是根据原创 2021-11-25 15:31:07 · 2170 阅读 · 0 评论 -
flutter 优秀dio网络拦截可视化
flutter_interceptorflutter dio 拦截器开始集成dependencies: flutter_interceptor: ^0.0.1dio添加拦截器_dio.interceptors.add(UiNetInterceptor())页面插入浮动窗体Overlay.of(context)?.insert(InterceptorDraggable());功能介绍:1、请求可视化2、可以复制请求内容集成后的效果如图...原创 2021-11-02 16:33:32 · 1586 阅读 · 9 评论 -
flutter 优秀日志库 ulog
ulogulog的想法和代码风格,设计方式与 Android logger库几乎无差别,差别在于ulog第一个版本不支持文件打印,但支持动态json库配置库源码:https://github.com/smartbackme/ulogv0.0.1只有基础的console打印,后面将会增加文件打印开始使用添加库dependencies:flutter_ulog: ^0.0.1//Initialization//构建基础adapter isLoggable可以通过不同type来拦截打印,或者关闭原创 2021-09-18 15:37:50 · 882 阅读 · 0 评论