您好,我尝试保存我的应用程序的所有sharedpreference,将列表发送到电子邮件中以允许在其他设备上传输数据。 目前,我发现此代码可提取所有键和值
class MainPage extends StatelessWidget {
Future<List<Widget>> getAllPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs
.getKeys()
.map<Widget>((key) => ListTile(
title: Text(key),
subtitle: Text(prefs.get(key).toString()),
))
.toList(growable: false);
}
@override
Widget build(BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(20.0))),
title: Text(("Sauvegarde"),textAlign: TextAlign.center, style: TextStyle(color: Colors.black, fontWeight: FontWeight.w600, fontSize: SizeConfig.safeBlockHorizontal * 5.0)),
content:
Container(
width: MediaQuery.of(context).size.width/1,
height: MediaQuery.of(context).size.height/3,
child :
FutureBuilder<List<Widget>>(
future: getAllPrefs(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Container();
return ListView(
children: snapshot.data,
);
}),
),
actions: <Widget>[
FlatButton(
onPressed: () {
Navigator.pop(context,);
},
child: Text('Fermer'),
),
],
);
}}
通过电子邮件发送列表后,用户需要将列表复制并粘贴到新设备上
喜欢:
"
key1
data1
key2
data2
key3
data3
"
我发现的唯一解决方案是使用正则表达式来匹配每个键和数据,并进行汇编以设置首选项。
RegExp regExp = new RegExp(
r"my regex",
);
var match = regExp.firstMatch("key1");
regex_key1= match.group(1);
----------------------------------------------
RegExp regExp = new RegExp(
r"my regex",
);
var match = regExp.firstMatch("data1");
regex_data1= match.group(1);
-----------------------------------------------
(prefs.setString('regex_key1,regex_data1'));
...
但是我有太多数据,如果一个更简单的解决方案可以自动从此列表中设置首选项(也许使用JSON但不知道如何做,需要示例),它可以挽救我的生命。^^谢谢>