Flutter 工程环境、插件使用、protobuf配置与字体/持久化管理
🧭 Flutter 常用开发配置与功能实践笔记
一、📦 从 pubspec.yaml
中获取项目版本号
dart
import 'package:flutter/services.dart' show rootBundle;
import 'package:yaml/yaml.dart';
Future<void> _getVersion() async {
final yamlString = await rootBundle.loadString('pubspec.yaml');
final yamlMap = loadYaml(yamlString);
final version = yamlMap['version'];
print('App version: $version');
}
🔍 说明
- 通过
rootBundle.loadString()
读取项目根目录下的pubspec.yaml
文件; - 使用
yaml
包 (import 'package:yaml/yaml.dart';) 解析 YAML 内容; - 获取
version
字段值 --- 用于展示或版本控制。
二、🧱 常用插件分类与用途
插件名 | 功能说明 | 备注 |
---|---|---|
get_storage | 数据持久化插件,实现轻量化键值对存储 | 初始化后可直接读写 |
adaptive_breakpoints | 响应式布局插件,根据屏幕宽度自适应布局 | 常用于 Web / 多平台开发 |
dual_screen | 双屏与折叠屏设备支持插件 | 用于双屏设备的布局适配 |
arp_cache_loader | 获取本地网络设备的 MAC 地址信息 | 适用于局域网设备扫描与调试 |
三、🌐 获取本机 MAC 地址示例(使用 arp_cache_loader
)
dart
import 'package:arp_cache_loader/arp_cache_loader.dart';
void main() async {
// ① 原始 ARP 缓存作为字符串
final String rawArpCache = await ArpLoader.loadRawArpCache();
print('Raw ARP cache: $rawArpCache');
// ② ARP 缓存以 Map 形式加载
final Map<String, String> arpCacheMap = await ArpLoader.loadArpCacheAsMap();
print('ARP cache (Map): $arpCacheMap');
// ③ 示例:打印第一个 MAC 地址
print("First MAC: ${arpCacheMap.entries.first.value}");
}
💡 MAC 地址基础知识
- MAC 地址 是由网卡厂商依据 IEEE 规则分配的全球唯一硬件标识;
- 前 3 字节为 OUI(组织唯一标识符);
- 每个网络接口卡(NIC)对应唯一 MAC 地址:
- 仅有一个以太网口 → 1 个 MAC;
- 同时有以太网与 Wi-Fi → 各自对应一个 MAC;
- 服务器具多个端口 → 可能有多个 MAC 地址。
四、🧩 Protobuf 编译与使用流程
1️⃣ 创建 .proto
文件
proto
syntax = "proto3";
package myapp;
message Person {
string name = 1;
int32 age = 2;
}
2️⃣ 安装并配置 Protobuf
bash
# 解压 protoc 安装包
$ cd ~/Application/protoc-24.3-linux-x86_64/
$ export PATH="$PATH":"$PWD/bin"
3️⃣ 安装 Dart 插件
bash
flutter pub global activate protoc_plugin
⚠️ 请确保
$HOME/.pub-cache/bin
已添加到 PATH 中:
bash
export PATH="$PATH":"$HOME/.pub-cache/bin"
4️⃣ 添加依赖
bash
flutter pub add protobuf
flutter pub add fixnum
5️⃣ 生成 Dart 文件
bash
protoc --dart_out=./lib/protos ./lib/protos/message.proto
五、🔤 字体加载与 Google Fonts 本地化
dart
import 'package:google_fonts/google_fonts.dart';
void main() async {
GoogleFonts.config.allowRuntimeFetching = false;
// 禁止运行时从 Google Fonts 服务器下载字体
}
📘 说明
allowRuntimeFetching = false
表示:- 应用在运行时不会从 Google Fonts 在线获取字体;
- 需提前下载字体并在本地项目中包含;
- 适用于性能优化或需完全离线运行的应用。
🪶 字体默认规则拓展
系统 | 默认字体 | 说明 |
---|---|---|
Android / Material | Roboto | MaterialApp 默认字体 |
iOS / Cupertino | San Francisco | CupertinoApp 默认字体 |
🧩 可在 pubspec.yaml
中声明自定义字体资源,并通过 TextStyle(fontFamily: 'MyFont')
使用。
六、💾 Flutter 数据持久化 --- 使用 get_storage
get_storage
是轻量级、高性能的本地键值对存储插件。
🧱 初始化
dart
import 'package:get_storage/get_storage.dart';
void main() async {
await GetStorage.init(); // 初始化本地存储
runApp(MyApp());
}
⚙️ 使用方法
dart
final box = GetStorage();
// 写入数据
box.write('username', 'Ada');
// 读取数据
print(box.read('username')); // 输出: Ada
💡 特性
- 无需复杂数据库, 适合存储配置/缓存;
- 读写快速, 立即生效;
- 跨启动持久化, 程序重启后仍可访问。
✅ 总结
分类 | 插件 / 技术 | 功能概要 |
---|---|---|
项目信息读取 | loadYaml + rootBundle |
从 pubspec.yaml 读取版本 |
数据持久化 | get_storage |
快速键值存储 |
布局适配 | adaptive_breakpoints |
响应式布局 |
双屏设备 | dual_screen |
折叠屏 / 双屏支持 |
网络信息 | arp_cache_loader |
设备 MAC 地址读取 |
字体优化 | GoogleFonts.config |
禁止字体运行时动态抓取 |
Protobuf | protoc_plugin + protobuf |
跨语言高效数据结构定义 |