如何用flutter恢复共享首选项(键和值)列表?

时间:2020-06-14 12:31:49

标签: flutter sharedpreferences

您好,我尝试保存我的应用程序的所有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但不知道如何做,需要示例),它可以挽救我的生命。^^谢谢

0 个答案:

没有答案