【问题标题】:facing a problem with shared preferences flutter面临共享偏好波动的问题
【发布时间】:2019-09-01 16:22:13
【问题描述】:

我正在使用shared preferences 保存来自其他 API 的商店 ID。但问题是它总是采用相同的商店 id,我想为不同的数据显示不同的商店 id。

Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

Future<bool> _setCategoryId(String keyString, String categoryId) async {
  print("Testing val :: SET ==> keyString "+keyString);
  print("Testing val :: SET : token ==> "+categoryId);
  final SharedPreferences prefs = await _prefs;
  return prefs.setString(keyString, categoryId);
}

Future<String> _getCategoryId(String keyString) async {
  print("Testing val :: GET ==> "+keyString);
  final SharedPreferences prefs = await _prefs;
  return prefs.getString(keyString) ?? '';
}

这是我想要保存商店 ID 的回复

  {success: true, data: [{store_id: 0, name: Bag, store_geocode: , longitude: , latitude: , store_address: Midori-Ku, Yokohama-Shi, Japan, store_telephone: 123456789, thumb: http://yourdomainname.com/image/cache/no_image-500x500.png}, {store_id: 1, name: Asian Spice Market, store_geocode: , longitude: , latitude: , store_address: Yokohama Shi, Naka ku, Noge cho 3-160-4, store_telephone: 0804053636, thumb: http://yourdomainname.com/image/cache/catalog/stores/asian_spice_market/asian_spice_market_logo-500x500.png}]}

【问题讨论】:

    标签: flutter sharedpreferences


    【解决方案1】:

    我认为您正在尝试设置和获取字符串列表。请参阅下面的代码。
    第 1 步:解析您的 json 字符串以存储列表。底部代码
    第 2 步:for 循环存储列表以获取存储 ID 并添加到 myListOfIntegers

    如果您的商店 id 是 int。您可以使用以下代码 sn-p ,请参见示例 2

    myListOfIntegers.map((i)=>i.toString()).toList() 
    

    转换为字符串。

    商店 ID 可以是字符串或 json 字符串

    List<String> myListOfStrings=  ["1","2","3","4"]; 
    List<String> myListOfJsonStrings=  ['{ "storeid":"123",  "storename":"jock"}',' {  "storeid":"456",  "storename":"abc"}' ];
    

    使用 prefs.setStringList 和 prefs.setStringList

    完整代码

    import 'package:flutter/material.dart';
    import 'package:shared_preferences/shared_preferences.dart';
    
    void main() {
      runApp(new MaterialApp(
        home: new Scaffold(
          body: new Center(
            child: new RaisedButton(
              onPressed: _save,
              child: new Text('Save my list of int'),
            ),
          ),
        ),
      ));
    }
    
    _save() async {
      List<String> myListOfStrings=  ["1","2","3","4"];
    
      List<String> myListOfJsonStrings=  ['{ "storeid":"123",  "storename":"jock"}',' {  "storeid":"456",  "storename":"abc"}' ];
    
      SharedPreferences prefs = await SharedPreferences.getInstance();
      await prefs.setStringList('mylist', myListOfStrings);
    
      List<String> myList = (prefs.getStringList('mylist') ?? List<String>()) ;
      print('Your list  $myList');
    
      await prefs.setStringList('myjsonlist', myListOfJsonStrings);
    
      List<String> myjsonList = (prefs.getStringList('myjsonlist') ?? List<String>()) ;
      print('Your list  $myjsonList');
    }
    

    结果是

    I/flutter (31495): Your list  [1, 2, 3, 4]
    I/flutter (31495): Your list  [{ "storeid":"123",  "storename":"jock"},  {  "storeid":"456",  "storename":"abc"}]
    

    示例 2:如果您的商店 id 是 int

    import 'package:flutter/material.dart';
    import 'package:shared_preferences/shared_preferences.dart';
    
    void main() {
      runApp(new MaterialApp(
        home: new Scaffold(
          body: new Center(
            child: new RaisedButton(
              onPressed: _save,
              child: new Text('Save my list of int'),
            ),
          ),
        ),
      ));
    }
    
    _save() async {
    
      List<int> myListOfIntegers = [1,2,3,4];
      List<String> myListOfStrings=  myListOfIntegers.map((i)=>i.toString()).toList();
    
      SharedPreferences prefs = await SharedPreferences.getInstance();
      List<String> myList = (prefs.getStringList('mylist') ?? List<String>()) ;
      List<int> myOriginaList = myList.map((i)=> int.parse(i)).toList();
      print('Your list  $myOriginaList');
      await prefs.setStringList('mylist', myListOfStrings);
    }
    

    你的 json 字符串

    {
    "success": true, 
    "data": [
        {"store_id": 0, 
    "name": "Bag", 
    "store_geocode": "", 
    "longitude": "", 
    "latitude": "", 
    "store_address": "Midori-Ku, Yokohama-Shi, Japan", 
    "store_telephone": "123456789", 
    "thumb": "http://yourdomainname.com/image/cache/no_image-500x500.png}, {store_id: 1, name: Asian Spice Market, store_geocode: , longitude: , latitude: , store_address: Yokohama Shi, Naka ku, Noge cho 3-160-4, store_telephone: 0804053636, thumb: http://yourdomainname.com/image/cache/catalog/stores/asian_spice_market/asian_spice_market_logo-500x500.png"
    
        }
    ]
    }
    

    解析你的 json 字符串
    // To parse this JSON data, do
    //
    //     final store = storeFromJson(jsonString);
    
    import 'dart:convert';
    
    Store storeFromJson(String str) => Store.fromJson(json.decode(str));
    
    String storeToJson(Store data) => json.encode(data.toJson());
    
    class Store {
        bool success;
        List<Datum> data;
    
        Store({
            this.success,
            this.data,
        });
    
        factory Store.fromJson(Map<String, dynamic> json) => new Store(
            success: json["success"],
            data: new List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
        );
    
        Map<String, dynamic> toJson() => {
            "success": success,
            "data": new List<dynamic>.from(data.map((x) => x.toJson())),
        };
    }
    
    class Datum {
        int storeId;
        String name;
        String storeGeocode;
        String longitude;
        String latitude;
        String storeAddress;
        String storeTelephone;
        String thumb;
    
        Datum({
            this.storeId,
            this.name,
            this.storeGeocode,
            this.longitude,
            this.latitude,
            this.storeAddress,
            this.storeTelephone,
            this.thumb,
        });
    
        factory Datum.fromJson(Map<String, dynamic> json) => new Datum(
            storeId: json["store_id"],
            name: json["name"],
            storeGeocode: json["store_geocode"],
            longitude: json["longitude"],
            latitude: json["latitude"],
            storeAddress: json["store_address"],
            storeTelephone: json["store_telephone"],
            thumb: json["thumb"],
        );
    
        Map<String, dynamic> toJson() => {
            "store_id": storeId,
            "name": name,
            "store_geocode": storeGeocode,
            "longitude": longitude,
            "latitude": latitude,
            "store_address": storeAddress,
            "store_telephone": storeTelephone,
            "thumb": thumb,
        };
    }
    

    【讨论】:

    • 我添加了int类型的例子
    • 我添加了解析 json 字符串逻辑
    • 我想在标题中使用商店ID,但是当我点击不同的商店时我得到相同的ID,我想显示不同的商店ID
    • 你能发布关于“点击不同商店”的代码吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多