【问题标题】:Flutter | How to store list of int in Shared preference颤振 |如何在共享首选项中存储 int 列表
【发布时间】:2020-05-29 21:25:09
【问题描述】:

在这里,我想将产品的所有 ID 存储在共享偏好中。但是在这里,当我使用setInt 存储 id 时,它将只存储一个 ID 并删除以前的 ID,因此我希望所有 id 都需要存储在共享首选项中,以及如何获取所有存储在共享首选项中的 ID。

这是我尝试过的代码

 unAuthAddCart(dynamic itemId) async {
    try {
      SharedPreferences pref = await SharedPreferences.getInstance();
      var unAuthItemId = pref.setInt('unAuthItemid', itemId);
      print(unAuthItemId);
      var abc = pref.getInt('unAuthItemid');
      print("UnAuth Itme Id $abc");

    } catch (e) {
      print(e);
      print("Something went Wrong in Particular Product Cart");
    }
  }

【问题讨论】:

    标签: flutter dart sharedpreferences flutter-layout flutter-dependencies


    【解决方案1】:

    目前,没有任何选项可以直接将整数列表保存在 Sharedpreferences 中。您可以将字符串列表保存在 sharedpreferences 中。

    对于您的情况,最简单的方法是将您的 List 值转换为 List 并存储它们。

    此外,在检索时,您可以获取存储在共享首选项中的 List,然后将其转换为您的原始 List

    例如:

    将您的列表存储在共享首选项中。

    SharedPreferences prefs=await SharedPreferences.getInstance();
    
    // your custom int list
    List<int> mList=[0,1,2,3,4];
    
    // convert your custom list to string list
    List<String> stringsList=  mList.map((i)=>i.toString()).toList();
    
    // store your string list in shared prefs                
    prefs.setStringList("stringList", stringsList);
    

    检索存储的字符串列表并将其转换为原始 int 列表

    SharedPreferences prefs=await SharedPreferences.getInstance();
    
    // fetch your string list      
    List<String> mList = (prefs.getStringList('stringList') ?? List<String>());
    
    //convert your string list to your original int list
    List<int> mOriginaList = mList.map((i)=> int.parse(i)).toList();
    
    print(mOriginaList);
    

    【讨论】:

    • 谢谢你的回答。现在我有一个从产品中获取的 ItemId,所以当我点击添加到购物车按钮时,id 需要存储在共享首选项中,然后如果我点击另一个产品,以前的 id 需要保留并且新的 id 需要存储。
    【解决方案2】:

    您可以在下面复制粘贴运行完整代码
    你可以
    第 1 步:将 List&lt;int&gt; 转换为 List&lt;String&gt;
    第 2 步:使用 prefs.setStringList 保存
    第 3 步:使用 prefs.getStringList 取回它
    第 4 步:隐藏到 List&lt;int&gt;

    代码sn-p

    List<int> intProductListOriginal = [11, 22, 33, 44, 55];
    
      void _incrementCounter() async {
        List<String> strList = intProductListOriginal.map((i) => i.toString()).toList();
        SharedPreferences prefs = await SharedPreferences.getInstance();
        prefs.setStringList("productList", strList);
    
        List<String> savedStrList = prefs.getStringList('productList');
        List<int> intProductList = savedStrList.map((i) => int.parse(i)).toList();
    
        print("${intProductList.toString()}");
    

    输出

    I/flutter ( 4347): [11, 22, 33, 44, 55]
    

    完整代码

    import 'package:flutter/material.dart';
    import 'package:shared_preferences/shared_preferences.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      int _counter = 0;
      List<int> intProductListOriginal = [11, 22, 33, 44, 55];
    
      void _incrementCounter() async {
        List<String> strList = intProductListOriginal.map((i) => i.toString()).toList();
        SharedPreferences prefs = await SharedPreferences.getInstance();
        prefs.setStringList("productList", strList);
    
        List<String> savedStrList = prefs.getStringList('productList');
        List<int> intProductList = savedStrList.map((i) => int.parse(i)).toList();
    
        print("${intProductList.toString()}");
    
        setState(() {
          _counter++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.headline4,
                ),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2020-04-02
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 2013-09-16
      相关资源
      最近更新 更多