「Flutter/外部ライブラリ/shared preferences」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferencesエラーが起こるとき) |
(→awaitについて) |
||
行136: | 行136: | ||
==awaitについて== | ==awaitについて== | ||
+ | 私が async/await、promise をちゃんと理解するまでのステップ1,2,3 | ||
https://qiita.com/gounx2/items/18602a4081d0aaffe852?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=684fe63714-Qiita_newsletter_360_05_08_2019&utm_medium=email&utm_term=0_e44feaa081-684fe63714-32842209 | https://qiita.com/gounx2/items/18602a4081d0aaffe852?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=684fe63714-Qiita_newsletter_360_05_08_2019&utm_medium=email&utm_term=0_e44feaa081-684fe63714-32842209 | ||
2019年5月8日 (水) 12:13時点における版
目次
値を端末に保存できるライブラリ
pubspec.yaml
dependencies: flutter: sdk: flutter shared_preferences: ^0.5.2
flutter packages get
prefで値設定、値取得
準備
import 'package:shared_preferences/shared_preferences.dart';
数値取得
void _incrementCounter() async { SharedPreferences prefs = await SharedPreferences.getInstance(); int counter = prefs.getInt('counter'); }
数値設定
void _incrementCounter() async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setInt('counter', 10); }
asyncで囲む必要がある
文字列設定・取得
String name = prefs.getString("name"); name = "${name} ${counter}"; await prefs.setString('name', name);
文字列リスト設定・取得
SharedPreferences prefs = await SharedPreferences.getInstance(); List<String> names = prefs.getStringList("textnames"); if (names == null) { names = new List<String>(); } names.add("new text"); names.forEach((item) { print(item); }); await prefs.setStringList('textnames', names);
別クラスを使う場合
lib/model/Pref.dart
import 'package:shared_preferences/shared_preferences.dart'; class Pref { static void saveNames(List<String> names) async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setStringList('textnames', names); } static Future<List<String>> getNames() async { SharedPreferences prefs = await SharedPreferences.getInstance(); List<String> names = prefs.getStringList("textnames"); if (names == null) { names = new List<String>(); } return names; } }
lib/main.dart Prefでgetしてきたものは必ずsetState((){})で囲って値を更新させて表示に反映させる
import 'model/pref.dart'; List<String> names = new List<String>(); Pref.getNames().then((value) { setState(() { names = value; }); names.add("hogehoge"); names.forEach((item) { print(item); }); Pref.saveNames(names); });
サンプル
import 'package:shared_preferences/shared_preferences.dart'; class _MyHomePageState extends State<MyHomePage> { int _counter = 0; _incrementCounter() async { SharedPreferences prefs = await SharedPreferences.getInstance(); int counter = (prefs.getInt('counter') ?? 0) + 1; print('Pressed $counter times.'); await prefs.setInt('counter', counter); setState(() { _counter = counter; }); } @override void initState(){ _incrementCounter(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'HelloWorld:', ), Text( '$_counter', style: Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer for build methods. ); } }
flutter run
awaitについて
私が async/await、promise をちゃんと理解するまでのステップ1,2,3 https://qiita.com/gounx2/items/18602a4081d0aaffe852?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=684fe63714-Qiita_newsletter_360_05_08_2019&utm_medium=email&utm_term=0_e44feaa081-684fe63714-32842209
参考
公式shared_preferences:https://pub.dartlang.org/packages/shared_preferences
公式shared_preferences-class:https://pub.dartlang.org/documentation/shared_preferences/latest/shared_preferences/SharedPreferences-class.html
Flutterで[key : value] 形式でローカルにデータを保存する https://qiita.com/superman9387/items/4786ba4208a546842176