👨🏻‍💻's 博客

慢品人间烟火色,闲观万事岁月长

0%

环境

Flutter 3.29

macOS Sequoia 15.4.1

Xcode 16.3

集成

Flutter提供了camera插件来拍照和录视频,它提供了一系列可用的相机,并使用特定的相机展示相机预览、拍照、录视频。

添加依赖

  • camera: 提供使用设备相机模块的工具
  • path_provider: 寻找存储图片的正确路径
  • path: 创建适配任何平台的路径
阅读全文 »

环境

Flutter 3.29
macOS Sequoia 15.4.1
Xcode 16.3

配置

安装依赖包

默认情况下,Flutter只提供美式英语的本地化,可以通过flutter_localizations这个package来实现国际化。

创建flutter工程后执行

1
2
¥ flutter pub add flutter_localizations --sdk=flutter
¥ flutter pub add intl:any

执行后的pubspec.yaml文件的效果

1
2
3
4
5
6
7
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8
flutter_localizations:
sdk: flutter
intl: any
阅读全文 »

线程和异步

编写异步代码

Dart采用单线程执行模型,支持Isolates(在另一个线程上运行Dart代码)、事件循环和异步编程。除非生成一个Isolates,否则Dart代码将在主UI线程中运行,并由事件循环驱动。Flutter的事件循环相当于iOS的主线程上的RunLoop。

Dart的单线程模型,不代表阻塞型的操作都会导致UI卡顿。实际上可以采用Dart语言提供的异步功能比如async/await来执行异步的操作。

阅读全文 »

环境

Flutter 3.29
macOS Sequoia 15.4.1
Xcode 16.3

控制器(ViewControllers)

在UIKit中,通过ViewController控制数据在视图上展现,多个ViewController组合在一起构建复杂的用户界面。在Flutter中,因为所有都是Widget,所以ViewController相关的功能也由Widget来承担。

生命周期事件

在UIKit中可以重写自定义控制器的生命周期的方法,或注册AppDelegate的回调。在Flutter3.13前,没有这个概念,但是可以通过监听WidgetsBinding观察者和didChangeAppLifecycleState()改变事件来实现

阅读全文 »

导航

两个页面之间切换

UIKit中,使用UINavigationController来管理视图。Flutter中通过NavigatorRoutes来实现相似的功能。

一个Route是一个应用中屏幕或页的抽象,Navigator是一个Widget来管理这些RoutesRoute可以粗略的认为是一个UIViewControllerNavigator类似iOS中的UINavigationController,可以pushpopRoutes。

切页面有两种方法

  • 指定一个路由的映射表
  • 直接导航到一个Route
阅读全文 »

环境

Flutter 3.29
macOS Sequoia 15.4.1
Xcode 16.3

概览

UIView与Widgets的比较

在UIKit使用UIView类的对象进行页面开发,布局也是UIView类的对象,在Flutter中使用的是Widget,在概念上Widget可以理解成UIView。

差异:

  1. 有效期: Widgets是不可变的,它的生存期只到被改变前。当Widgets或它们的状态改变了。Flutter’s 框架会创建一个widget的实例,而UIKit中的UIView是不会重新创建,它是可变的,绘制一次并且在使用setNeedDisplay()使其失效之前不会重新绘制
  2. 轻量: Widgets相对更轻量,一个原因是它们是不可变,而且它们不负责显示和绘制,更多的是一种语义的描述。

Flutter 包含 Matterial 组件库,其中的Widgets都符合了Material设计指引。Material设计是个适配多平台的设计系统,也支持iOS

但如果想用iOS的UI风格,可以使用Cupertino widgets libray

阅读全文 »

要点

Flutter 布局的核心机制是 widget。在 Flutter 中,几乎所有东西都是 widget — 甚至布局模型都是 widget。你在 Flutter 应用程序中看到的图像,图标和文本都是 widget。此外不能直接看到的也是 widget,例如用来排列、限制和对齐可见 widget 的行、列和网格。

布局

流程

  1. 选择一个布局Widget
  2. 创建一个可见Widget
  3. 将可见Widget添加到布局Widget
  4. 将布局Widget添加到页面
  5. 运行应用
阅读全文 »