Dart与Flutter开发
文章平均质量分 93
Dart语言与Flutter框架相关文章
编程之路从0到1
这个作者很懒,什么都没留下…
展开
-
Flutter 热更新及动态UI生成
问题由于Dart语言在Flutter上关闭了反射,且本身依缺乏动态能力,因此在Flutter上实现热更新或动态UI较为困难。目前已有的一些动态方案:利用原生框架更新桥接动态脚本语言修改引擎(动态桥接增强版)XML/JSON配置UI以上方案,在我看来都不可取!原因这就来一一分析。利用原生框架更新,实际上就是更新Flutter框架相关的二进制。Flutter应用发布出来的产物主要包括 libflutter.so,libapp.so,flutterAssets,这样,就可以通过Android端原创 2021-05-12 03:18:37 · 2451 阅读 · 3 评论 -
Flutter 网络请求库之Gio
在Flutter开发中,常用网络请求库有dio和http两个,但它们有时候并不能完全满足我们的需求,因此我开发了这个网络请求库。首先,我为什么不直接fork已有的库添加新的功能,而要自己从头开发一个这样的库呢?一方面我觉得目前最热门的dio的代码写得并不直观,并不适合添加我设想的新特性,另一方面,别人的项目自己也无法掌控走向,索性自己撸一个。是一个功能强大的Dart HTTP请求库,它提供链式调用拦截器,通过它我们可以实现许多功能。原创 2023-04-12 22:02:05 · 401 阅读 · 1 评论 -
开发一个APP多少钱?
开发一个APP要多少钱?相信不光是客户有这个疑问,就算是一般的程序员也想知道答案。很多程序员想在业余时间接外包挣外快,但是他们常常不知道该如何定价,如何有说服力的要价。这是因为没有一套好的计算APP开发成本的方法。由于国内没有公开的数据,而且大家对于报价都喜欢藏着掖着,这里我们就整理了国外一些软件外包平台的资料,帮助大家对Flutter APP开发成本有一个直观而立体的认识。(注意,这里是以美元单位计算,请不要直接转换为RMB,应当根据消费力水平来衡量)跨平台项目正在慢慢取代原生应用程序的开发。原创 2022-11-26 11:55:22 · 952 阅读 · 0 评论 -
Flutter 的键值存储数据库
键值存储是开发中十分常见的需求,在Flutter开发中,一般使用 shared_preferences 插件来实现。shared_preferences 本质上就是将键值对保存到一个XML文件中进行持久化。而shared_preferences 实际上存在一定缺陷,譬如其性能较差,不适合处理大量数据,不能创建新的XML文件,所有数据存在同一个文件中。除此外,还有其他一些持久化方案,如SQLite、Hive等。SQLite是关系型数据库,使用起来相对繁琐;.........原创 2022-08-08 00:02:44 · 612 阅读 · 0 评论 -
为什么是 Dart ?
为什么是 Dart ?为什么选择Dart语言,这是很多人的疑问,让我们先来看看,最近Dart 编程语言的发展情况:2022年2月TIOBE编程语言排行榜:很遗憾,Dart在前20名之外,但好消息是它还处于前30名之内!在这个排行榜中,值得我们注意的是Dart语言仍然处于Kotlin之上,虽然优势并不明显。让我们再来看一看 IEEE Spectrum 最新发布的2021年度的编程语言排行榜 Top Programming Languages 2021在IEEE Spectrum 的榜单中,Dar原创 2022-02-15 21:41:06 · 2480 阅读 · 0 评论 -
公布Windows版Flutter
公布Windows版Flutter构建高质量的Windows应用程序,并在移动和web上运行自从我们推出Flutter以来,我们一直专注于提供一个跨平台的解决方案,以获得漂亮的、定制的应用程序,这些应用程序被编译为机器代码,并充分利用您的设备的底层图形硬件。今天是这一愿景的重大扩展,我们首次发布了对Windows作为应用目标的支持,使Windows开发者能够受益于移动开发者所享有的同样的生产力和力量。我们在Flutter上的目标是为您提供构建良好体验所需的工具,无论您在哪个操作系统上构建。因此,我们翻译 2022-02-04 14:34:00 · 697 阅读 · 0 评论 -
Flutter 超简单状态管理
Flutter 状态管理目前Flutter已经有许多状态管理的方案,但就我个人而言,并不能完全满足我的要求。我希望状态管理更加简单,而不是成为负担,我希望状态管理更加可靠,而不是使用过于复杂的实现。譬如目前最为简洁的get库,为了实现一些黑科技语法糖,其实现就较为复杂。我们知道一台机器越复杂,可靠性就会降低。道理就如同在一些动乱地区,非常流行一些傻大黑粗的皮卡车,结构简单,皮实耐用。为了兼具简洁和可靠性,同时摆脱对InheritedWidget的限制,我使用注解和依赖注入库来实现,原理上类似Bloc,但原创 2021-12-03 22:46:03 · 3278 阅读 · 0 评论 -
Dart 全栈之服务端
Dart 的服务端开发本文是博主《Flutter全栈式开发》系列课程的拓展。我们在Flutter课程中,编写了一个注册登录案例,详细讲解了常见的注册、登录、API接口鉴权功能,前后端是如何配合实现的。其中后台服务使用了Dart语言中较为知名的aqueduct框架。近来由于Dart版本迭代过于频繁和激烈,尤其是不兼容的空安全特性,导致课程中使用的服务端框架aqueduct停止维护。维护该框架的公司没有多余的精力使之兼容新版本,目前亦无社区接手项目,可能永久停止。相继的,Dart的第二大服务端框架angel原创 2021-10-18 14:48:39 · 1816 阅读 · 1 评论 -
全网最简单的Flutter Navigator2.0路由指南
准备关于Flutter路由的一些原理,可以阅读我们之前的文章《Flutter 路由源码剖析》,本文我们主要来学习一下Navigator2.0的用法。为了演示Navigator2.0的用法,这里准备了一个简单案例,项目下载 访问这里。nav_demo目录是一个使用Navigator1.0的示例,总共4个页面,分别是:splash、login、home、details代码结构如下:核心代码:class MyApp extends StatelessWidget { const MyApp({原创 2021-10-09 22:49:33 · 2372 阅读 · 1 评论 -
Flutter 最佳扫码插件——自定义视图
之前封装了Flutter扫码插件后,许多人希望能提供自定义视图的支持,于是将flutter_scankit 升级到v1.2。关于该插件的介绍以及基础用法,请查看上一篇《Flutter 最佳扫码插件》自定义视图使用插件库提供的ScanKitWidget作为扫码控件,建议用Stack布局组合其他控件实现自定义视图。在创建ScanKitWidget时,必须实现其回调函数callback,该回调返回一个ScanKitController,用于调用与扫码相关的功能。 ScanKitWidget(原创 2021-09-13 10:48:21 · 2551 阅读 · 6 评论 -
LuaDardo中Dart与Lua的相互调用
本系列相关文章:Flutter 热更新及动态UI生成Lua 15分钟快速上手(上)Lua 15分钟快速上手(下)Lua与C语言的互相调用Lua C APILua C API主要是指一系列以lua_开头的C语言函数(也可能是宏函数)。Lua的定位是一门强大、高效、轻量级的可嵌入脚本语言。为了很方便地嵌入到其他宿主(Host)环境中,Lua核心是以库(Library)的形式被实现的,其他应用程序只需要链接Lua库就可以使用Lua提供的API轻松获得脚本执行能力。Lua 3.1引入了lua_Sta原创 2021-08-11 00:10:23 · 1403 阅读 · 1 评论 -
Lua与C语言的互相调用
Lua底层是C语言开发的,在设计时就考虑到了与C语言的互操作性。可以把Lua作为一种独立的语言或者作为一种嵌入式的脚本语言。有许多游戏和其他应用程序利用Lua作为脚本语言。在本文中,我们将重点探讨如何将Lua嵌入到C或C++应用程序中,作为胶水脚本存在。虽然此文只关注C语言的API,但在LuaDardo项目中,这些C API并没有做根本改变,只是在命名规范上做了适应Dart语言的变化(驼峰命名法)。简单说,LuaDardo基本是兼容这些API的。使用 C APILua的C语言API是高效和轻量级的。在原创 2021-08-09 19:18:47 · 6042 阅读 · 3 评论 -
Lua 15分钟快速上手(下)
Lua 15分钟快速上手(上)进阶语法篇迭代器迭代器(iterator)是一种可以让我们遍历一个集合中所有元素的代码结构。在Lua语言中,通常使用函数表示迭代器:每一次调用函数时,函数会返回集合中的“下一个”元素。泛型for迭代器泛型for在自己内部保存迭代函数,实际上它保存三个值:迭代函数、状态常量、控制变量。语法格式如下:for var-list in exp-list do bodyendvar-list是由一个或多个变量名组成的列表,以逗号分隔;exp-list是一个或多个原创 2021-08-09 13:29:17 · 839 阅读 · 0 评论 -
Lua 15分钟快速上手(上)
在之前的博客《Flutter 热更新及动态UI生成》一文中,通过编写LuaDardo虚拟机,大致介绍了在Dart语言之上开发Lua虚拟机给Flutter提供动态能力的方案,但Lua语言流行并不算广泛,许多人对小巧精湛的Lua语言缺少了解,认为将Lua替换为JavaScript语言更好。为此,我特别整理了两篇Lua语言的快速上手指南,相信充分学习了解后,会认同在特定需求场景下,小巧简洁的Lua将更具“胶水”优势。基础语法篇注释单行注释多行注释-- 单行注释,使用两个减号--[[多行注释原创 2021-08-08 16:30:01 · 2072 阅读 · 1 评论 -
最简单的Flutter权限管理插件
文章目录用法配置权限AndroidiOS检查权限请求权限处理回调例子这是Flutter上的一个动态权限处理的插件库,可以让Flutter应用层的开发者以非常简单的API统一处理原生的动态权限。它封装了关于权限的检查、请求,以及权限被永久拒绝时,适当的拉起系统设置页面,提示用户手动打开权限。几乎想不到拒绝使用它的理由。仓库地址: flutter_easy_permission Android iOS用法配置权限检查权限。当调用一些需要权限的API时,应先检查是否具有相关权限请求权限。原创 2021-05-02 23:15:36 · 1573 阅读 · 0 评论 -
Flutter 最佳扫码插件
长期以来,Flutter都缺乏一个简单易用,功能强大的二维码、条形码等扫码库,需要既能支持相机扫码,也能支持本地图片码识别。为了解决这个问题,我考察了原生的扫码生态,选取了功能强大的HUAWEI ScanKit SDK,对它进行了Flutter插件包封装。...原创 2021-05-02 23:03:31 · 3840 阅读 · 8 评论 -
Flutter 路由源码剖析
文章目录Flutter 路由源码剖析根路由初始化流程路由栈操作剖析相关类总结NavigatorOverlayOverlayEntryRoute自定义悬浮框路由视频课程Flutter 路由源码剖析路由页面的简单树形结构,仅包含关键控件根路由初始化流程我们知道MaterialApp实际上是对WidgetsApp的包装,而WidgetsApp是一个有状态的Widget,这里查看它的State.build实现,主要是构建了Navigatorflutter\lib\src\widgets\app.dart原创 2020-08-05 14:24:12 · 1286 阅读 · 0 评论 -
Flutter 页面更新流程剖析
文章目录Flutter页面更新流程剖析更新流程渲染过程视频课程Flutter页面更新流程剖析更新流程当我们需要更新页面时,会调用setState方法,这里我们就以之为突破口,研究一下页面更新的流程。flutter\lib\src\widgets\framework.dart/// [State]void setState(VoidCallback fn) { final dynamic result = fn() as dynamic; _element.markNeedsBuild原创 2020-08-05 14:20:32 · 1080 阅读 · 0 评论 -
Flutter 事件处理源码剖析
Flutter 事件处理源码剖析事件都是由硬件收集起来的,然后传递给系统处理。在Flutter中,则是由平台层传递给Flutter引擎,再由引擎通知给上层应用处理。在ui.Window类中,通过onPointerDataPacket回调来通知上层。事件的分发结合前面的启动流程分析,我们知道Flutter框架层的事件源头在GestureBinding中,找到initInstances方法实现/// [GestureBinding] void initInstances() { sup.原创 2020-08-05 14:18:12 · 794 阅读 · 0 评论 -
Flutter 自定义控件之RenderObject
文章目录使用RenderObject 自定义控件布局原理自定义示例自定义RenderObject自定义Widget使用自定义布局其他示例总结视频课程使用RenderObject 自定义控件前面课程已经讲了使用Canvas自绘控件,为什么还需要了解使用RenderObject 自定义控件呢?两种有什么区别?Canvas主要是进行底层绘制的,是最基础的一环。有时候一个控件除了绘制,还需要处理布局和事件,我们如果直接使用Canvas,就需要自己处理这些异常麻烦的事情,而Flutter的控件体系正是实现了这样原创 2020-08-05 14:15:31 · 2479 阅读 · 0 评论 -
Flutter框架层启动源码剖析
文章目录Flutter框架层启动源码剖析WidgetsBinding 初始化构建Element和RenderObject树执行渲染小结总结视频课程Flutter框架层启动源码剖析PS: 剖析源码版本为Flutter 1.18入口函数,其主要作用是注入给定的小控件并将其附加到屏幕上。void runApp(Widget app) { WidgetsFlutterBinding.ensureInitialized() ..scheduleAttachRootWidget(app) .原创 2020-08-05 14:11:53 · 1064 阅读 · 0 评论 -
Flutter 框架实现原理
文章目录Flutter 框架实现原理UI 构建原理WidgetElementRenderObjectLayerUI构建过程视频课程Flutter 框架实现原理简版架构图Framework:一个纯 Dart代码的 SDK。它实现了一套基础库, 包含动画、绘制和手势处理。并基于绘制封装了一套Widget控件库,这套控件库还根据 Material 和Cupertino两种设计风格进行了风格化区分。Engine:一个 C++实现的 SDK。其包含了 Skia引擎、Dart运行时、文字排版引擎等。在安卓.原创 2020-08-05 14:02:31 · 2554 阅读 · 1 评论 -
Flutter 大小单位详解
关于Flutter 大小所使用的单位,官方文档没有给出非常明确的解释,因此一直存在模糊的说法,许多从事安卓开发者直接将之解释为安卓开发所用的单位dp,我认为这是非常不明智且不准确的说法,这个不准确不在于实质的数值,而在于概念的混淆!这样极容易对初学者造成误导,从事web前端或iOS原生开发的人,并没有dp的概念,当他们学习Flutter时,必须强行去理解dp的概念,且在iOS或web平台上时也解释为dp,那就是错误的。我们应当如何理解Flutter 的大小单位?官方文档中有对 devicePixelRa原创 2020-06-22 20:34:01 · 4601 阅读 · 4 评论 -
Dart 网络编程
Dart 网络编程以下提供Dart 关于网络编程方面的各种代码示例,对于具体的协议方面知识,请自行学习。TCP 服务端import 'dart:convert';import 'dart:io';void main() { //绑定本地localhost的8081端口(即绑定:127.0.0.1) ServerSocket.bind(InternetAddress.loop...原创 2020-02-07 19:48:00 · 2514 阅读 · 0 评论 -
Flutter 安卓平台源码剖析(一)
文章目录前言启动流程入口Activity环境初始化创建 splash viewApplication启动Java层与Flutter引擎关联运行Dart代码总结欢迎关注我的公众号:编程之路从0到1前言做技术,只有弄懂了原理,才能遇事不慌,手中无码,心中有码。这篇文章主要研究Flutter 在安卓平台上的启动流程源码。启动流程入口Activity当我们创建一个Flutter app工程时,打...原创 2019-09-07 13:12:45 · 3421 阅读 · 0 评论 -
Flutter 新零售电商App UI界面设计与开发
文章目录前言四个主页仿淘宝详情页店铺订单详情登录欢迎关注我的公众号:编程之路从0到1前言使用Flutter开发跨平台UI界面,快速高效,可谓神器。网上关于Flutter入门博客已不少了,但编写的一些Demo界面过于简单,尤其是布局,与实际项目相去较远,这里将我自己学习过程中编写的界面整理后分享给大家,主要是UI界面的搭建,不包括太多业务逻辑,希望对大家学习Flutter UI编写起到一定帮助作...原创 2019-08-01 20:49:06 · 4920 阅读 · 2 评论 -
Flutter App打包为桌面端程序
到目前为止,Flutter仍然没有在桌面端发力,但仍然提供了直接将Flutter App项目打包到桌面端的途径。在我们看来,这更像一种实验性质的尝试。无论如何,我还是相信Flutter在跨平台UI方面的优秀表现,现在就让我们来体验一下Flutter在桌面上的表现吧。直接使用 flutter-desktop-embedding 打包体验并不友好,像很多其他的框架一样,我们需要一个脚手架来辅助,这里...原创 2019-06-10 16:01:26 · 7063 阅读 · 0 评论 -
Flutter中快速导入大量iconfont资源
flutter_iconfonthttps://www.iconfont.cn/ 为我们提供了海量的矢量图标资源,在Flutter中使用这些资源也还方便,但是在下载大量资源后,仍然需要手动做一些事情,这不符合程序员能偷懒就偷懒的精神,所以我做了这个简单工具,希望对大家有所帮助。flutter_iconfont 传送门使用说明使用git clone 或者直接download zip文件到...原创 2019-05-23 18:45:42 · 1122 阅读 · 0 评论 -
Dart 语言Stream详解
文章目录异步之 Stream 详解什么是Stream单订阅流创建 StreamperiodicfromFuturefromFuturesfromIterablevalue监听 StreamStream 的一些方法take 和 takeWhileskip 和 skipWhiletoList属性 lengthStreamController广播流StreamTransformer总结关注我的公众号:编...原创 2019-09-15 21:46:23 · 5826 阅读 · 4 评论 -
Dart 调用C语言混合编程
Dart 调用C语言本篇博客研究Dart语言如何调用C语言代码混合编程,最后我们实现一个简单示例,在C语言中编写简单加解密函数,使用dart调用并传入字符串,返回加密结果,调用解密函数,恢复字符串内容。环境准备编译器环境如未安装过VS编译器,则推荐使用GCC编译器,下载一个64位Windows版本的GCC——MinGW-W64下载地址如上,它有两个版本,sjlj和seh后缀表示异常处...原创 2019-05-17 21:05:25 · 6156 阅读 · 5 评论 -
Flutter 中使用svg资源
svg作为一种矢量图,在屏幕适配方面具有很大优势,且不需放多套资源,能在一定程度减小包的体积大小。但是想在Flutter中直接使用svg资源,却并不是非常方便,这里介绍一种简洁的方式来使用svg矢量图,前提是需要转换,转换并不保证完全等同原图,请自行验证。在线转换首先准备好几张svg资源将资源拖拽上传到 http://fluttericon.com/网站上传完成后,点击【DOWNLOA...原创 2019-05-06 21:57:12 · 6751 阅读 · 0 评论 -
Dart 异步编程详解
文章目录Dart 异步编程Dart 的事件循环调度任务延时任务Future 详解创建 Future注册回调async 和 awaitIsolatespawnUrispawn使用场景Dart 异步编程编程中的代码执行,通常分为同步与异步两种。简单说,同步就是按照代码的编写顺序,从上到下依次执行,这也是最简单的我们最常接触的一种形式。但是同步代码的缺点也显而易见,如果其中某一行或几行代码非常耗时,...原创 2019-05-05 13:18:50 · 5167 阅读 · 6 评论 -
Dart语言——45分钟快速入门(下)
类和对象类的定义// Dart中定义一个类class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; }}Dart中的类与Java中的相似,不同的是,Dart中没有private、public这些成员访问修饰符...原创 2019-03-23 00:38:17 · 7487 阅读 · 5 评论 -
Dart语言——45分钟快速入门(上)
文章目录环境准备安装Dart SDK配置环境变量配置 VSCode 编辑器测试环境基础语法代码注释内置数据类型变量与常量定义变量定义常量内置类型的常用操作数值类型字符串布尔类型列表映射函数定义函数函数的参数命名可选参数位置可选参数匿名函数箭头函数运算符算术运算符类型判定运算符条件表达式级联运算符条件成员访问符分支与循环条件分支循环语句基本循环特有循环关注我的公众号:编程之路从0到1环境准备安装...原创 2019-03-23 00:31:23 · 28715 阅读 · 3 评论 -
Dart 语言标准流与文件操作
文章目录标准输入输出流文件操作写文件读文件文件的其他操作关注我的公众号:编程之路从0到1标准输入输出流stdinstdoutstderr// 导入io包import 'dart:io';void main() { // 向标准输出流写字符串 stdout.write('root\$:'); // 从标准输入流读取一行字符串 var input = stdin.r...原创 2019-09-16 00:30:48 · 5774 阅读 · 0 评论