【问题标题】:Save json data in favorite list in flutter将json数据保存在flutter的收藏列表中
【发布时间】:2021-03-19 11:59:58
【问题描述】:

我正在尝试将我的数据添加到收藏夹列表中,但我不知道该怎么做它

加载json的代码如下

List mydata = List();
  final _savedata = Set<Map>();

  Future<void> getjsondata() async {
    final String response = await rootBundle.loadString('assets/data.json');
    final data = await json.decode(response);
    setState(() {
      mydata = data["InfoPlate"];
    });
  }

这个用于将数据添加到收藏列表

void _pushSaved() {
    Navigator.of(context).push(
      new MaterialPageRoute<void>(
        builder: (BuildContext context) {
          final Iterable<ListTile> tiles = _savedata.map(
            (Myinfo) {
              return new ListTile(
                title: Text(Myinfo['type']),
              );
            },
          );
          final List<Widget> divided = ListTile.divideTiles(
            context: context,
            tiles: tiles,
          ).toList();
          return new Scaffold(
            appBar: new AppBar(
              title: const Text('Favorited info Plate '),
            ),
            body: new ListView(children: divided),
          );
        },
      ),
    );
  }

这是卡片中添加按钮的其余代码

 Widget _buildDataList() {
    return ListView.builder(
        itemCount: mydata.length,
        padding: const EdgeInsets.all(8.0),
        itemBuilder: (context, int index) {
          return _buildRowInfo(mydata[index]);
        });
  }

  Widget _buildRowInfo(Map myinfo) {
    final bool favourited = _savedata.contains(myinfo);

    void _favorscreen() {
      setState(() {
        if (favourited) {
          _savedata.remove(myinfo);
        } else {
          _savedata.add(myinfo);
        }
      });
    }

    return Directionality(
      textDirection: TextDirection.rtl,
      child: Card(
        child: ListTile(
          visualDensity: VisualDensity.comfortable,
          title: Text(myinfo['type']),
          trailing: new IconButton(
            icon: Icon(favourited ? Icons.favorite : Icons.favorite_border),
            color: favourited ? Colors.red : null,
            onPressed: _favorscreen,
          ),
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: json flutter favorites


    【解决方案1】:

    可以使用 shared_preferences 在本地存储数据。 您只需要一个 SharedPreferences 实例。

    class ExampleWidget extends StatefulWidget {
      @override
      _ExampleWidgetState createState() => _ExampleWidgetState();
    }
    
    class _ExampleWidgetState extends State<ExampleWidget> {
      SharedPreferences sharedPreferences;
    
      @override
      void initState() {
        super.initState();
        Future.delayed(Duration.zero, () async {
          sharedPreferences = await SharedPreferences.getInstance();
        });
      }
    
    

    然后,为了读取或写入数据,sharedPreferences 是一个键值对数据库,并公开了 setter 和 getter。它不允许存储 Set,因此您需要根据您执行的操作对数据负载进行编码和解码。

    Future<bool> _writeData(Set<Map> setOfMaps) {
      return sharedPreferences.setString(
        'your_key',
        jsonEncode(setOfMaps.toList()),
      );
    }
    
    Set<Map> _readData() {
      final encodedData = sharedPreferences.getString('your_key');
      return jsonDecode(encodedData).toSet();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2020-10-31
      • 2021-03-08
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      相关资源
      最近更新 更多