ご質問
Flutter上でSharedPreferencesを使ってデータの保存を試みていますが、データが保存できません。SharedPreferencesを使ったデータ保存の最も単純な形まで戻ったつもりです。
どこに問題がありそうでしょうか。ご助言をくださいますと幸いです。不足している情報がありましたら適宜追記いたします。
よろしくお願いいたします。
処理の説明
SharedPreferencesインスタンスを生成してリストを保存するメソッド、保存したものを読み取ってリストに代入するメソッドをそれぞれ定義しました。
リストに「something」、「anything」を入れて保存メソッドを動かしました。
リストの内容を空にしてから、sharedpreferencesからリストを読み込むメソッドを呼び出して、そのリスト内容をプリントしています。
しかし、プリントされたのは空のリストでした。正常に値の保存、読み込みが行われていれば、作成したリストの内容がここに表示されるものと期待していました。
環境
Macbook Pro (14 inch, 2021)
Apple M1 Pro
MacOS Monterey 12.1
SharedPreferences: 2.0.15
IDE: Android Studio
ソースコード
Dart
1import 'package:flutter/material.dart'; 2import 'dart:convert'; 3 4import 'package:shared_preferences/shared_preferences.dart'; 5 6void main() { 7 runApp(const MyApp()); 8 9 /// define savekey for prefs & stringlist 10 String _saveKey = "KEY"; 11 List<String> _list = []; 12 13 /// save list from prefs 14 void save() async { 15 SharedPreferences prefs = await SharedPreferences.getInstance(); 16 prefs.setStringList(_saveKey, _list); 17 } 18 19 /// load list from prefs 20 void load() async { 21 SharedPreferences prefs = await SharedPreferences.getInstance(); 22 _list = prefs.getStringList(_saveKey) ?? []; 23 } 24 25 /// main part 26 _list = ["something", "anything"]; 27 save(); 28 _list = []; 29 load(); 30 print(_list); 31} 32 33class MyApp extends StatelessWidget { 34 const MyApp({Key? key}) : super(key: key); 35 36 // This widget is the root of your application. 37 38 Widget build(BuildContext context) { 39 return MaterialApp( 40 title: 'Flutter Demo', 41 theme: ThemeData( 42 primarySwatch: Colors.blue, 43 ), 44 ); 45 } 46} 47
実行結果
Console
1Launching lib/main.dart on iPhone SE (3rd generation) in debug mode. . . 2Running pod install. . . 3Xcode build done. 16.9s 4Debug sevice listening on ws://127.0.0.1:53756/M5lQLgtDLDw=/ws 5Syncing files to device iPhone SE (3rd generation). . . 6flutter: []
その他情報
アプリのあるディレクトリにdataフォルダがありません。
私が調べた際には「SharedPreferencesによって保存したデータは基本的にアプリのディレクトリのdata/data/配下に保存される」という情報を目にしました。何か関係しているのかもしれません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。