Flutter本地数据存储插件shared_preferences_tools的使用
Flutter本地数据存储插件shared_preferences_tools的使用
shared_preferences_tools
是一个为 Flutter 的 shared_preferences
包提供的 DevTools 扩展。通过这个工具,你可以在 Flutter DevTools 中更方便地管理和操作 SharedPreferences
中的数据。
特性
- 列出所有键:查看应用中存储的所有
SharedPreferences
键。 - 搜索特定键:快速找到特定的键。
- 直接编辑或删除值:对值进行编辑或删除,更改会立即反映在应用中。
支持的数据类型包括:
String
int
double
bool
List<String>
选择键 | 编辑值 |
---|---|
入门指南
要将此包添加到你的项目中,运行以下命令:
flutter pub add shared_preferences_tools
完成后,只需打开 Flutter DevTools 并使用 SharedPreferences
工具即可!
贡献到此包
- 运行示例项目(或任何依赖于
shared_preferences_tools
的项目),并复制其调试服务 URL。 - 通过 VSCode 或运行以下命令来运行
shared_preferences_tools_devtools_extension
项目:
flutter run -d chrome --dart-define=use_simulated_environment=true
更多详细信息,请参阅 devtools_extensions 包文档。
示例代码
以下是一个完整的示例代码,展示了如何使用 shared_preferences_tools
和 shared_preferences
存储和读取数据。
example/lib/main.dart
// ignore_for_file: public_member_api_docs
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:shared_preferences/shared_preferences.dart';
Future<void> _setInitialValues() async {
WidgetsFlutterBinding.ensureInitialized();
final SharedPreferences prefs = await SharedPreferences.getInstance();
if (prefs.getKeys().isNotEmpty) {
return;
}
final SharedPreferencesAsync asyncPrefs = SharedPreferencesAsync();
await <Future<void>>[
prefs.setString('someStringKey', 'Hello, world!'),
prefs.setInt('someIntKey', 42),
prefs.setDouble('someDoubleKey', 3.14),
prefs.setBool('someBoolKey', true),
prefs.setStringList(
'someStringListKey',
<String>['Hello World 1', 'Hello World 2'],
),
asyncPrefs.setString('asyncStringKey', 'Hello, async world!'),
asyncPrefs.setInt('asyncIntKey', 24),
asyncPrefs.setDouble('asyncDoubleKey', 1.41),
asyncPrefs.setBool('asyncBoolKey', false),
asyncPrefs.setStringList(
'asyncStringListKey',
<String>['Hello Async World 1', 'Hello Async World 2'],
),
].wait;
}
Future<void> main() async {
await _setInitialValues();
runApp(const SharedPreferencesToolsExample());
}
class SharedPreferencesToolsExample extends StatelessWidget {
const SharedPreferencesToolsExample({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Shared Preferences Tools Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const Scaffold(
body: _Content(),
),
);
}
}
class _Content extends HookWidget {
const _Content();
@override
Widget build(BuildContext context) {
final SharedPreferences? prefs =
useFuture(SharedPreferences.getInstance()).data;
final SharedPreferencesAsync asyncPrefs =
useMemoized(() => SharedPreferencesAsync());
final ValueNotifier<bool> loadingState = useState(false);
final asyncStringKey = useFuture(asyncPrefs.getString('asyncStringKey')).data;
final asyncIntKey = useFuture(asyncPrefs.getInt('asyncIntKey')).data;
final asyncDoubleKey = useFuture(asyncPrefs.getDouble('asyncDoubleKey')).data;
final asyncBoolKey = useFuture(asyncPrefs.getBool('asyncBoolKey')).data;
final asyncStringListKey = useFuture(asyncPrefs.getStringList('asyncStringListKey')).data;
if (prefs == null || loadingState.value) {
return const Center(
child: CircularProgressIndicator(),
);
}
return Center(
child: ListView(
shrinkWrap: true,
padding: const EdgeInsets.all(16),
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('someStringKey: ${prefs.getString('someStringKey')}'),
const SizedBox(height: 8),
Text('someIntKey: ${prefs.getInt('someIntKey')}'),
const SizedBox(height: 8),
Text('someDoubleKey: ${prefs.getDouble('someDoubleKey')}'),
const SizedBox(height: 8),
Text('someBoolKey: ${prefs.getBool('someBoolKey')}'),
const SizedBox(height: 8),
Text(
'someStringListKey: ${prefs.getStringList('someStringListKey')}',
),
const SizedBox(height: 8),
Text('asyncStringKey: $asyncStringKey'),
const SizedBox(height: 8),
Text('asyncIntKey: $asyncIntKey'),
const SizedBox(height: 8),
Text('asyncDoubleKey: $asyncDoubleKey'),
const SizedBox(height: 8),
Text('asyncBoolKey: $asyncBoolKey'),
const SizedBox(height: 8),
Text('asyncStringListKey: $asyncStringListKey'),
],
),
],
),
);
}
}
解释
- 初始化数据:
_setInitialValues
函数在应用启动时初始化一些示例数据。 - 主函数:
main
函数调用_setInitialValues
并启动应用。 - 应用入口:
SharedPreferencesToolsExample
是应用的入口点,创建了一个MaterialApp
。 - 内容展示:
_Content
组件使用flutter_hooks
来管理状态,并展示从SharedPreferences
中读取的数据。
通过这个示例,你可以看到如何使用 shared_preferences
存储和读取不同类型的值,并且可以通过 shared_preferences_tools
在 DevTools 中方便地管理这些数据。
更多关于Flutter本地数据存储插件shared_preferences_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地数据存储插件shared_preferences_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用shared_preferences_tools
插件进行本地数据存储的示例代码。shared_preferences_tools
是对shared_preferences
的一个封装,提供了更简洁的API来进行键值对存储。不过需要注意的是,shared_preferences_tools
并不是一个官方或广泛使用的包,这里我们假设它提供了类似于shared_preferences
的功能,但API更加友好。如果实际上没有这个包,你可以参考shared_preferences
的用法。
首先,确保你的pubspec.yaml
文件中包含了shared_preferences
依赖(因为shared_preferences_tools
如果存在,很可能也是基于shared_preferences
的):
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.0.15 # 请检查并使用最新版本
然后,运行flutter pub get
来安装依赖。
接下来,我们编写一个示例,展示如何使用shared_preferences
(假设shared_preferences_tools
有类似API):
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SharedPreferences Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SharedPreferencesDemo(),
);
}
}
class SharedPreferencesDemo extends StatefulWidget {
@override
_SharedPreferencesDemoState createState() => _SharedPreferencesDemoState();
}
class _SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
late SharedPreferences _preferences;
@override
void initState() {
super.initState();
_initPreferences();
}
Future<void> _initPreferences() async {
_preferences = await SharedPreferences.getInstance();
// 假设有一个初始值设置
String? initialValue = _preferences.getString('key_example');
if (initialValue == null) {
// 如果没有值,则设置默认值
await _preferences.setString('key_example', 'Hello, SharedPreferences!');
}
setState(() {}); // 触发UI更新,虽然这里其实不需要,因为初始值读取不是UI依赖的
}
Future<void> _saveData() async {
setState(() {
// 显示一个加载指示器或者禁用按钮等,这里简化为直接调用
_preferences.setString('key_example', 'Data has been updated!');
});
await _preferences.setString('key_example', 'Data has been updated!');
// 更新UI(如果需要的话)
}
Future<void> _retrieveData() async {
String value = _preferences.getString('key_example') ?? 'No Data';
// 显示数据,这里简化为打印到控制台
print('Retrieved value: $value');
// 在实际应用中,你可能想要更新UI来显示这个值
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SharedPreferences Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _saveData,
child: Text('Save Data'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _retrieveData,
child: Text('Retrieve Data'),
),
],
),
),
);
}
}
在上面的代码中,我们做了以下几件事:
- 在
initState
中初始化SharedPreferences
实例。 - 检查并可能设置一个初始值。
- 提供两个按钮来保存和检索数据。
- 使用
_preferences.setString
方法来存储数据,使用_preferences.getString
方法来检索数据。
请注意,如果你实际上使用的是shared_preferences_tools
(假设它存在),API可能会略有不同,但核心思想是相同的:初始化、保存和检索键值对数据。你应该参考该插件的文档来获取确切的API用法。如果shared_preferences_tools
不存在,上面的代码示例使用shared_preferences
也可以达到相同的目的。