Flutter 工程环境、插件使用、protobuf配置与字体/持久化管理

198 阅读2分钟

Flutter 工程环境、插件使用、protobuf配置与字体/持久化管理


🧭 Flutter 常用开发配置与功能实践笔记


一、📦 从 pubspec.yaml 中获取项目版本号

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

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 文件

syntax = "proto3";
package myapp;

message Person {
  string name = 1;
  int32 age = 2;
}

2️⃣ 安装并配置 Protobuf

# 解压 protoc 安装包
$ cd ~/Application/protoc-24.3-linux-x86_64/
$ export PATH="$PATH":"$PWD/bin"

3️⃣ 安装 Dart 插件

flutter pub global activate protoc_plugin

⚠️ 请确保 $HOME/.pub-cache/bin 已添加到 PATH 中:

export PATH="$PATH":"$HOME/.pub-cache/bin"

4️⃣ 添加依赖

flutter pub add protobuf
flutter pub add fixnum

5️⃣ 生成 Dart 文件

protoc --dart_out=./lib/protos ./lib/protos/message.proto

五、🔤 字体加载与 Google Fonts 本地化

import 'package:google_fonts/google_fonts.dart';

void main() async {
  GoogleFonts.config.allowRuntimeFetching = false;
  // 禁止运行时从 Google Fonts 服务器下载字体
}

📘 说明

  • allowRuntimeFetching = false 表示:
    • 应用在运行时不会从 Google Fonts 在线获取字体;
    • 需提前下载字体并在本地项目中包含;
  • 适用于性能优化或需完全离线运行的应用。

🪶 字体默认规则拓展

系统默认字体说明
Android / MaterialRobotoMaterialApp 默认字体
iOS / CupertinoSan FranciscoCupertinoApp 默认字体

🧩 可在 pubspec.yaml 中声明自定义字体资源,并通过 TextStyle(fontFamily: 'MyFont') 使用。


六、💾 Flutter 数据持久化 — 使用 get_storage

get_storage 是轻量级、高性能的本地键值对存储插件。

🧱 初始化

import 'package:get_storage/get_storage.dart';

void main() async {
  await GetStorage.init(); // 初始化本地存储
  runApp(MyApp());
}

⚙️ 使用方法

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禁止字体运行时动态抓取
Protobufprotoc_plugin + protobuf跨语言高效数据结构定义