Flutter存储检查插件storage_inspector的使用
Flutter存储检查插件storage_inspector的使用
简介
Flutter local storage inspector 是一个允许开发者在运行时检查应用程序本地存储的库。在开发过程中,您可以使用 IntelliJ 基础 IDE 的 “Local storage inspector” 插件来检查和修改应用程序的本地文件、数据库、模型等。
主要特性
- SharedPreferences 插件
- Secure Storage 插件
- 基于 dart:io 的本地文件插件
- Drift 数据库插件
快速开始
创建 StorageServerDriver
首先,创建一个 StorageServerDriver
实例,用于管理本地存储服务器:
final driver = StorageServerDriver(
bundleId: 'com.example.test', // 用于标识
port: 0, // 默认为0,表示自动选择空闲端口
icon: '...', // 可选图标,用于视觉识别。可以是 Base64 编码的 PNG 或纯 SVG 字符串
);
添加服务器
接下来,注册您希望暴露的各个服务器。这些服务器作为插件包提供:
- Files: file_local_storage_inspector
- Preferences: preferences_local_storage_inspector
- Secure Storage: secure_storage_local_storage_inspector
示例代码如下:
final preferences = await SharedPreferences.getInstance();
final secureStorage = const FlutterSecureStorage();
final preferencesServer =
PreferencesKeyValueServer(preferences, 'Base Preferences');
final secureStorageServer =
SecureStorageKeyValueServer(secureStorage, 'Super secret storage');
final fileServer = DefaultFileServer(await _documentsDirectory(), "Cache files");
driver.addKeyValueServer(preferencesServer);
driver.addKeyValueServer(secureStorageServer);
driver.addFileServer(fileServer);
Future<String> _documentsDirectory() async {
if (kIsWeb) return '.';
return (await getApplicationDocumentsDirectory()).path;
}
启动 Inspector
配置完成后,启动驱动程序以启动 Inspector 和插件的公告服务器:
await driver.start();
关闭 Inspector
如果需要关闭服务器,可以调用:
await driver.stop();
高级用法
暂停
如果您希望在应用程序完全启动之前对某些本地存储进行操作,可以在启动驱动程序时传递 paused: true
参数。这将确保 await driver.start(paused: true)
只有在 Inspector 插件/API 发送 resume
信号后才返回。服务器在接收到此信号之前仍然会处理请求,允许您动态更改初始值。
await driver.start(paused: true);
自定义集成
为了编写自己的系统集成(例如:修改纯内存键值存储),只需实现最符合您需求的正确服务器接口即可。
abstract class KeyValueServer{} // 最通用的键值服务器,支持任意键和值类型
abstract class SimpleKeyValueServer{} // 更简单的键值服务器变体,仅支持字符串键和值
abstract class FileServer{} // 服务分层存储二进制数据的服务器
完整示例代码
下面是一个完整的示例代码,展示了如何使用 storage_inspector
插件:
import 'package:file_local_storage_inspector/file_local_storage_inspector.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:path_provider/path_provider.dart';
import 'package:preferences_local_storage_inspector/preferences_local_storage_inspector.dart';
import 'package:secure_storage_local_storage_inspector/secure_storage_local_storage_inspector.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:storage_inspector/storage_inspector.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// ignore: avoid_print
storageInspectorLogger = (e) => print(e);
final preferences = await SharedPreferences.getInstance();
final driver = StorageServerDriver(
bundleId: 'com.example.test',
icon: '<some icon>',
);
final keyValueServer =
PreferencesKeyValueServer(preferences, 'Preferences', keySuggestions: {
const ValueWithType(StorageType.string, 'testBool'),
const ValueWithType(StorageType.string, 'testInt'),
const ValueWithType(StorageType.string, 'testFloat'),
});
driver.addKeyValueServer(keyValueServer);
final secureKeyValueServer = SecureStorageKeyValueServer(
const FlutterSecureStorage(), 'Preferences',
keySuggestions: {
'testBool',
'testInt',
'testFloat',
});
driver.addKeyValueServer(secureKeyValueServer);
final fileServer =
DefaultFileServer(await _documentsDirectory(), 'App Documents');
driver.addFileServer(fileServer);
// Don't wait for a connection from the instrumentation driver
await driver.start(paused: false);
// run app
runApp(const MyApp());
await driver.stop(); // Optional when main ends
}
Future<String> _documentsDirectory() async {
if (kIsWeb) return '.';
return (await getApplicationDocumentsDirectory()).path;
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
通过以上步骤,您可以在开发过程中轻松地检查和调试 Flutter 应用程序的本地存储。希望这对您有所帮助!
更多关于Flutter存储检查插件storage_inspector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter存储检查插件storage_inspector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用storage_inspector
插件来检查存储的示例代码和步骤。storage_inspector
插件允许你在Flutter应用中方便地检查和修改本地存储(如SharedPreferences、SQLite等)的数据。
步骤 1:添加依赖
首先,你需要在pubspec.yaml
文件中添加storage_inspector
依赖:
dependencies:
flutter:
sdk: flutter
storage_inspector: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来获取依赖。
步骤 2:配置应用
在你的main.dart
文件中,你需要进行一些配置来启用storage_inspector
。
import 'package:flutter/material.dart';
import 'package:storage_inspector/storage_inspector.dart';
void main() {
// 初始化StorageInspector
StorageInspector.init(
// 如果需要,你可以传递自定义的StorageInspectorOptions
// 例如:StorageInspectorOptions(enabled: true, ...)
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Storage Inspector Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 示例:使用SharedPreferences存储数据
final SharedPreferences _preferences = await SharedPreferences.getInstance();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Storage Inspector Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'${_preferences.getInt('counter') ?? 0}',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
void _incrementCounter() {
setState(() {
// 更新SharedPreferences中的值
_preferences.setInt('counter', (_preferences.getInt('counter') ?? 0) + 1);
});
}
}
步骤 3:运行应用并连接Storage Inspector
- 运行你的Flutter应用。
- 打开Chrome DevTools(通常可以通过
chrome://inspect
访问)。 - 在DevTools中找到你的Flutter应用,并点击“Inspect”按钮。
- 在打开的DevTools窗口中,你应该能看到一个名为“Storage Inspector”的选项卡。
- 点击“Storage Inspector”选项卡,你将能够查看和编辑你的应用的存储数据。
注意事项
- 确保你的Flutter和Dart环境是最新的,以便兼容
storage_inspector
插件。 storage_inspector
插件可能需要在DevTools中启用一些额外的调试选项。- 在生产环境中,请禁用或谨慎使用
storage_inspector
,因为它可能会暴露敏感信息。
通过上述步骤,你应该能够在Flutter应用中使用storage_inspector
插件来方便地检查和修改存储数据。