学习网站:https://flutter.cn/

安装链接:https://docs.fluttercn.cn/install/manual

Flutter 介绍

  • 语言特性

    • Flutter 采用的是 Google 的Dart 语言进行开发和学习,Dart 语言从Dart2 开始便是我们的强类型的语言,而且是静态类型的语言机制吧

    • 以及Dart语言是面向对象的开发模式OOP,核心的话对于我们的 Kotilin 和 Java 的开发同学上手起来就十分的方便了,核心对于有 Android 或者说 Java server 开发者来说就十分的便利和顺畅吧

    • 但是核心一点需要注意的是我们的:Flutter 的话核心 OOP 的思想+前端的声明式编程的思想,所以说整体来说都是客观的开发能力实践吧

  • 开发工具实践

    • 官方默认支持的是使用 Android Studio 进行开发和学习,但是还是需要借助于插件的讷,当然也是具备前端学习开发者可以使用的是 vscode 的兼容插件拓展的

  • Android 和 Flutter 的内在联系

主要概念

Android 中实现

RN 中实现

Lynx 中实现

Flutter 中实现

页面载体

Activity、Fragment

Component(如 Screen)

Page

Widget(通过 Navigator 管理页面栈)

视图组件

View、ViewGroup

Component(JSX 组件)

自定义组件(基于 DSL)

