Flutter:如何从 JSON 创建收藏夹列表

Posted

技术标签:

【中文标题】Flutter:如何从 JSON 创建收藏夹列表【英文标题】:Flutter : How to create Favorite List from JSON 【发布时间】:2021-07-06 13:37:34 【问题描述】:

我将在我的 Flutter 应用程序中创建一个 JSON 数据,并允许用户选择他们最喜欢的项目。这是来自 Doa 的类,我从本地 JSON 文件中获取数据。

import 'dart:convert';

List<Doa> doaFromJson(String str) =>
    List<Doa>.from(json.decode(str).map((x) => Doa.fromJson(x)));

String doaToJson(List<Doa> data) =>
    json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Doa 
  Doa(
    this.id,
    this.grup,
    this.judul,
    this.lafaz,
    this.latin,
    this.arti,
    this.tentang,
    this.mood,
    this.tag,
    this.fav,
  );

  final int id;
  final String grup;
  final String judul;
  final String lafaz;
  final String latin;
  final String arti;
  final String tentang;
  final String mood;
  final String tag;
  bool fav;

  factory Doa.fromJson(Map<String, dynamic> json) => Doa(
        id: json["id"],
        grup: json["grup"],
        judul: json["judul"],
        lafaz: json["lafaz"],
        latin: json["latin"],
        arti: json["arti"],
        tentang: json["tentang"],
        mood: json["mood"],
        tag: json["tag"],
        fav: json["fav"],
      );

  Map<String, dynamic> toJson() => 
        "id": id,
        "grup": grup,
        "judul": judul,
        "lafaz": lafaz,
        "latin": latin,
        "arti": arti,
        "tentang": tentang,
        "mood": mood,
        "tag": tag,
        "fav": fav,
      ;

这是显示 JSON 数据列表的主页。

import 'package:flutter/material.dart';
import 'package:json_test/class/doa.dart';
import 'package:json_test/page/DoaPage.dart';

class MainPage extends StatefulWidget 
  @override
  _MainPageState createState() => _MainPageState();


class _MainPageState extends State<MainPage> 
  List<Doa> doaList;
  bool _isInit = true;

  Future<void> fetchDoa(BuildContext context) async 
    final jsonstring =
        await DefaultAssetBundle.of(context).loadString('assets/doa.json');
    doaList = doaFromJson(jsonstring);
    _isInit = false;
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
        appBar: AppBar(
          title: Text("JSON Data test"),
        ),
        body: Container(
            child: FutureBuilder(
                future: _isInit ? fetchDoa(context) : Future(null),
                builder: (context, _) 
                  if (doaList.isNotEmpty) 
                    return ListView.builder(
                      itemCount: doaList.length,
                      itemBuilder: (BuildContext context, int index) 
                        Doa doa = doaList[index];
                        return Card(
                            margin: EdgeInsets.all(8),
                            child: ListTile(
                                title: Text(doa.judul),
                                onTap: () 
                                  Navigator.of(context).push(MaterialPageRoute(
                                      builder: (BuildContext context) =>
                                          DoaPage(
                                            doa: doa,
                                          )));
                                ,
                                trailing: IconButton(
                                  icon: Icon(
                                    doa.fav
                                        ? Icons.favorite
                                        : Icons.favorite_border,
                                    color: doa.fav ? Colors.red : null,
                                  ),
                                  onPressed: () =>
                                      setState(() => doa.fav = !doa.fav),
                                )));
                      ,
                    );
                  
                  return CircularProgressIndicator();
                )));
  

收藏按钮已启用。但是,当我关闭应用程序时,所有收藏的项目都会丢失。 我的代码的结果显示在这里

在我对项目给予一些“爱”之后,当我关闭应用程序并重新打开它时,所有收藏的项目都会丢失。任何人都可以给我一些关于我的代码的建议吗?非常感谢。

【问题讨论】:

【参考方案1】:

您应该将最喜欢的项目保存在本地电话中,或者您可以使用 apı 服务。您不保存该项目,当您关闭应用程序时,该项目即将为空

你可以使用这个包来保存最喜欢的项目

shared_preferences 

 hive

【讨论】:

以上是关于Flutter:如何从 JSON 创建收藏夹列表的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 如何从 Firestore 中检索 ID 列表并在 GridView 中显示它们的项目?

如何创建一个 Flutter Futurebuilder 函数来显示从 JSON 中获取的字符串数组?

Flutter:使用共享首选项插件存储保存的收藏列表

如何从列表中映射 Flutter JSON 字符串?

如何将对象列表中的布尔收藏夹保存到 Flutter 中的共享首选项

Flutter 从列表中获取所有数据到 json