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

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

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

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

Dart

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

Q&A

解決済

1回答

2563閲覧

Flutterで写真を撮影し、その写真のファイル名を変更したい

waribashi

総合スコア30

Flutter

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

Dart

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

0グッド

0クリップ

投稿2021/09/30 13:49

前提・実現したいこと

Flutterを使って写真を撮影し、撮影した写真のファイル名を変更する機能を作成したいです。

写真の撮影する部分は実装できています。
ファイル名変更部分に関しては、名前を変更するためにrenameSync()を使って実装したのですが、ファイル名が変更されているように見えず、詰まっている状態です。

該当のソースコード

Dart

1/* 2名前を変更する処理 3*/ 4Future<void> sendImage(XFile xfile) async { 5 File file = File(xfile.path); //renameSyncを使うためにXFileからFileに変換 6 //新しい名前(Path)を準備 7 String dir = path.dirname(file.path); 8 String newPath = path.join(dir, 'test.jpg'); 9 print('NewPath: ${newPath}'); 10 print('rename前: ${file.path}'); 11 await file.renameSync(newPath); //名前の変更 12 print('rename後: ${file.path}'); //変更されているか確認するためにprint 13} 14 15/* 16写真撮影ボタンが押された時の処理 17*/ 18void onTakePictureButtonPressed() async { 19 // 写真を撮影する 20 XFile? xfile = await takePicture(); 21 if (mounted) { 22 setState(() { 23 imageFile = xfile; 24 videoController?.dispose(); 25 videoController = null; 26 }); 27 } 28 // 写真を撮影できたら、sendImage関数を呼び出す 29 if (xfile != null) { 30 await sendImage(xfile); 31 } 32}

出力結果

二か所あるprint文の出力結果は以下のようになっており、rename後のファイル名が変更されていないように見えます。

NewPath: /data/user/0/com.example.camera_example/cache/test.jpg rename前: /data/user/0/com.example.camera_example/cache/CAP6899748816700081333.jpg rename後: /data/user/0/com.example.camera_example/cache/CAP6899748816700081333.jpg

参考にしたサイト

Rename a file/Image in flutter
Flutter renameSync method

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。

renameSyncはリネーム後のファイルを返す関数なので、

Dart

1/* 2名前を変更する処理 3*/ 4Future<void> sendImage(XFile xfile) async { 5 File file = File(xfile.path); //renameSyncを使うためにXFileからFileに変換 6 //新しい名前(Path)を準備 7 String dir = path.dirname(file.path); 8 String newPath = path.join(dir, 'test.jpg'); 9 print('NewPath: ${newPath}'); 10 print('rename前: ${file.path}'); 11 12//変更点 13 File newFile = await file.renameSync(newPath); //名前の変更 14 print('rename後: ${newFile.path}'); //変更されているか確認するためにprint 15//変更点終わり 16}

というように、新しいファイルを受け取る必要がありました。

投稿2021/09/30 15:17

waribashi

総合スコア30

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問