ここでは、製品のすべての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");
}
}
以下の完全なコードをコピーして貼り付けて実行できます
あなたはできる
ステップ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),
),
);
}
}
現在、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);