Flutter本地数据存储插件native_shared_preferences的使用
Flutter本地数据存储插件native_shared_preferences的使用
Migration Shared Preferences
这个插件是shared_preferences
包的一个副本,但没有在键前添加前缀。它用于从以前的原生应用程序迁移数据。
问题在于Flutter在读取和写入时会给键添加一个前缀。因此我们无法读取旧的键。
此外,对于Android,您现在可以在android/app/src/main/res/values/strings.xml
中指定资源文件的名称:
<resources>
...
<string name="flutter_shared_pref_name">resource_name</string>
...
</resources>
只有在需要从以前的原生应用版本获取共享首选项时才使用此插件。其他情况下请使用官方的shared_preferences
包。
要管理迁移,请使用此软件包 version_migration
Installation
在pubspec.yaml
中添加:
native_shared_preferences: ^2.0.10
Usage
要使用此插件,只需在pubspec.yaml
文件中添加native_shared_preferences
Example
下面是一个完整的示例demo,演示了如何使用native_shared_preferences
来保存和读取计数器的值,并且展示了如何在应用程序重启后保持这些值。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:native_shared_preferences/native_shared_preferences.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SharedPreferences Demo',
home: SharedPreferencesDemo(),
);
}
}
class SharedPreferencesDemo extends StatefulWidget {
SharedPreferencesDemo({Key? key}) : super(key: key);
@override
SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
}
class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
Future<NativeSharedPreferences> _prefs = NativeSharedPreferences.getInstance();
Future<int>? _counter;
Future<void> _incrementCounter() async {
final NativeSharedPreferences prefs = await _prefs;
final int counter = (prefs.getInt('counter') ?? 0) + 1;
setState(() {
_counter = prefs.setInt("counter", counter).then((bool success) {
return counter;
});
});
}
void _resetCounter() async {
final NativeSharedPreferences prefs = await _prefs;
setState(() {
_counter = prefs.setInt("counter", null).then((bool success) => 0);
});
}
@override
void initState() {
super.initState();
_counter = _prefs.then((NativeSharedPreferences prefs) {
return (prefs.getInt('counter') ?? 0);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("NativeSharedPreferences Demo"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FutureBuilder<int>(
future: _counter,
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return const CircularProgressIndicator();
default:
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
return Text(
'Button tapped ${snapshot.data} time${snapshot.data == 1 ? '' : 's'}.\n\n'
'This should persist across restarts.',
);
}
}
},
),
ElevatedButton(
onPressed: _resetCounter,
child: Text('Reset'),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
Testing
您可以通过运行以下代码在测试中为NativeSharedPreferences
填充初始值:
NativeSharedPreferences.setMockInitialValues(Map<String, dynamic> values);
通过上述内容,您可以了解如何在Flutter项目中使用native_shared_preferences
插件进行本地数据存储,并确保数据能够在应用重启后仍然存在。
更多关于Flutter本地数据存储插件native_shared_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地数据存储插件native_shared_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用native_shared_preferences
插件进行本地数据存储的示例代码。请注意,native_shared_preferences
是一个常见的Flutter插件,用于在设备的本地存储中读写简单的键值对数据。然而,更常见和官方维护的插件是shared_preferences
。由于native_shared_preferences
可能不是官方插件,下面的示例将基于shared_preferences
插件,因为两者的使用方式非常相似。如果你确实需要使用native_shared_preferences
,请确保在pubspec.yaml
文件中正确添加依赖并参考其文档。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加shared_preferences
依赖:
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.0.15 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入shared_preferences
插件:
import 'package:shared_preferences/shared_preferences.dart';
3. 使用SharedPreferences进行数据存储和读取
下面是一个完整的示例,展示了如何使用SharedPreferences
来存储和读取数据:
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;
String? _name = '';
@override
void initState() {
super.initState();
_initializePreferences().then((_) {
// 读取存储的数据
setState(() {
_name = _preferences.getString('name');
});
});
}
Future<void> _initializePreferences() async {
_preferences = await SharedPreferences.getInstance();
}
Future<void> _saveName(String name) async {
setState(() {
_name = name;
});
await _preferences.setString('name', name);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SharedPreferences Demo'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Enter your name'),
onChanged: (value) {
_saveName(value);
},
),
SizedBox(height: 16),
Text('Stored name: $_name'),
],
),
),
);
}
}
解释
- 添加依赖:在
pubspec.yaml
中添加shared_preferences
依赖。 - 导入插件:在Dart文件中导入
shared_preferences
。 - 初始化SharedPreferences:在
initState
方法中调用SharedPreferences.getInstance()
来初始化_preferences
对象。 - 存储数据:使用
_preferences.setString('key', 'value')
来存储数据。 - 读取数据:使用
_preferences.getString('key')
来读取数据。
这个示例展示了如何在Flutter应用中使用SharedPreferences
来存储和读取用户的名字。你可以根据需要修改这个示例来存储和读取其他类型的数据(如整数、布尔值等)。如果你确实需要使用native_shared_preferences
,请确保按照其文档进行相应的修改。