<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>gualeyizhenfeng</title>
        <link>https://paragraph.com/@gualeyizhenfeng</link>
        <description>undefined</description>
        <lastBuildDate>Thu, 03 Sep 2026 17:46:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>gualeyizhenfeng</title>
            <url>https://storage.googleapis.com/papyrus_images/377dddb95b99373983a810e357f751cb83182e9d9533eee33d789c181cef1926.png</url>
            <link>https://paragraph.com/@gualeyizhenfeng</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Flutter，更高效、更实用的跨端开发选择]]></title>
            <link>https://paragraph.com/@gualeyizhenfeng/flutter</link>
            <guid>X7jfF6xQpRFmk3FuDNPp</guid>
            <pubDate>Sun, 14 May 2023 07:59:40 GMT</pubDate>
            <description><![CDATA[更高效、更实用的跨端开发选择为什么说 flutter 是一个强大的跨端框架？Flutter 是一个基于 Dart 编程语言的移动应用程序开发框架，由 Google 开发。它的强大之处在于它可以快速构建高性能、美观、灵活的跨平台应用程序，适用于 Android、iOS、Web、Windows、macOS 和 Linux 等多个平台。以下是 Flutter 成为强大的跨端框架的一些原因： ▶ 快速开发：Flutter 采用热重载技术，可以快速地进行应用程序开发、调试和修改，缩短了开发周期，提高了开发效率。 ▶ 高性能：Flutter 使用自己的渲染引擎，可以提供极快的渲染速度和响应性能，满足用户的高效、流畅体验。 ▶ 灵活性：Flutter 具有高度的灵活性，可以通过自定义小部件来构建任何类型的用户界面，包括动画、图像、视频等等。 ▶ 统一的开发体验：Flutter 提供了一致的开发体验，无论是在 Android 还是 iOS 上进行开发，都可以使用相同的代码库和开发工具，减少了开发人员的学习成本和部署成本。 ▶ 跨平台支持：Flutter 支持多个平台，可以在不同的设备和操作系统上...]]></description>
            <content:encoded><![CDATA[<ul><li><p><em>更高效、更实用的跨端开发选择</em></p><blockquote><p>为什么说 flutter 是一个强大的跨端框架？</p></blockquote><p>Flutter 是一个基于 Dart 编程语言的移动应用程序开发框架，由 Google 开发。它的强大之处在于它可以快速构建高性能、美观、灵活的跨平台应用程序，适用于 Android、iOS、Web、Windows、macOS 和 Linux 等多个平台。以下是 Flutter 成为强大的跨端框架的一些原因：</p><p>▶ 快速开发：Flutter 采用热重载技术，可以快速地进行应用程序开发、调试和修改，缩短了开发周期，提高了开发效率。</p><p>▶ 高性能：Flutter 使用自己的渲染引擎，可以提供极快的渲染速度和响应性能，满足用户的高效、流畅体验。</p><p>▶ 灵活性：Flutter 具有高度的灵活性，可以通过自定义小部件来构建任何类型的用户界面，包括动画、图像、视频等等。</p><p>▶ 统一的开发体验：Flutter 提供了一致的开发体验，无论是在 Android 还是 iOS 上进行开发，都可以使用相同的代码库和开发工具，减少了开发人员的学习成本和部署成本。</p><p>▶ 跨平台支持：Flutter 支持多个平台，可以在不同的设备和操作系统上运行，从而扩大了应用程序的受众范围。</p><p>总之，Flutter 是一个快速、高效、灵活和跨平台的开发框架，具有强大的功能和优秀的性能，可以帮助开发人员轻松构建出各种类型的跨端应用程序。去年，Flutter 做了 3.0 的里程碑升级，性能更优越，使用其编写了一个简单的计数器应用程序，点击按钮时，数字会递增，框架使用起来非常好用。</p><pre data-type="codeBlock" text="import &apos;package:flutter/material.dart&apos;;
​
void main() {
​
 runApp(MyApp());
​
}
​
class MyApp extends StatefulWidget {
​
 @override
​
 _MyAppState createState() =&gt; _MyAppState();
​
}
​
class _MyAppState extends State&lt;MyApp&gt; {
​
 int _counter = 0;
​
 void _incrementCounter() {
​
 setState(() {
​
 _counter++;
​
 });
​
 }
​
 @override
​
 Widget build(BuildContext context) {
​
 return MaterialApp(
​
 title: &apos;Flutter Demo&apos;,
​
 theme: ThemeData(
​
 primarySwatch: Colors.blue,
​
 ),
​
 home: Scaffold(
​
 appBar: AppBar(
​
 title: Text(&apos;Flutter Demo&apos;),
​
 ),
​
 body: Center(
​
 child: Column(
​
 mainAxisAlignment: MainAxisAlignment.center,
​
 children: &lt;Widget&gt;[
​
 Text(
​
 &apos;You have pushed the button this many times:&apos;,
​
 ),
​
 Text(
​
 &apos;$_counter&apos;,
​
 style: Theme.of(context).textTheme.headline4,
​
 ),
​
 ],
​
 ),
​
 ),
​
 floatingActionButton: FloatingActionButton(
​
 onPressed: _incrementCounter,
​
 tooltip: &apos;Increment&apos;,
​
 child: Icon(Icons.add),
​
 ),
​
 ),
​
 );
​
 }
​
}
"><code><span class="hljs-selector-tag">import</span> '<span class="hljs-selector-tag">package</span>:<span class="hljs-selector-tag">flutter</span>/<span class="hljs-selector-tag">material</span><span class="hljs-selector-class">.dart</span>';
​
<span class="hljs-selector-tag">void</span> <span class="hljs-selector-tag">main</span>() {
​
 <span class="hljs-selector-tag">runApp</span>(<span class="hljs-built_in">MyApp</span>());
​
}
​
<span class="hljs-selector-tag">class</span> <span class="hljs-selector-tag">MyApp</span> <span class="hljs-selector-tag">extends</span> <span class="hljs-selector-tag">StatefulWidget</span> {
​
 <span class="hljs-variable">@override</span>
​
 _MyAppState <span class="hljs-built_in">createState</span>() => <span class="hljs-built_in">_MyAppState</span>();
​
}
​
<span class="hljs-selector-tag">class</span> <span class="hljs-selector-tag">_MyAppState</span> <span class="hljs-selector-tag">extends</span> <span class="hljs-selector-tag">State</span>&#x3C;<span class="hljs-selector-tag">MyApp</span>> {
​
 <span class="hljs-selector-tag">int</span> <span class="hljs-selector-tag">_counter</span> = <span class="hljs-number">0</span>;
​
 <span class="hljs-selector-tag">void</span> <span class="hljs-selector-tag">_incrementCounter</span>() {
​
 <span class="hljs-selector-tag">setState</span>(() {
​
 <span class="hljs-selector-tag">_counter</span>++;
​
 });
​
 }
​
 @<span class="hljs-selector-tag">override</span>
​
 <span class="hljs-selector-tag">Widget</span> <span class="hljs-selector-tag">build</span>(BuildContext context) {
​
 <span class="hljs-selector-tag">return</span> <span class="hljs-selector-tag">MaterialApp</span>(
​
 <span class="hljs-attribute">title</span>: <span class="hljs-string">'Flutter Demo'</span>,
​
 <span class="hljs-attribute">theme</span>: <span class="hljs-built_in">ThemeData</span>(
​
 <span class="hljs-attribute">primarySwatch</span>: Colors.blue,
​
 ),
​
 <span class="hljs-attribute">home</span>: <span class="hljs-built_in">Scaffold</span>(
​
 <span class="hljs-attribute">appBar</span>: <span class="hljs-built_in">AppBar</span>(
​
 <span class="hljs-attribute">title</span>: <span class="hljs-built_in">Text</span>(<span class="hljs-string">'Flutter Demo'</span>),
​
 ),
​
 <span class="hljs-attribute">body</span>: <span class="hljs-built_in">Center</span>(
​
 <span class="hljs-attribute">child</span>: <span class="hljs-built_in">Column</span>(
​
 <span class="hljs-attribute">mainAxisAlignment</span>: MainAxisAlignment.center,
​
 <span class="hljs-attribute">children</span>: &#x3C;Widget>[
​
 <span class="hljs-built_in">Text</span>(
​
 <span class="hljs-string">'You have pushed the button this many times:'</span>,
​
 ),
​
 <span class="hljs-built_in">Text</span>(
​
 <span class="hljs-string">'$_counter'</span>,
​
 <span class="hljs-attribute">style</span>: Theme.<span class="hljs-built_in">of</span>(context).textTheme.headline4,
​
 ),
​
 ],
​
 ),
​
 ),
​
 <span class="hljs-attribute">floatingActionButton</span>: <span class="hljs-built_in">FloatingActionButton</span>(
​
 <span class="hljs-attribute">onPressed</span>: _incrementCounter,
​
 <span class="hljs-attribute">tooltip</span>: <span class="hljs-string">'Increment'</span>,
​
 <span class="hljs-attribute">child</span>: <span class="hljs-built_in">Icon</span>(Icons.add),
​
 ),
​
 ),
​
 );
​
 }
​
}
</code></pre><blockquote><p>小程序容器技术</p></blockquote><p>小程序容器技术则是一种相对新型的技术，它是通过在客户端中集成一个小程序容器，来运行小程序的一种技术方案。小程序容器技术可以提供一个独立运行环境和安全沙箱环境，从而使得小程序可以在不同的平台和设备上运行，同时也提高了小程序的安全性和稳定性。</p><p>市面上一些比较知名的小程序容器技术产品包括：微信、支付宝、百度、抖音小程序等，他们都是以完善大社交平台自有小程序生态的技术底座，能提供第三方进行私有化部署的有：FinClip、mPaaS 等产品。</p><blockquote><p>使用 Flutter+小程序容器组装成的 App 的好处</p></blockquote><p>小程序容器技术的特点主要包括以下几个方面：</p><p>▶ 快速启动：小程序容器采用了轻量级的架构，可以快速启动应用程序，并且无需等待下载和安装，从而提高了用户的使用体验。</p><p>▶ 独立运行环境：小程序容器提供了独立的运行环境，使得开发者可以在不同的平台和设备上开发和部署应用程序，无需关注具体的硬件和操作系统环境。</p><p>▶ 安全沙箱环境：小程序容器为应用程序提供了安全的沙箱环境，使得应用程序的运行不会影响到系统的其他部分。同时，小程序容器还提供了一些安全机制，如权限控制、数据加密等，保障应用程序的安全性。</p><p>▶ 常用功能和组件：小程序容器提供了许多常用的功能和组件，如 UI 组件、网络请求、本地存储等，使得开发者可以快速构建应用程序，并且不需要编写复杂的底层代码。</p><p>▶ 优秀的用户体验：小程序容器提供了快速启动、无需下载、即用即走等特点，使得应用程序可以快速地被用户接受和使用。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">后文</h2><p>Flutter 是一款强大的跨端开发框架，可以帮助开发者构建高性能、美观、灵活的应用程序，从而实现跨平台开发和部署。在 FinClip 平台上，Flutter 可以与 FinClip 插件和服务结合使用，为开发者提供一站式的小程序开发和发布服务，帮助他们更加轻松和高效地构建和部署跨平台应用程序。通过使用 Flutter 和 FinClip，开发者可以节省大量的时间和精力，并提高应用程序的质量和稳定性，从而满足不同用户的需求和期望。相信 Flutter 和 FinClip 将会成为未来跨端开发的主流选择，并带来更加丰富、多样化、创新化的应用程序体验。</p><p>这里就给大家分享一份Flutter技术解析与实战，包含混合工程、业务架构、数据统计、企业实战案例等内容，帮助大家提升进阶。</p><blockquote><p>有需要完整文档的伙伴！</p></blockquote><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://link.zhihu.com/?target=https%3A//docs.qq.com/doc/DUmNscHVYTWRjS0xZ">点击这里领取</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://link.zhihu.com/?target=https%3A//docs.qq.com/doc/DUmNscHVYTWRjS0xZ">点击这里领取</a></p><h2 id="h-flutter" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">《Flutter入门与实战》</h2><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">目录</h3><h3 id="h-flutter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一章、Flutter基本功能</h3><ul><li><p>我的第一个 Flutter 应用之旅</p></li><li><p>容器的盒子模型</p></li><li><p>构建一个常用的页面框架</p></li><li><p>设置 App 的主色调与字体</p></li><li><p>来一个图文并茂的列表</p></li><li><p>给列表增加下拉刷新和上滑加载更多功能</p></li><li><p>使用cached_network_image 优化图片加载体验</p></li><li><p>仿一个微信价值几个亿的页面</p></li><li><p>开发一个常用的登录页面</p></li><li><p>封装一个通用的文本输入框</p></li><li><p>底部弹窗ModelBottomSheet详解</p></li><li><p>利用CustomScrollView实现更有趣的滑动效果</p></li><li><p>底部弹窗如何实现多项选择？</p></li></ul><h3 id="h-flutter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第二章、Flutter路由管理</h3><ul><li><p>App页面路由及路由拦截实现</p></li><li><p>路由参数处理</p></li><li><p>初识 ﬂuro 路由管理</p></li><li><p>使用 ﬂuro 的转场动画提高页面切换体验</p></li><li><p>使用自定义转场动画实现个性化页面切换</p></li><li><p>此路是我开，此树是我栽。若是没权限，403到来</p></li><li><p>Flutter 2.0的路由把我搞蒙了</p></li><li><p>山路十八弯的2.0路由</p></li></ul><h3 id="h-flutterdio" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第三章、Flutter网络请求插件Dio</h3><ul><li><p>初次见面，网络请求王者之dio</p></li><li><p>利用 Dio请求删除数据</p></li><li><p>使用 Dio的 Patch请求完成详情编辑</p></li><li><p>使用 Post 请求增加动态</p></li><li><p>一文搞定图片选择及图片上传</p></li><li><p>使用 GetIt 同步不同页面间数据</p></li><li><p>Dio 封装之金屋藏娇</p></li><li><p>Dio 之拦截器</p></li><li><p>Dio之戛然而止</p></li><li><p>从源码深入了解Dio 的</p></li><li><p>小伙子，你买票了吗？</p></li><li><p>手写一个持久化的</p></li><li><p>Dio之文件下载</p></li><li><p>Dio 篇章总结</p></li></ul><h3 id="h-flutter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第四章、Flutter状态管理</h3><ul><li><p>基础原理篇</p></li><li><p>Provider篇</p></li><li><p>Redux篇</p></li><li><p>Mobx篇</p></li><li><p>Getx篇</p></li><li><p>BLOC篇</p></li><li><p>状态管理系列大汇总</p></li></ul><h3 id="h-flutter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第五章、Flutter 动画</h3><ul><li><p>使用 Animation 构建爱心三连动画</p></li><li><p>让你的组件拥有三维动效</p></li><li><p>小姐姐渐现效果 ——AnimatedOpacity 使用</p></li><li><p>使用 AnimatedBuilder分离组件和动画，实现动效复用</p></li><li><p>看这一颗跳动的热心—— AnimatedPadding 应用</p></li><li><p>使用AnimatedSwitcher 做场景切换</p></li><li><p>给小姐姐的照片调个颜色滤镜</p></li><li><br></li></ul><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3></li></ul>]]></content:encoded>
            <author>gualeyizhenfeng@newsletter.paragraph.com (gualeyizhenfeng)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/ad165af4bc5e6170559de0fb51182485cd38bbf7aede7a1050b7fdf2857dae5a.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Android 中如何使用 Kotlin 协程？]]></title>
            <link>https://paragraph.com/@gualeyizhenfeng/android-kotlin</link>
            <guid>rw9suYTf9bBrxjHbVNCv</guid>
            <pubDate>Sat, 13 May 2023 03:42:18 GMT</pubDate>
            <description><![CDATA[作者：程序员小铭 链接：https://www.zhihu.com/question/582908510/answer/2945018004 来源：知乎 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。 在 Android 上，避免阻塞主线程是非常必要的。主线程是一个处理所有界面更新的线程，也是调用所有点击处理程序和其他界面回调的线程。因此，主线程必须顺畅运行才能确保出色的用户体验在实际开发中我们会遇到这种场景创建子线程执行耗时操作，然后切换到主线程处理界面显示逻辑；但是如果我们在一个接口请求完成后，拿到这个接口返回的结果，在需要去请求另一个接口时，逻辑就会十分复杂，就会出现回调地狱；并且如果在需要考虑接口失败的场景呢？使用Rxjava优化上面的场景；没有内存泄漏、支持取消、正确的使用线程，但是它比较复杂，如 subscribeOn、observeOn、map 或者 subscribe，都需要学习这个时候kotlin 协程就出场了，它可以帮我们解决上面的痛点2.什么是协程看下官方的定义，协程是一种并发设计模式。特点：协程是我们在 Android 上进行异步编程...]]></description>
            <content:encoded><![CDATA[<p>作者：程序员小铭 链接：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zhihu.com/question/582908510/answer/2945018004">https://www.zhihu.com/question/582908510/answer/2945018004</a> 来源：知乎 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。 在 Android 上，避免阻塞主线程是非常必要的。主线程是一个处理所有界面更新的线程，也是调用所有点击处理程序和其他界面回调的线程。因此，主线程必须顺畅运行才能确保出色的用户体验在实际开发中我们会遇到这种场景创建子线程执行耗时操作，然后切换到主线程处理界面显示逻辑；但是如果我们在一个接口请求完成后，拿到这个接口返回的结果，在需要去请求另一个接口时，逻辑就会十分复杂，就会出现回调地狱；并且如果在需要考虑接口失败的场景呢？使用Rxjava优化上面的场景；没有内存泄漏、支持取消、正确的使用线程，但是它比较复杂，如 subscribeOn、observeOn、map 或者 subscribe，都需要学习这个时候kotlin 协程就出场了，它可以帮我们解决上面的痛点2.什么是协程看下官方的定义，协程是一种并发设计模式。特点：协程是我们在 Android 上进行异步编程的推荐解决方案。值得关注的特点包括：轻量：您可以在单个线程上运行多个协程，因为协程支持挂起，不会使正在运行协程的线程阻塞。**挂起比阻塞节省内存，且支持多个并行操作。内存泄漏更少：使用结构化并发机制在一个作用域内执行多项操作。**内置取消支持：取消操作会自动在运行中的整个协程层次结构内传播。Jetpack 集成：许多 Jetpack 库都包含提供全面协程支持的扩展。某些库还提供自己的协程作用域，可供您用于结构化并发。3.那协程到底是什么？官方定义协程是一种轻量级的线程并且举例：创建10000个线程和创建10000个协程来比较协程是比线程轻量，但是协程是线程上层的封装，是基于线程的。要比较也应该和线程池比较。所以这种并不能说明协程比线程轻量。协程的轻量更多的是表现在协程的使用上面。所以协程其实就是在一个线程挂起并且自己可以在另一个线程恢复的一段程序。4.如何学习Kotlin协程知识的学习过程就像谈恋爱一样，讲究循序渐进。上来就想深入了解的话，那大概率是很容易翻车的。但聊得太浅吧，感情又不到位，后续想深入后很难。没有系统的学习是很难讲学到的知识点融会贯通的，所以这里分享谷歌十年技术专家联合打造“最新”《史上最详android版kotlin协程入门进阶实战指南》，帮助大家根据自身不同的阶段，更好的去检索学习Kotliin协程，下面正文开始，需要完整版的可以 点击这里 直接领取。第一章 Kotlin协程的基础介绍协程是什么什么是Job 、Deferred 、协程作用域Kotlin协程的基础用法 第二章 kotlin协程的关键知识点初步讲解协程调度器协程上下文协程启动模式协程作用域挂起函数第三章 kotlin协程的异常处理协程异常的产生流程协程的异常处理 第四章 kotlin协程在Android中的基础应用Android使用kotlin协程在Activity与Framgent中使用协程ViewModel中使用协程其他环境下使用协程 第五章 kotlin协程的网络请求封装协程的常用环境协程在网络请求下的封装及使用高阶函数方式多状态函数返回值方式直接返回值的方式第六章 深入kotlin协程原理（一）suspend 的花花肠子藏在身后的- Continuation村里的希望- SuspendLambda 第七章 深入kotlin协程原理（二）协程的那些小秘密协程的创建过程协程的挂起与恢复协程的执行与状态机第八章 Kotlin Jetpack 实战从一个膜拜大神的 Demo 开始Kotlin 写 Gradle 脚本是一种什么体验？Kotlin 编程的三重境界Kotlin 高阶函数Kotlin 泛型Kotlin 扩展Kotlin 委托协程“不为人知”的调试技巧图解协程原理第九章 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求项目配置实现思路协程实现协程 + ViewModel + LiveData实现后续优化异常处理更新Retrofit 2.6.0 由于文章涉及到的只是点比较多、内容可能过长，可以根据自己的能力水平和熟悉程度分阶段跳着看，《史上最详android版kotlin协程入门进阶实战指南》完整版的可以 点击这里 直接领取</p>]]></content:encoded>
            <author>gualeyizhenfeng@newsletter.paragraph.com (gualeyizhenfeng)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d6d3d45d832bfec0d74a216a53fd86d5f5b4d0c1cff1a5824ba88ca6eb608be0.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>