前提
Shared_preferences に List<List<String>> goals を保存した後、
goals[i] = prefs.getStringList("goal$i");
で取得しようとしたところ、A value of type 'List<String>?' can't be assigned to a variable of type 'List<String>'.
Listのタイプが違うので割り当てることができません。というエラーがでました。
そのため List<String>? nullSafeString を作成し、それに取得した値を代入しました。
しかし本来は List<List<String>> goals に代入するつもりだったので goals[i] = nullSafeString;
としたのですが、やはりListのタイプが違うため 前述した A value of type...のエラーとまったく同様のエラーが発生しました。
実現したいこと
Flutter で List<String>? を List<String> に変換したいです。
List<String>? nullSafeString を List<String> タイプに変換し、List<List<String>> goals に代入したいです。
また、Shared_preferences に保存しているのは List<String> タイプ の goals なのに 保存した値を取り出そうとするとどうして List<String>? になっているのでしょうか?
発生している問題・エラーメッセージ
A value of type 'List<String>?' can't be assigned to a variable of type 'List<String>'.
該当のソースコード
dart
1import 'package:flutter/material.dart'; 2import 'package:shared_preferences/shared_preferences.dart'; 3 4void main() { 5 runApp(const MyApp()); 6 addGoalsData(); 7 readData(); 8 9} 10List<String>? nullSafeString = []; 11List<String> string = []; 12List<List<String>> goals = []; 13Future<void> addGoalsData() async{ 14 final SharedPreferences prefs = await SharedPreferences.getInstance(); 15 for(var i=0;i<7;i++){ 16 goals.add(["目標を入力","目標を入力","目標を入力"]); 17 //print(goals[i]); 18 prefs.setStringList("goals$i", goals[i]); 19 } 20} 21Future<void> readData() async{ 22 final SharedPreferences prefs = await SharedPreferences.getInstance(); 23 for(var i=0;i<7;i++){ 24 //goals[i] = prefs.getStringList("goal$i");//A value of type 'List<String>?' can't be assigned to a variable of type 'List<String>'. 25 nullSafeString = prefs.getStringList("goals$i"); 26 //goals[i] = nullSafeString;//A value of type 'List<String>?' can't be assigned to a variable of type 'List<String>'. 27 28 //string = prefs.getStringList("goals$i");//A value of type 'List<String>?' can't be assigned to a variable of type 'List<String>'. 29 } 30 31 //print("read:${prefs.getStringList("goals0")}"); 32 print("Type:${prefs.getStringList("goals0").runtimeType}"); 33} 34class MyApp extends StatelessWidget { 35 const MyApp({super.key}); 36 37 // This widget is the root of your application. 38 39 Widget build(BuildContext context) { 40 return MaterialApp( 41 home: Scaffold( 42 body:Container( 43 ), 44 ), 45 ); 46 } 47 48} 49
補足情報(FW/ツールのバージョンなど)
Flutter version 3.3.0 を使用しています。
回答よろしくお願いします!

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/09/28 09:26