【问题标题】:save dynamic map with shared preferences保存具有共享偏好的动态地图
【发布时间】:2022-01-06 11:29:58
【问题描述】:

我想在我的班级中传递数据并使用共享偏好将它们保存在地图上。 并在另一个班级阅读我的数据。 我的问题是关于保存地图和多次传递数据。 那么如何在我的应用中保存地图列表呢?

这是我的代码,但我认为它是错误的:

class DownloadAudio extends StatefulWidget {
  final String audioUrl;
  final String imageUrl;
  final String title;

  const DownloadAudio(
      {Key? key,
      required this.audioUrl,
      required this.imageUrl,
      required this.title})
      : super(key: key);

  @override
  _DownloadAudioState createState() => _DownloadAudioState();
}

class _DownloadAudioState extends State<DownloadAudio> {
 Map<String,String> episodesData = {
   "image" : "",
   "audio" : "",
   "title" : ""
  }
  ;

    saveEpisodesList(Map episodesList) async {
    SharedPreferences pathEpisodesList = await SharedPreferences.getInstance();
    Map<String, dynamic> json = {'list': episodesList};
    pathEpisodesList.setString('EpisodesList', jsonEncode(json));
    episodesData = await getEpisodesList();
    // return episodesData;
  }

  getEpisodesList() async {
    SharedPreferences pathEpisodesList = await SharedPreferences.getInstance();
    if (pathEpisodesList.getString('EpisodesList') == "[]") {
    } else {
      episodesData = await json
          .decode(pathEpisodesList.getString('EpisodesList')!)['list'];
      return episodesData;
    }
  }

 @override
  Widget build(BuildContext context) {
     Map<String,String> episodesList = {
  "image" :  widget.title  ,
  "audio" :   widget.audioUrl ,
  "title" :   widget.imageUrl  ,
};
    saveEpisodesList(episodesList);
    return IconButton(
            icon: SvgPicture.asset(MyIcons.frame),
            onPressed:() async{
              downloadFile();
            },
          );
  }
}

谁能帮帮我,好吗?

【问题讨论】:

    标签: flutter dictionary dart sharedpreferences fluttermap


    【解决方案1】:
    1. 如果你只是想在类之间传递数据,你可以使用静态字段。 (因为通过共享首选项(sp)保存和检索数据可能会稍微降低性能+必须做更多工作)

    2. 如果你只想使用 sp 你可以将地图列表转换为字符串并保存。

    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('key', "$list");
    

    并获取列表:-

    List<Map<..,..>> foo = prefs.getString('key') as List<Map>;
    

    【讨论】:

    • 我想将我的数据保存到地图
    • 正如您所说的“如何在我的应用程序中保存地图列表”,这就是您可以保存和检索的方式。现在,如果您想获取特定的地图,您可以运行 for 循环。
    • 如果你只是想保存地图。有一个好消息要告诉你。您可以将 map 转换为 json 并使用 String foo = jsonEncode(map); 轻松保存并传递它。您可以像Map&lt;...,...&gt; bar = jsonDecode(prefs.getString('key')) as Map; 一样获取它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多