widget名字:shared_preferences: ^2.0.15
导入包到项目中去
- 存储数据到磁盘(存储)上面
功能:
功能:
- 存储数据到磁盘(存储)上面
- 支持的数据类型int double bool String List
数据的保存,使用键值来区分
// 初始化
final prefs = await SharedPreferences.getInstance();
// 保存int类型
await prefs.setInt('counter', 10);
// 保存Bool类型
await prefs.setBool('repeat', true);
// 保存Double类型
await prefs.setDouble('decimal', 1.5);
//保存String类型
await prefs.setString('action', 'Start');
// 保存List<String>类型
await prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);
数据的读取
//读取的key数值如果不存在就会返回null
final int? counter = prefs.getInt('counter');
final bool? repeat = prefs.getBool('repeat');
final double? decimal = prefs.getDouble('decimal');
final String? action = prefs.getString('action');
final List<String>? items = prefs.getStringList('items');
使用实例和代码:
下面的代码实现,计数器,存储起来数值,下次在打开该软件,数值还是上传存储的数值
import 'dart:ffi';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'shared_preferences'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
late Future<int> _counter;
void initState() {
// TODO: implement initState
super.initState();
//读取之前存储的数值,如果key 不存在就赋值为0
_counter = _prefs.then((SharedPreferences pref) {
return pref.getInt('counter') ?? 0;
});
}
Future<void> _incrementCounter() async {
final SharedPreferences prefs = await _prefs;
final int counter = (prefs.getInt('counter') ?? 0) + 1;
print('counter$counter');
setState(() {
_counter = prefs.setInt('counter', counter).then((bool success) {
print('success$success');
print('counter2$counter');
return counter;
});
});
}
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:',
),
FutureBuilder<int>(
future: _counter,
builder: (context, AsyncSnapshot sdata) {
if (sdata.connectionState == ConnectionState.done) {
if (sdata.hasError) {
return Icon(Icons.error);
} else {
return Text('${sdata.data}');
}
} else {
return const CircularProgressIndicator();
}
})
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}