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

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 跨语言高效数据结构定义
相关推荐
傅里叶4 小时前
Flutter之《环境与依赖配置》
flutter
大雷神4 小时前
【成长纪实】HarmonyOS中ArkTS与Flutter数据类型对比详解
flutter
未来猫咪花9 小时前
Riverpod 3.0:一个过度设计的反面教材
flutter
消失的旧时光-194310 小时前
Flutter 并发编程全解:从零掌握 Isolate
flutter
西西学代码18 小时前
Flutter---EQ均衡器
flutter
LinXunFeng1 天前
Flutter webview 崩溃率上升怎么办?我的分析与解决方案
flutter·ios·webview
西西学代码1 天前
Flutter---GridView+自定义控件
flutter
hweiyu001 天前
Flutter零基础极速入门到进阶实战(视频教程)
flutter
hweiyu001 天前
Flutter高级进阶教程(视频教程)
flutter