Flutter集成三方库开发鸿蒙端本地日志管理APP实战教程
作为鸿蒙新手开发者,入门Flutter跨端开发的核心是"掌握三方库集成+鸿蒙端适配"。本文将带大家从零搭建一个可直接运行在鸿蒙设备(模拟器/真机)的本地日志管理APP,全程聚焦具体项目实操,不堆砌冗余理论,每一步都有明确操作指引,每一行代码都有详细注释,确保新手能跟着做、做得出。
欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net
前言
作为鸿蒙新手开发者,入门Flutter跨端开发的核心是"掌握三方库集成+鸿蒙端适配"。本文将带大家从零搭建一个可直接运行在鸿蒙设备(模拟器/真机)的本地日志管理APP,全程聚焦具体项目实操,不堆砌冗余理论,每一步都有明确操作指引,每一行代码都有详细注释,确保新手能跟着做、做得出。
本项目核心目标:使用Flutter开发,集成3个高频实用三方库,完成鸿蒙端适配,实现"日志添加、日志查看、日志搜索、日志删除、本地持久化存储"核心功能,最终生成可安装、可交互的鸿蒙端APP,贴合鸿蒙开发场景,同时巩固Flutter三方库使用技巧。
项目核心关键词:Flutter、三方库、鸿蒙(全程围绕这三个词展开,所有操作均适配鸿蒙端,避开复杂逻辑,聚焦新手可落地的实操场景)
一、项目核心信息(新手必看)
1.1 项目名称
Flutter_Harmony_LogManager(鸿蒙端Flutter日志管理APP)
1.2 项目核心功能(新手易实现,无复杂逻辑)
- 基础功能:添加日志(支持输入日志内容、选择日志类型)
- 核心功能:查看所有本地日志(按时间倒序排列)
- 实用功能:搜索日志(根据关键词筛选)、删除日志(单条删除/清空全部)
- 持久化功能:日志数据本地存储,关闭APP后重新打开不丢失
1.3 本次集成的三方库(鸿蒙端全兼容,新手友好)
本项目拒绝复杂三方库,选用3个Flutter高频、轻量、鸿蒙完美兼容的三方库,覆盖"本地存储、UI组件、搜索功能",贴合项目需求且易上手:
- hive:轻量级本地数据库三方库(比shared_preferences更适合结构化数据存储,鸿蒙端无适配问题),用于存储日志数据(日志内容、日志类型、添加时间);
- flutter_svg:UI组件三方库,用于展示日志类型图标(如信息、警告、错误图标),让APP界面更美观,鸿蒙端渲染无异常;
- 原生TextField:使用Flutter原生TextField实现搜索功能(替代searchbar_2,避免兼容性问题),快速实现日志搜索功能,无需自己编写搜索逻辑,适配鸿蒙端输入交互。
1.4 开发环境要求(和鸿蒙开发环境兼容,新手可直接复用)
无需额外安装新环境,复用鸿蒙+Flutter基础环境即可,具体要求如下:
- Flutter SDK:3.10.0及以上(确保支持鸿蒙端);
- 鸿蒙开发环境:DevEco Studio 4.0及以上(已配置鸿蒙SDK,能启动鸿蒙模拟器/连接真机);
- 开发工具:VS Code(推荐,操作更轻便)或Android Studio;
- 前置准备:已开启Flutter鸿蒙支持(执行过flutter config --enable-harmonyos命令)。
二、鸿蒙+Flutter环境检查(新手必做,避免后续报错)
在开始项目前,先检查环境是否适配,确保Flutter能正常识别鸿蒙设备,步骤如下:
-
打开VS Code/终端,输入命令,检查Flutter环境:
flutter doctor重点查看"HarmonyOS"相关提示,确保输出为【✓】,如下所示(无报错即正常):
[✓] HarmonyOS (develop for HarmonyOS) • HarmonyOS SDK version: 11 • HarmonyOS NDK version: 2.0.0 • HarmonyOS Studio path: D:\DevEco Studio -
若未检测到鸿蒙支持,执行以下命令开启(执行后重新检查环境):
flutter config --enable-harmonyos -
启动鸿蒙模拟器(DevEco Studio中操作):打开DevEco Studio → 点击"Tools"→"Device Manager"→ 选择一个鸿蒙模拟器(推荐Phone类型,如P50 Pro)→ 点击"Launch"启动,启动成功后,模拟器会自动显示在桌面。
-
终端输入命令,查看已连接的设备,确认鸿蒙模拟器被识别:
flutter devices输出中会显示鸿蒙模拟器信息,类似:“127.0.0.1:5555 (mobile) • 127.0.0.1:5555 • ohos-x64 • Ohos OpenHarmony-6.0.0.47 (API 20)”,即识别成功。
三、创建Flutter鸿蒙项目(步骤详细,新手零失误)
本步骤将创建一个支持鸿蒙端的Flutter项目,全程使用命令行操作,简单易懂,步骤如下:
-
打开终端,进入项目存放目录,执行以下命令创建项目:
flutter create flutter_harmony_demo cd flutter_harmony_demo -
添加鸿蒙平台支持:
flutter create --platforms=harmonyos . -
创建完成后,项目目录结构如下:
flutter_harmony_demo/ ├── lib/ │ └── main.dart # 项目入口文件 ├── ohos/ # 鸿蒙平台代码 ├── pubspec.yaml # 项目配置文件 └── ...
四、集成三方库(核心步骤,鸿蒙端适配关键)
本项目集成3个三方库(hive、flutter_svg、原生TextField),所有库均已验证鸿蒙端兼容,步骤分为"配置依赖→安装依赖→初始化配置",全程复制代码即可,无需手动修改。
4.1 配置三方库依赖(修改pubspec.yaml文件)
pubspec.yaml是Flutter项目的依赖配置文件,所有三方库都需要在这里配置,步骤如下:
打开pubspec.yaml文件,修改dependencies和dev_dependencies部分:
name: flutter_harmony_demo
description: "A new Flutter project."
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ^3.6.2
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8
hive: ^2.2.3
hive_flutter: ^1.1.0
flutter_svg: ^2.0.9
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
hive_generator: ^2.0.1
build_runner: ^2.4.8
flutter:
uses-material-design: true
assets:
- assets/icons/
依赖说明:
hive和hive_flutter:本地数据库存储flutter_svg:SVG图标渲染hive_generator和build_runner:自动生成Hive适配器代码
4.2 安装三方库(终端执行命令)
配置完成后,需要执行命令下载并安装三方库,步骤如下:
flutter pub get
4.3 初始化三方库(鸿蒙端适配关键)
三方库安装完成后,需要进行简单初始化,确保在鸿蒙端能正常使用,重点初始化hive(本地数据库),步骤如下:
注意:鸿蒙端Hive初始化特殊处理
由于鸿蒙端path_provider插件可能未完全支持,需要使用Hive.init()替代Hive.initFlutter(),使用系统临时目录作为存储路径:
import 'dart:io';
import 'package:hive_flutter/hive_flutter.dart';
// 鸿蒙端适配的Hive初始化
final appDir = Directory.systemTemp.path;
Hive.init(appDir);
五、项目核心页面开发(完整代码+详细注释,新手可直接复制)
本项目分为2个核心页面:日志管理主页面(LogManagerPage)、添加日志页面(AddLogPage),所有页面均集成三方库功能,适配鸿蒙端交互和UI,步骤如下:
5.1 项目目录整理(先规范目录,避免代码混乱)
在lib目录下,创建"pages"和"models"文件夹,用于存放页面和数据模型,然后在对应文件夹下创建文件:
整理后,项目核心目录结构如下(新手可对照检查):
lib/
├── main.dart # 项目入口文件
├── models/ # 数据模型文件夹
│ ├── log_model.dart # 日志数据模型
│ └── log_model.g.dart # 自动生成的模型代码
└── pages/ # 页面文件夹
├── log_manager_page.dart # 日志管理主页面
└── add_log_page.dart # 添加日志页面
5.2 编写数据模型(log_model.dart)
数据模型用于定义日志的数据结构,使用Hive注解实现本地存储:
import 'package:hive/hive.dart';
part 'log_model.g.dart';
(typeId: 0)
class LogModel extends HiveObject {
(0)
String logContent;
(1)
String logType;
(2)
String addTime;
LogModel({
required this.logContent,
required this.logType,
required this.addTime,
});
}
代码说明:
@HiveType(typeId: 0):Hive类型注解,每个模型需要唯一的typeId@HiveField(0/1/2):字段注解,定义存储字段extends HiveObject:继承HiveObject,获得Hive对象的方法
5.3 生成Hive适配器代码
数据模型编写完成后,需要运行build_runner生成适配器代码:
dart run build_runner build
生成成功后,会在models目录下生成log_model.g.dart文件。
5.4 编写添加日志页面(add_log_page.dart)
该页面用于添加日志,集成flutter_svg三方库展示图标,核心功能:输入日志内容、选择日志类型、点击保存按钮将日志存入本地数据库,代码如下(复制粘贴即可,注释详细):
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hive/hive.dart';
import '../models/log_model.dart';
class AddLogPage extends StatefulWidget {
const AddLogPage({super.key});
State<AddLogPage> createState() => _AddLogPageState();
}
class _AddLogPageState extends State<AddLogPage> {
// 1. 日志内容输入控制器(用于获取输入框内容)
final TextEditingController _contentController = TextEditingController();
// 2. 选中的日志类型(默认选中info,对应信息类型)
String _selectedLogType = 'info';
// 3. 获取Hive存储盒子(用于存储日志)
final Box<LogModel> _logBox = Hive.box<LogModel>('logBox');
// 保存日志(核心方法,调用hive三方库存储数据)
void _saveLog() {
// 获取输入的日志内容,去除空格
String content = _contentController.text.trim();
// 校验:日志内容不能为空
if (content.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('请输入日志内容')),
);
return;
}
// 获取当前时间,作为日志添加时间(格式:年-月-日 时:分:秒)
String addTime = DateTime.now().toString().split('.').first;
// 创建日志模型对象
LogModel log = LogModel(
logContent: content,
logType: _selectedLogType,
addTime: addTime,
);
// 存入Hive本地数据库(鸿蒙端会自动持久化)
_logBox.add(log);
// 提示保存成功
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('日志添加成功')),
);
// 清空输入框
_contentController.clear();
// 返回主页面
Navigator.pop(context);
}
// 根据日志类型,返回对应的图标(集成flutter_svg三方库)
Widget _getLogIcon(String type) {
String iconPath = '';
Color iconColor = Colors.grey;
// 根据类型设置图标路径和颜色
switch (type) {
case 'info':
iconPath = 'assets/icons/info.svg';
iconColor = Colors.blue;
break;
case 'warning':
iconPath = 'assets/icons/warning.svg';
iconColor = Colors.orange;
break;
case 'error':
iconPath = 'assets/icons/error.svg';
iconColor = Colors.red;
break;
}
// 使用flutter_svg展示svg图标(鸿蒙端完美渲染)
return SvgPicture.asset(
iconPath,
width: 24,
height: 24,
colorFilter: ColorFilter.mode(iconColor, BlendMode.srcIn),
);
}
Widget build(BuildContext context) {
return Scaffold(
// 鸿蒙端导航栏适配,避免状态栏遮挡
appBar: AppBar(
title: const Text('添加日志'),
centerTitle: true,
// 鸿蒙端导航栏返回按钮适配
leading: IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () => Navigator.pop(context),
),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 1. 日志类型选择(单选)
const Text(
'选择日志类型',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
),
const SizedBox(height: 12),
// 日志类型选项(info/warning/error)
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_buildLogTypeItem('info', '信息'),
_buildLogTypeItem('warning', '警告'),
_buildLogTypeItem('error', '错误'),
],
),
const SizedBox(height: 20),
// 2. 日志内容输入框
const Text(
'日志内容',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
),
const SizedBox(height: 8),
TextField(
controller: _contentController,
// 鸿蒙端输入框适配,支持多行输入
maxLines: 5,
decoration: const InputDecoration(
border: OutlineInputBorder(),
hintText: '请输入日志内容(如:鸿蒙端APP启动成功)',
hintStyle: TextStyle(color: Colors.grey),
),
),
const SizedBox(height: 30),
// 3. 保存按钮(全屏宽度)
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: _saveLog,
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 16),
),
child: const Text('保存日志', style: TextStyle(fontSize: 18)),
),
),
],
),
),
);
}
// 构建日志类型选项(单选按钮)
Widget _buildLogTypeItem(String type, String title) {
return GestureDetector(
onTap: () {
// 点击切换选中的日志类型
setState(() {
_selectedLogType = type;
});
},
child: Column(
children: [
// 日志类型图标(使用flutter_svg)
_getLogIcon(type),
const SizedBox(height: 8),
// 日志类型标题
Text(title),
const SizedBox(height: 4),
// 选中状态指示器(圆形)
Container(
width: 12,
height: 12,
decoration: BoxDecoration(
shape: BoxShape.circle,
// 选中状态为蓝色,未选中为灰色
color: _selectedLogType == type ? Colors.blue : Colors.grey,
),
),
],
),
);
}
}
5.5 编写日志管理主页面(log_manager_page.dart)
该页面是项目核心页面,集成hive(本地存储)、原生TextField(搜索)、flutter_svg(图标)三个三方库,实现日志查看、搜索、删除功能,代码如下(复制粘贴即可,注释详细):
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:flutter_svg/flutter_svg.dart';
import '../models/log_model.dart';
import 'add_log_page.dart';
class LogManagerPage extends StatefulWidget {
const LogManagerPage({super.key});
State<LogManagerPage> createState() => _LogManagerPageState();
}
class _LogManagerPageState extends State<LogManagerPage> {
// 1. 获取Hive存储盒子(用于读取、删除日志)
final Box<LogModel> _logBox = Hive.box<LogModel>('logBox');
// 2. 搜索关键词(用于筛选日志)
String _searchKeyword = '';
// 删除单条日志(调用hive三方库)
void _deleteSingleLog(int index) {
// 弹出确认对话框(鸿蒙端适配)
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text('确认删除'),
content: const Text('确定要删除这条日志吗?删除后无法恢复'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text('取消'),
),
TextButton(
onPressed: () {
// 从Hive中删除指定索引的日志
_logBox.deleteAt(index);
// 关闭对话框
Navigator.pop(context);
// 提示删除成功
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('日志删除成功')),
);
},
child: const Text('删除', style: TextStyle(color: Colors.red)),
),
],
),
);
}
// 清空所有日志
void _clearAllLogs() {
if (_logBox.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('暂无日志可清空')),
);
return;
}
// 弹出确认对话框
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text('确认清空'),
content: const Text('确定要清空所有日志吗?清空后无法恢复'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text('取消'),
),
TextButton(
onPressed: () {
// 清空Hive中的所有日志
_logBox.clear();
Navigator.pop(context);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('所有日志已清空')),
);
},
child: const Text('清空', style: TextStyle(color: Colors.red)),
),
],
),
);
}
// 根据日志类型,返回对应的图标和颜色(集成flutter_svg)
Widget _getLogIconAndColor(String type) {
String iconPath = '';
Color iconColor = Colors.grey;
switch (type) {
case 'info':
iconPath = 'assets/icons/info.svg';
iconColor = Colors.blue;
break;
case 'warning':
iconPath = 'assets/icons/warning.svg';
iconColor = Colors.orange;
break;
case 'error':
iconPath = 'assets/icons/error.svg';
iconColor = Colors.red;
break;
}
return SvgPicture.asset(
iconPath,
width: 28,
height: 28,
colorFilter: ColorFilter.mode(iconColor, BlendMode.srcIn),
);
}
// 获取日志类型标题
String _getLogTypeTitle(String type) {
switch (type) {
case 'info':
return '信息';
case 'warning':
return '警告';
case 'error':
return '错误';
default:
return '未知';
}
}
// 根据搜索关键词,筛选日志列表
List<LogModel> _filterLogs(List<LogModel> allLogs) {
if (_searchKeyword.isEmpty) {
// 无搜索关键词,返回所有日志(按时间倒序排列,最新的在最前面)
return allLogs.reversed.toList();
} else {
// 有搜索关键词,筛选包含关键词的日志
return allLogs
.where((log) => log.logContent.contains(_searchKeyword))
.toList()
.reversed
.toList();
}
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Flutter鸿蒙日志管理APP'),
centerTitle: true,
// 右上角清空按钮
actions: [
IconButton(
icon: const Icon(Icons.delete_sweep),
onPressed: _clearAllLogs,
tooltip: '清空所有日志',
),
],
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
// 1. 搜索框(使用原生TextField,鸿蒙端完美适配)
TextField(
decoration: InputDecoration(
hintText: '搜索日志内容...',
prefixIcon: const Icon(Icons.search),
suffixIcon: _searchKeyword.isNotEmpty
? IconButton(
icon: const Icon(Icons.clear),
onPressed: () {
setState(() {
_searchKeyword = '';
});
},
)
: null,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
),
filled: true,
fillColor: Colors.grey[100],
contentPadding: const EdgeInsets.symmetric(vertical: 0),
),
onChanged: (value) {
setState(() {
_searchKeyword = value;
});
},
),
const SizedBox(height: 16),
// 2. 日志列表(使用Hive监听数据变化,数据更新时自动刷新)
Expanded(
child: ValueListenableBuilder<Box<LogModel>>(
// 监听Hive盒子的数据变化
valueListenable: _logBox.listenable(),
builder: (context, box, child) {
// 获取所有日志
List<LogModel> allLogs = box.values.toList();
// 根据搜索关键词筛选日志
List<LogModel> filteredLogs = _filterLogs(allLogs);
// 无日志时显示的提示
if (filteredLogs.isEmpty) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.note_add, size: 60, color: Colors.grey),
const SizedBox(height: 16),
Text(
_searchKeyword.isEmpty
? '暂无日志,点击右下角添加'
: '未找到包含「' + _searchKeyword + '」的日志',
style: const TextStyle(fontSize: 16, color: Colors.grey),
),
],
),
);
}
// 有日志时显示列表
return ListView.builder(
itemCount: filteredLogs.length,
itemBuilder: (context, index) {
LogModel log = filteredLogs[index];
// 获取原始索引(用于删除)
int originalIndex = allLogs.indexOf(log);
return Card(
margin: const EdgeInsets.only(bottom: 12),
child: ListTile(
// 左侧图标(使用flutter_svg)
leading: _getLogIconAndColor(log.logType),
// 日志内容
title: Text(
log.logContent,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
// 日志类型和时间
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'类型: ' + _getLogTypeTitle(log.logType),
style: const TextStyle(fontSize: 12, color: Colors.grey),
),
Text(
'时间: ' + log.addTime,
style: const TextStyle(fontSize: 12, color: Colors.grey),
),
],
),
// 右侧删除按钮
trailing: IconButton(
icon: const Icon(Icons.delete_outline, color: Colors.red),
onPressed: () => _deleteSingleLog(originalIndex),
),
),
);
},
);
},
),
),
],
),
),
// 右下角添加按钮
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const AddLogPage()),
);
},
tooltip: '添加日志',
child: const Icon(Icons.add),
),
);
}
}
代码说明:
ValueListenableBuilder:监听Hive数据变化,自动刷新UITextField:原生搜索框,替代searchbar_2,鸿蒙端完美适配SvgPicture.asset:使用flutter_svg渲染SVG图标_filterLogs:根据关键词筛选日志列表
5.6 编写项目入口文件(main.dart)
main.dart是项目的入口文件,负责初始化Hive和启动应用:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'models/log_model.dart';
import 'pages/log_manager_page.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
try {
// 鸿蒙端适配:使用系统临时目录初始化Hive
final appDir = Directory.systemTemp.path;
Hive.init(appDir);
// 注册Hive适配器
Hive.registerAdapter(LogModelAdapter());
// 打开Hive存储盒子
await Hive.openBox<LogModel>('logBox');
runApp(const MyApp());
} catch (e) {
debugPrint('Hive init error: ' + e.toString());
runApp(MaterialApp(
home: Scaffold(
body: Center(
child: Text('初始化错误: ' + e.toString()),
),
),
));
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter鸿蒙日志管理APP',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
),
home: const LogManagerPage(),
);
}
}
代码说明:
Hive.init(appDir):鸿蒙端适配,使用系统临时目录替代path_providerHive.registerAdapter:注册数据模型适配器Hive.openBox:打开Hive存储盒子
六、添加SVG图标资源
项目使用flutter_svg展示日志类型图标,需要添加SVG图标文件:
- 在项目根目录创建
assets/icons/文件夹 - 在文件夹中添加三个SVG图标文件:
info.svg:信息图标warning.svg:警告图标error.svg:错误图标
info.svg示例代码:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
</svg>
warning.svg示例代码:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/>
</svg>
error.svg示例代码:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"/>
</svg>
七、运行项目(鸿蒙端)
所有代码编写完成后,即可运行项目到鸿蒙设备:
7.1 运行到鸿蒙模拟器
- 确保鸿蒙模拟器已启动
- 终端执行命令查看设备:
flutter devices - 运行项目:
(设备ID根据实际情况替换)flutter run -d 127.0.0.1:5555
7.2 热重载
运行成功后,修改代码后按r键进行热重载,快速查看修改效果。
八、项目总结
本项目成功实现了:
- ✅ Flutter项目创建与鸿蒙平台适配
- ✅ Hive本地数据库集成与鸿蒙端适配
- ✅ flutter_svg图标渲染
- ✅ 原生TextField搜索功能实现
- ✅ 日志添加、查看、搜索、删除功能
- ✅ 本地数据持久化存储
鸿蒙端适配要点总结:
- Hive初始化使用
Hive.init(Directory.systemTemp.path)替代Hive.initFlutter() - 使用原生TextField替代searchbar_2,避免兼容性问题
- SvgPicture使用
colorFilter参数设置颜色
通过本项目,新手可以掌握Flutter三方库集成、鸿蒙端适配、本地数据存储等核心技能,为后续开发更复杂的鸿蒙应用打下基础。
更多推荐




所有评论(0)