web-dev-qa-db-ja.com

フラッター|共有設定にintのリストを保存する方法

ここでは、製品のすべてのIDを共有設定に保存します。しかし、ここでsetIntを使用してIDを保存する場合、IDを1つだけ保存し、以前の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");
    }
  }
4
Rutvik Gumasana

以下の完全なコードをコピーして貼り付けて実行できます
あなたはできる
ステップ1:List<int>List<String>に変換します
ステップ2:prefs.setStringListで保存
ステップ3:prefs.getStringListで元に戻す
ステップ4:List<int>に秘密

コードスニペット

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),
      ),
    );
  }
}
4
chunhunghan

現在、intのリストをSharedpreferencesに直接保存するオプションはありません。文字列のリストをsharedpreferencesに保存できます。

あなたのケースの最も簡単な方法は、あなたのList <int>値をList <String>に変換して保存することです。

また、取得時にList <String>を取得する共有設定に保存され、元のList <int>に変換する

例:

リストを共有設定に保存します。

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);
1
Jay Mungara