Widget(一切皆 Widget

页面跳转

Intent

Navigation(如 React Navigation)

路由系统(Router)

Navigator 组件 + 路由表

网络请求

OkHttp、Retrofit

fetch API、Axios 库

内置网络模块或第三方库

http 包、Dio 库

数据存储

SharedPreferences、SQLite

AsyncStorage、Realm

本地存储 API、SQLite 模块

shared_preferences 包、sqflite 包

状态管理

LiveData、ViewModel(Jetpack)

Redux、MobX、Context

内置状态管理或 Redux 适配

Provider、Bloc、Riverpod

布局系统

XML 布局、ConstraintLayout

Flexbox 布局(JSX)

Flexbox 布局(DSL)

Flexbox 布局(Widget 嵌套)

tips: 布局的话:线性布局,相对布局

原生交互

JNI、aidl

Native Module、Bridge

原生模块(Native Module)

MethodChannel、EventChannel

  • 核心的对比关系表就是:页面加载、视图组件、页面跳转、网络请求、数据存储、状态管理、布局系统、原生交互等方面进行对比性的学习吧(Flutter All is widget)

  • 因为这些都是跨平台或者说原生NA端的一些核心知识技巧吧,所以说很多的核心概念都是一样的,以及根源解决的问题也是一样的讷

  • 跨平台应用的选择: uniapp flutter RN Lynx dioxus

目前的移动端开发分类

一、Hybrid 混合开发

  • 核心逻辑:以 Web 技术(React、Vue 等前端框架)为基础,通过 WebView 嵌入原生应用,再结合原生插件(如 Cordova 插件)实现原生能力调用,平衡跨平台效率与原生功能适配。

  • 关键概念

    • WebView:原生容器,承载前端页面的运行环境,是 Hybrid 与原生的 “桥梁”。

    • 原生插件:封装原生能力(如摄像头、传感器),供前端代码调用,解决 Web 技术的原生能力短板。

二、跨平台开发框架

1. Flutter

  • 核心逻辑:基于 Dart 语言,通过自绘引擎(Skia)直接渲染 UI,无需依赖原生组件,实现 “一套代码多端运行” 且性能接近原生。

  • 关键概念

    • Widget:一切 UI 元素的基础,分为 StatelessWidget(无状态)和 StatefulWidget(有状态),通过嵌套组合构建界面。

    • Dart 异步:通过 async/awaitFuture 处理 IO 操作(如网络请求),保证界面流畅性。

    • 状态管理:通过 Provider、Bloc、Riverpod 等方案管理组件间状态共享,解决复杂界面的状态混乱问题。

2. React Native(RN)

  • 核心逻辑:以 JavaScript 为开发语言,通过 “桥接(Bridge)” 机制调用原生组件渲染 UI,实现跨平台开发。

  • 关键概念

    • JSX 组件:融合 JavaScript 与 XML 语法的组件化语法,用于描述界面结构。

    • Bridge:JS 与原生代码的通信通道,负责将 JS 逻辑映射到原生组件执行。

    • 状态管理:依赖 Redux、MobX、Context 等前端生态方案,管理组件状态与数据流转。

3. Lynx

  • 核心逻辑:基于 DSL(领域特定语言)解析,结合原生渲染能力,在性能与开发效率间做平衡的跨平台方案。

  • 关键概念

    • DSL 解析:将自定义语法(类似 JSON/XML 结构)转换为原生界面指令,驱动原生组件渲染。

    • 轻量引擎:相比其他跨平台框架,运行时体积更小、启动更快,适配中低端设备场景。

三、纯原生开发

  • 核心逻辑:直接使用平台原生语言(Android 用 Java/Kotlin,iOS 用 Swift/Objective-C)和 SDK 开发,深度调用系统底层能力,性能与兼容性最优。

  • 关键概念

    • Android 侧

      • Activity/Fragment:页面载体,分别对应独立页面和页面内可复用模块。

      • View/ViewGroup:视图组件的基础,通过 XML 或代码构建界面布局。

      • Jetpack 组件:如 LiveData(生命周期感知的数据)、ViewModel(页面状态管理),简化原生开发的复杂度。

    • iOS 侧

      • UIViewController:页面控制器,管理页面的生命周期与交互逻辑。

      • UIKit 组件:如 UIView(基础视图)、UITableView(列表),是构建界面的核心元素。

      • Swift 特性:如可选类型(Optional)、闭包(Closure),提升代码安全性与开发效率。

四、无代码 / 低代码开发

  • 核心逻辑:通过可视化拖拽、配置化逻辑(如流程引擎、组件库)生成 App,降低开发门槛。

  • 关键概念

    • 可视化编辑器:提供界面组件、逻辑模块的拖拽工具,无需手写代码即可搭建界面。

    • 配置化逻辑:通过表单、流程图等方式定义业务规则,替代传统代码的逻辑编写。

开发模式

技术原理 & 代表框架

适用场景

优势

劣势

Hybrid 混合开发

前端技术(React/Vue)+ 原生容器(WebView)+ 原生插件(如 Cordova、Ionic)

企业级中后台应用、功能迭代快但交互简单的场景

开发效率高、跨平台成本低、前端资源可复用

性能略逊于原生 / 跨平台框架、复杂交互体验不足

跨平台开发框架

- Flutter:Dart 语言 + 自绘引擎(Skia)

- RN:JS 语言 + 原生组件桥接

- Lynx:DSL 解析 + 原生渲染

- Flutter:复杂交互 App(如社交、电商)

- RN:已有前端团队的 App 迭代

- Lynx:追求性能与开发效率平衡的场景

- Flutter:性能接近原生、UI 一致性强

- RN:前端生态成熟、热更新便捷

- Lynx:轻量高效、适配性好

- Flutter:包体积略大、生态尚在完善

- RN:复杂动画性能一般

- Lynx:生态相对小众

纯原生开发

- Android:Java/Kotlin + 原生 SDK

- iOS:Swift/Objective-C + 原生 SDK

对性能极致要求的场景(如游戏、相机类 App)、系统级应用(如手机厂商内置 App)

性能最佳、系统兼容性强、可深度调用原生能力

开发成本高(双端维护)、迭代周期长

核心理论基础总结

Hybrid、跨平台开发与原生端集成的核心理论,本质是 “环境适配 + 通信桥接”

  1. 前端代码运行依赖特定环境:前端(HTML/CSS/JS)原生运行于浏览器内核环境,若要在非浏览器的原生端(移动端、桌面端)运行,必须由原生端提供 “浏览器内核载体”(Web 容器),否则无法解析渲染前端代码。

  2. 跨端交互的核心是 “桥接机制”:前端与原生端(NA)属于不同技术栈(JS vs Java/Kotlin/Swift 等),需通过 Web 容器提供的通信通道(如 JSBridge)实现双向调用,完成数据传递与功能协同。

  3. 不同跨平台方案的核心差异:是否依赖 Web 容器(浏览器内核),以及渲染方式(原生组件渲染 vs 自绘渲染),直接决定了性能、兼容性与开发效率。


常见集成的浏览器内核方案

实际业务中,Web 容器的核心是 “浏览器内核”,不同方案的本质是选择 / 封装不同内核,以下是主流方案及业务适配场景:

系统内置内核方案

  • 核心内核

    • 移动端 Android(4.4+):Chromium 内核(与 Chrome 同源),系统内置 WebView 组件封装;

    • 移动端 iOS(8+):WebKit 内核(Safari 同源),通过 WKWebView 组件封装;

    • 桌面端:Windows(Edge 内核 / Chromium)、macOS(WebKit)、Linux(Chromium),系统原生提供内核能力。

  • 集成方式:原生端直接调用系统自带组件(如 Android 的 WebView、iOS 的 WKWebView、桌面端 Electron 的 BrowserWindow)。

  • 业务适配场景

    • 适用:轻中度交互场景(如 App 内 H5 页面、企业后台管理系统、简单工具类桌面应用);

    • 优势:无额外包体积负担、系统兼容性最佳、开发成本低;

    • 劣势:Android 碎片化下内核版本不一致(部分老旧机型内核版本低,HTML5 特性支持差)。

第三方定制内核方案

  • 代表方案:腾讯 X5 内核(Android 端)、CEF(Chromium Embedded Framework,跨桌面端);

  • 核心内核:基于 Chromium 深度定制,保留核心能力并优化特定场景;

  • 集成方式:接入第三方 SDK,替换系统原生 WebView(如 Android 用腾讯 X5 的 WebView 替代系统 WebView);

  • 业务适配场景

    • 腾讯 X5:Android 端复杂 H5 场景(如视频播放、文件上传下载、WebRTC 实时通信),解决碎片化导致的兼容性问题(如微信、QQ、美团等 App 广泛使用);

    • CEF:桌面端重度 Web 交互场景(如 Electron 应用、Qt 桌面应用内嵌 Web 功能),需与 Chrome 体验完全一致(如钉钉桌面端、VS Code 插件系统);

  • 优势:性能稳定、特性统一、支持高级功能(如自定义渲染、插件扩展);

  • 劣势:增加包体积(X5 内核约 10-20MB)、需接入第三方服务(依赖厂商维护)。

跨平台框架封装方案

  • 代表方案:UniWebView(Unity 游戏引擎)、Tauri(跨桌面端)、Cordova/Ionic(移动端 Hybrid);

  • 核心内核:底层复用系统原生内核或第三方内核,上层提供统一 API;

  • 集成方式:通过框架提供的组件 / 接口调用 Web 容器(如 Unity 中用 UniWebView 加载 H5 活动页);

  • 业务适配场景

    • 适用:跨平台快速开发(如游戏内嵌入 H5 活动、轻量桌面工具、多端共用 H5 页面);

    • 优势:屏蔽多端内核差异,前端代码一次开发多端复用;

    • 劣势:定制化能力弱,复杂场景(如高性能动画)体验不如原生封装。


主流浏览器内核区别

实际业务中接触的核心内核只有 3 类:Chromium、WebKit、系统定制内核(基于前两者),差异直接影响业务选型:

内核类型

核心特点

适配平台

业务影响(核心关注)

典型应用场景

Chromium 内核

开源、功能最全、HTML5 支持最好、性能强

Android、Windows、Linux

兼容性最佳,支持所有现代 Web 特性(如 WebRTC、PWA);但 Android 端版本碎片化

绝大多数 App 内嵌 H5、桌面端应用

WebKit 内核

轻量、节能、与 iOS/macOS 系统深度融合

iOS、macOS

iOS 唯一可选内核,性能稳定但部分 Chromium 特性支持滞后(如部分 CSS 新属性)

iOS App 内嵌 H5、macOS 桌面应用

腾讯 X5 内核

基于 Chromium 定制,优化国内场景

Android

解决 Android 碎片化,优化视频 / 下载 / 内存管理;依赖腾讯服务

国内 Android App(微信、美团)

业务决策关键点:

  1. iOS 端无选择:必须用 WebKit 内核(WKWebView),业务需适配 Safari 的特性限制(如本地存储容量、JS 执行效率);

  2. Android 端优先选 X5:若需兼容中低端机型或复杂 H5 功能(如视频直播、文件上传),X5 内核比系统 WebView 更稳定;简单场景(如静态页面)用系统 WebView 即可;

  3. 桌面端优先 Chromium:Electron、CEF 均基于 Chromium,保证与 Chrome 一致的体验,适合桌面端重度 Web 交互(如在线编辑器、协作工具)。


Hybrid 与 RN/Lynx/Flutter 的核心区别

核心结论:Hybrid 依赖 WebView(浏览器内核),RN/Lynx/Flutter 不依赖 WebView,这是本质差异,直接决定性能与体验:

对比维度

Hybrid 开发

RN/Lynx/Flutter 跨平台开发

核心依赖

必须依赖 WebView(浏览器内核)

不依赖 WebView,无浏览器内核参与

渲染方式

前端代码由浏览器内核渲染(DOM/CSS)

各自独立渲染:

- RN/Lynx:JS 桥接调用原生组件渲染;

- Flutter:Dart 自绘引擎(Skia)直接渲染

性能表现

中等(受内核渲染效率限制,复杂交互易卡顿)

接近原生:

- RN/Lynx 略逊于原生(桥接有损耗);

- Flutter 基本等同于原生(自绘无损耗)

业务适配场景

1. 轻中度交互(如活动页、帮助中心);

2. 需快速迭代(H5 无需发版);

3. 多端共用一套前端代码

1. 重度交互场景(如社交、电商、游戏);

2. 对性能要求高(如动画、列表滚动);

3. 需接近原生的用户体验

开发成本

低(前端主导,原生仅需提供 WebView 和桥接)

中高(需学习专属技术栈:RN 学 React/JS,Flutter 学 Dart)

原生能力调用

需通过 JSBridge 间接调用(依赖 WebView 通道)

直接调用原生 API(RN/Lynx 通过桥接,Flutter 通过 Channel),效率更高

Flutter 创建项目

  • flutter create <project_name>

  • 核心的开发工具是我们的 Android Studio

    • 但是这里需要注意的是,我们的 Android studio 核心只能加载 android 的应用,此时需要体现下载插件 FlutterDart插件,否则就无法实现看到 flutter 原本的代码吧

  • flutter dector 实现快速的检查环境吧

  • 在进行移动端 APP 开发的时候,一定要进行配置 Android SDK(SDK Manager) Android SDK Command-line Tools

  • flutter doctor --android-licenses

  • 以及持续调试使用 sdkmanager 工具,很难受吧反正,呃呃呃

setx SDKMANAGER_MIRROR_URL "https://mirrors.cloud.tencent.com/android/repository/"
setx SDKMANAGER_CHANNEL "3"

sdkmanager --sdk_root=E:\worktools\android\androidSDK --channel=3 "system-images;android-36;google_apis_playstore;x86_64"
  • 由于 google 对国内已经封杀了,此时需要做的就是进行设置镜像源吧,这样会好很多讷

  • 安装了模拟器后,随便玩就行了,哈哈

  • 设置flutter 镜像源

setx FLUTTER_STORAGE_BASE_URL "https://mirrors.tuna.tsinghua.edu.cn/flutter"
setx PUB_HOSTED_URL "https://mirrors.tuna.tsinghua.edu.cn/dart-pub"

flutter config --android-sdk "E:\worktools\android\androidSDK"  # Flutter 有自己的检测机制,这里需要注意一下
flutter config

# 设置Flutter永远使用镜像
flutter config --no-analytics
flutter config --enable-web

# 修改 wrapper 配置文件
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

  • 垃圾 NA flutter