lib/photo_list_screen.dart
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:photoapp/photo_view_screen.dart';
import 'package:photoapp/sign_in_screen.dart';
class PhotoListScreen extends StatefulWidget {
@override
_PhotoListScreenState createState() => _PhotoListScreenState();
}
class _PhotoListScreenState extends State<PhotoListScreen> {
// ...
@override
Widget build(BuildContext context) {
return Scaffold(
// ...
// 画像追加用ボタン
floatingActionButton: FloatingActionButton(
// 画像追加用ボタンをタップしたときの処理
onPressed: () => _onAddPhoto(),
child: Icon(Icons.add),
),
// ...
);
}
// ...
Future<void> _onAddPhoto() async {
// 画像ファイルを選択
final FilePickerResult? result = await FilePicker.platform.pickFiles(
type: FileType.image,
);
// 画像ファイルが選択された場合
if (result != null) {
// ログイン中のユーザー情報を取得
final User user = FirebaseAuth.instance.currentUser!;
// フォルダとファイル名を指定し画像ファイルをアップロード
final int timestamp = DateTime.now().microsecondsSinceEpoch;
final File file = File(result.files.single.path!);
final String name = file.path.split('/').last;
final String path = '${timestamp}_$name';
final TaskSnapshot task = await FirebaseStorage.instance
.ref()
.child('users/${user.uid}/photos') // フォルダ名
.child(path) // ファイル名
.putFile(file); // 画像ファイル
}
}
}