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 跨语言高效数据结构定义
相关推荐
大龄秃头程序员1 小时前
Riverpod 深度解析:从响应式本质到最小可运行闭环
flutter
曹小强wxx2 小时前
让 AI 写代码不“翻车”:用 Claude Code + Codex 给 Flutter 项目搭一套工程规范
flutter·ai编程·claude
西西学代码5 小时前
像素和颜色之间的转换(Flutter)
前端·javascript·flutter
曹小强wxx6 小时前
Flutter 局域网设备发现:UDP 广播 + mDNS 双路合并,以及靠谱的在线判定与断线重连
物联网·网络协议·flutter
FungLeo8 小时前
成为全栈·Flutter App 篇·移动端错误与限流:429、重试和写请求边界
flutter·限流·dart·dio·错误处理·成为全栈
恋猫de小郭8 小时前
Kotlin Toolchain 0.13,JetBrains 推荐 KMP 都切换到到全新工具链
android·前端·flutter
m0_738185828 小时前
Flutter 鸿蒙化实战:rive 适配 OpenHarmony,Rive 动画
flutter·华为·harmonyos·鸿蒙
Geek_Vison20 小时前
保险APP已经用了Flutter,还能接入小程序吗?
flutter·小程序·uni-app·mpaas·小程序容器
FungLeo20 小时前
成为全栈·Flutter App 篇·go_router 与四 Tab App Shell:保留导航状态、深链和登录回跳
flutter·移动开发·成为全栈·go_router·路由设计·深链接
m0_7381858221 小时前
Flutter 鸿蒙化实战:screen_protector 适配 OpenHarmony,防截屏/防泄露
flutter·华为·harmonyos·鸿蒙