[解決済み] FlutterアプリにJSONアセットを読み込むには?
質問
FlutterアプリにJSONアセットを読み込むにはどうしたらよいでしょうか?
私の
pubspec.yaml
ファイルには次のようなものがあります。
assets:
- assets/data.json
データを読み込もうとすると、ずっと引っかかります。試してみました。
final json = JSON.decode(
DefaultAssetBundle.of(context).loadString("assets/data.json")
);
でも、エラーが出ます。
引数の型 'Future< String>' は、パラメータの型 'String' に割り当てることができません。
どのように解決するのですか?
アレクサンドル・ボーデ(Alexandre Beaudet 's 答え は正しいのですが、何が起こっているのかについて多くの文脈を与えていません。
を呼び出しているとき
loadString
を呼び出しているとき、それは実際には非同期メソッド呼び出しです。このメソッドは
Future<value>
ではなく、単に
value
. これは、すぐに String という結果を持つわけではなく、将来のある時点で持つようになることを意味します。
Dartで非同期性を扱うには、主に2つの方法があります。
async
と
await
であり、もう一つは先物を直接使用することです。詳細は
dart guide on Asynchronous Programming を参照してください。
.
もしあなたが
future.then
を直接使用する場合、通常の関数から(つまり initState などから)行うことができます。単にコールバックを指定し、コールバックの中で結果をどうするかを指定するだけです。
void printDailyNewsDigest() {
final future = gatherNewsReports();
future.then((news) => print(news));
}
を使いたい場合は
await
を使いたい場合は、@Alexandre が示しているように、それを使う関数を
async
としてマークする必要があります。
Future<Void> printDailyNewsDigest() async {
String news = await gatherNewsReports();
print(news);
}
関数をオーバーライドする場合(例えばinitState)、戻り値を変更しないことも確認する必要があります。これは、ほとんどの場合、dart 2 のタイピングによって捕捉されるはずですが、void -> Future はそうではないようです。
最後にもう一つ注意点があります。もしウィジェットを作るためにデータの結果を使用するのであれば、おそらく FutureBuilder .
関連
-
[解決済み] フラッターサークルデザイン
-
[解決済み】Dartで日付をフォーマットする方法とは?
-
[解決済み] Flutter SVG レンダリング
-
[解決済み] TextFieldのBorder Colorを変更できない。
-
[解決済み] Dart マルチプルコンストラクタ
-
[解決済み] POSTリクエスト中にCERTIFICATE_VERIFY_FAILEDエラーが発生した場合、どのように解決しますか?
-
[解決済み] 文字列から列挙
-
[解決済み] Flutterでのテキストフィールドの検証
-
[解決済み] Dartで数値に先頭の0を追加する
-
[解決済み] Dart FoldとReduceの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] フラッターサークルデザイン
-
[解決済み] FlutterのBuildキャッシュをクリアする方法は?
-
[解決済み] dartでenumにメソッドや値を追加する
-
[解決済み] Flutter SVG レンダリング
-
[解決済み] Flutter initState メソッドでコンテキストを取得する
-
[解決済み] POSTリクエスト中にCERTIFICATE_VERIFY_FAILEDエラーが発生した場合、どのように解決しますか?
-
[解決済み] Dartでプライベート変数を作成する方法は?
-
[解決済み] textFieldのアンダーラインの色を変更するには?
-
[解決済み] 文字列から列挙
-
[解決済み] Dartでimport/exportとpart/part ofを使い分けるとしたら?