Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振:如何从JSON创建收藏夹列表_Android_Json_Flutter - Fatal编程技术网

Android 颤振:如何从JSON创建收藏夹列表

Android 颤振:如何从JSON创建收藏夹列表,android,json,flutter,Android,Json,Flutter,我将在我的flatter应用程序中创建一个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>

我将在我的flatter应用程序中创建一个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,
      };
}
导入'dart:convert';
列表doaFromJson(字符串str)=>
List.from(json.decode(str.map)(x)=>Doa.fromJson(x));
字符串doaToJson(列表数据)=>
encode(List.from(data.map((x)=>x.toJson());
类Doa{
Doa({
这个身份证,
这个,格鲁普,
这个,朱杜尔,
这个,拉法兹,
这是拉丁语,
这个,阿蒂,
这个天堂,,
这个心情,,
这个.tag,
这是我的最爱,
});
最终int id;
最后一串食物;
最后一串朱杜尔;
最后一串拉法兹;
最后一串拉丁语;
最后的弦乐艺术;
最后串天堂;
最后的弦乐语气;
最后的字符串标签;
布尔法夫;
工厂Doa.fromJson(映射json)=>Doa(
id:json[“id”],
grup:json[“grup”],
judul:json[“judul”],
lafaz:json[“lafaz”],
拉丁语:json[“拉丁语”],
arti:json[“arti”],
tentang:json[“tentang”],
mood:json[“mood”],
tag:json[“tag”],
fav:json[“fav”],
);
映射到JSON()=>{
“id”:id,
“咕噜”:咕噜,
“朱杜尔”:朱杜尔,
“拉法兹”:拉法兹,
“拉丁语”:拉丁语,
“arti”:arti,
“天坛”:天坛,
“心情”:心情,
“标签”:标签,
“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();
                })));
  }
}
导入“包装:颤振/材料.省道”;
导入“package:json_test/class/doa.dart”;
导入“package:json_test/page/DoaPage.dart”;
类MainPage扩展了StatefulWidget{
@凌驾
_MainPageState createState()=>\u MainPageState();
}
类_MainPageState扩展状态{
列表列表;
bool_isInit=true;
未来fetchDoa(BuildContext上下文)异步{
最终jsonstring=
等待DefaultAssetBundle.of(context.loadString('assets/doa.json');
doaList=doaFromJson(jsonstring);
_isInit=假;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“JSON数据测试”),
),
主体:容器(
孩子:未来建设者(
future:_isInit?fetchDoa(上下文):future(null),
构建器:(上下文,ux){
if(doaList.isNotEmpty){
返回ListView.builder(
itemCount:doaList.length,
itemBuilder:(构建上下文,int索引){
Doa Doa=doaList[索引];
回程卡(
保证金:全部(8),
孩子:ListTile(
标题:文本(doa.judul),
onTap:(){
导航器.of(上下文).push(MaterialPageRoute(
生成器:(BuildContext上下文)=>
多帕奇(
doa:doa,
)));
},
尾随:图标按钮(
图标:图标(
doa.fav
?图标。收藏
:Icons.favorite_边框,
颜色:doa.fav?颜色。红色:空,
),
按下:()=>
设置状态(()=>doa.fav=!doa.fav),
)));
},
);
}
返回循环ProgressIndicator();
})));
}
}
“收藏夹”按钮已工作。但是,当我关闭应用程序时,所有喜欢的项目都将丢失。 这里显示的代码的结果


当我对这些项目给予一些“爱”之后,当我关闭应用程序并重新打开它时,所有喜欢的项目都会丢失。谁能给我一些关于我的代码的建议?非常感谢。

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

您可以将此软件包用于保存收藏夹项目

shared_preferences 

 hive