質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

1回答

585閲覧

flutter アプリを閉じた後に開くと FlutterError Unable to load asset というエラーが起こる理由を知りたい

kanzi

総合スコア0

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

1クリップ

投稿2022/02/09 15:50

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
flutterの SharedPreferencesを使って端末内に撮った写真を保存して、それをリストに表示させる機能を作って、無事に写真をリストに表示させる事ができたんですけど、再度実行をした時に無事に表示できていた写真が表示されなくなり、FlutterError Unable to load assetというエラーが起きました。解決方法がわからなくなっていてとても困っております。何方か教えてくれるととても助かります。

こちらが今回起きたエラーです。
イメージ説明

該当のソースコード

main.dart

dart

1import 'dart:typed_data'; 2import 'package:flutter/material.dart'; 3import 'package:medicine/calendar_page.dart'; 4import 'package:medicine/main_model.dart'; 5import 'package:medicine/medicine.dart'; 6import 'package:medicine/photo.dart'; 7import 'package:provider/provider.dart'; 8 9import 'add_page.dart'; 10 11void main() { 12 runApp(ListApp()); 13} 14 15class ListApp extends StatelessWidget { 16 // This widget is the root of your application. 17 18 Widget build(BuildContext context) { 19 return MaterialApp( 20 title: 'お薬手帳リスト', 21 theme: ThemeData( 22 backgroundColor: Colors.pink[100], 23 ), 24 home: ListPage(), 25 ); 26 } 27} 28 29class ListPage extends StatefulWidget { 30 31 State<ListPage> createState() => ListHome(); 32} 33 34class ListHome extends State<ListPage> { 35 ListHome({this.medicine}); 36 Medicine? medicine; 37 38 Widget build(BuildContext context) { 39 return ChangeNotifierProvider<MainModel>.value( 40 value: MainModel()..getList(), 41 child: Scaffold( 42 appBar: AppBar( 43 title: Text('お薬手帳アプリ'), 44 backgroundColor: Colors.pink[100], 45 actions: [ 46 IconButton( 47 onPressed: () { 48 Navigator.push( 49 context, 50 MaterialPageRoute( 51 builder: (context) => CalemdarPage(), 52 fullscreenDialog: true, 53 )); 54 }, 55 icon: Icon(Icons.calendar_today), 56 ) 57 ], 58 ), 59 body: Consumer<MainModel>(builder: (context, model, child) { 60 return ListView( 61 children: model.medicineList 62 .map( 63 (medicine) => Card( 64 child: ListTile( 65 tileColor: Colors.pink[100], 66 //リストに画像を表示する。 67 leading: InkWell( 68 onTap: () { 69 Navigator.push( 70 context, 71 MaterialPageRoute( 72 builder: (context) => 73 Photo(memoImage: medicine.image), 74 fullscreenDialog: true, 75 ), 76 ); 77 }, 78 child: FutureBuilder( 79 future: Convarsion.conversionImage( 80 image: medicine.image!), 81 builder: 82 (BuildContext context, AsyncSnapshot snapshot) { 83 if (snapshot.hasData == true) { 84 Uint8List image = snapshot.data; 85 print(image); 86 return Image.memory(image); 87 } else { 88 return Container( 89 width: 45, 90 height: 50, 91 color: Colors.grey, 92 ); 93 } 94 }), 95 ), 96 title: Text( 97 '病院名:${medicine.hospitalText}\n診察科目:${medicine.examinationText}\n日付:${medicine.time}'), 98 textColor: Colors.white, 99 onLongPress: () async { 100 //削除 101 //await deleteDialog(model, context, memo); 102 }, 103 //編集ボタン 104 trailing: IconButton( 105 icon: Icon(Icons.edit), 106 onPressed: () async { 107 await Navigator.push( 108 context, 109 MaterialPageRoute( 110 builder: (context) => AddPage( 111 medicine: medicine, 112 ), 113 fullscreenDialog: true, 114 ), 115 ); 116 model.getList(); 117 }, 118 ), 119 )), 120 ) 121 .toList()); 122 }), 123 floatingActionButton: Consumer<MainModel>( 124 builder: (context, model, child) { 125 return FloatingActionButton( 126 backgroundColor: Colors.pink[100], 127 onPressed: () async { 128 await Navigator.push( 129 context, 130 MaterialPageRoute( 131 builder: (context) => AddPage(), 132 fullscreenDialog: true, 133 ), 134 ).then((value) { 135 //画面が戻ったら処理が発動する 136 model.getList(); 137 }); 138 }, 139 tooltip: '追加する', 140 child: Icon(Icons.add), 141 ); 142 }, 143 ), 144 ), 145 ); 146 } 147}

main_model

dart

1class MainModel extends ChangeNotifier { 2 List<Medicine> medicineList = []; 3 4 Future getList() async { 5 SharedPreferences pref = await SharedPreferences.getInstance(); 6 await pref.reload(); 7 var dataArray = pref.getStringList('medicine'); 8 print('data:$dataArray'); 9 //データの読み込み 10 if (dataArray != null) { 11 medicineList = 12 //json形式にデコードしてリスト化する 13 dataArray 14 .map((data) => Medicine.fromJson(json.decode(data))) 15 .toList(); 16 notifyListeners(); 17 } else { 18 medicineList = []; 19 } 20 } 21 22 Future delete(Medicine medicine) async { 23 medicineList.remove(medicine); 24 //json形式にデコードしてリスト化する 25 List<String> medicineDataList = 26 await medicineList.map((data) => json.encode(data.toJson())).toList(); 27 SharedPreferences pref = await SharedPreferences.getInstance(); 28 //deleteされたデータを保存する 29 pref.setStringList('medicine', medicineDataList); 30 notifyListeners(); 31 print(pref.getStringList('medicine')); 32 } 33 34 void reload() { 35 notifyListeners(); 36 } 37} 38 39class Convarsion { 40 //保存された写真をUint8Listに変換する。 41 static Future<Uint8List> conversionImage({String? image}) async { 42 ///imageのpathをByteDataに変換 43 ByteData byte = await rootBundle.load(image!); 44 45 ///ByteDataをUint8List変換 46 Uint8List list = byte.buffer.asUint8List(); 47 return list; 48 } 49} 50 51

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下を確認してみてください。

  • ロードするファイルが存在すること
  • ロードするファイルのパスが正しいこと
  • 「pubspec.yaml」でassetsがコメントアウトがされていないこと
  • 「pubspec.yaml」でassetsの前に2文字分の半角スペースがあること
  • 「pubspec.yaml」のassets以下にロードするディレクトリが記載されており、コメントアウトがされていないこと
  • 「pubspec.yaml」のassets以下にロードするディレクトリが記載されており、4文字分の半角スペースでインデントされていること

flutter

1[2 whitespaces or 1 tab]assets: 2[4 whitespaces or 2 tabs]- images/pizza1.png 3[4 whitespaces or 2 tabs]- images/pizza0.png

投稿2022/03/02 08:22

Risney

総合スコア148

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanzi

2022/03/07 09:48 編集

Risney様 ご返答ありがとうございます。 assetsについて質問があります。 スマホ本体に画像を保存をしているんですけど、その保存先のgetLibraryDirectoryの pathをどうやったらassetsに組み込めますか? 教えてくれると助かります。
Risney

2022/03/08 02:16

画像保存はあまりやっておらず、調べないとわからないですが、 assetsに画像を保存してしまうという手段もあります。 ・参考 【Flutter】assetsにディレクトリや画像を追加する pubspec.yaml操作編 https://flutternyumon.com/add-directory-and-images/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問