LoginSignup
1
0

【超簡単】Flutterでiosのカメラ使ってみた

Last updated at Posted at 2024-03-21

作るもの

flutter初めたての初心者でも作れる簡単な、写真を選択して表示する簡単なiosアプリを作成しますー!

コードはこちら

flutterアプリの作成

flutter create camera_app
cd camera_app

image_pickerのインストール

公式: https://pub.dev/packages/image_picker/install

flutter pub add image_picker

pubspec.yamlimage_pickerが追加されています

pubspec.yaml
  image_picker: ^1.0.7

video_playerのインストール

image_pickerと同様にvideo_playerもインストールします

flutter pub add video_player
pubspec.yaml
  image_picker: ^1.0.7
  video_player: ^2.8.3

iosのカメラの設定

まずはiosのカメラと写真フォルダへのアクセス権限の設定をします

ios/Runner/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
+	<key>NSPhotoLibraryUsageDescription</key>
+	<string>フォトライブラリを利用する理由を記載</string>
+	<key>NSCameraUsageDescription</key>
+	<string>カメラを利用する理由を記載</string>
+	<key>NSMicrophoneUsageDescription</key>
+	<string>マイクを利用する理由を記載</string>

	<!-- 略 -->
</dict>
</plist>
lib/main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  // 略
}

class MyHomePage extends StatefulWidget {
  // 略
}

class _MyHomePageState extends State<MyHomePage> {
  // カメラの処理
  XFile? _image;
  final ImagePicker _picker = ImagePicker();

  // カメラから画像を指定する関数
  Future<void> _getImageFromCamera() async {
    final file = await _picker.pickImage(source: ImageSource.camera);
    setState(() {
      if (file != null) {
        _image = XFile(file.path);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: _image == null
            ? const Text("写真を撮ってね")
            : Image.file(File(_image!.path)),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _getImageFromCamera,
        child: const Icon(Icons.photo_camera),
      ),
    );
  }
}

iosシミュレータを起動して実行するとこんな感じになりました
わからない方はこちらをみてみてください
simulator_screenshot_58F77114-0340-4F80-A5EE-AADC316DEBAE.png

カメラボタンを押すとエラーが出ました
image.png
おそらくシミュレータなので利用可能なカメラが存在しなかったからかと思います
実機で動かすとうまくいけてることが確認できます
実機での動かし方はこちらの記事などを参考にしてください

写真フォルダの設定

カメラの設定と同じように写真フォルダ用の関数を追加していきます

lib/main.dart
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  // 略
}

class MyHomePage extends StatefulWidget {
  // 略
}

class _MyHomePageState extends State<MyHomePage> {
  // カメラの処理
  XFile? _image;
  final ImagePicker _picker = ImagePicker();

  // カメラから画像を指定する関数
  Future<void> _getImageFromCamera() async {
    // 略
  }

  // 写真フォルダから画像を指定する関数
+  Future<void> _getImageFromGallery() async {
+    final file = await _picker.pickImage(source: ImageSource.gallery);
+    setState(() {
+      if (file != null) {
+        _image = XFile(file.path);
+      }
+    });
+  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: _image == null
            ? const Text("写真を撮ってね")
            : Image.file(File(_image!.path)),
      ),
+      floatingActionButton: Column(
+        mainAxisSize: MainAxisSize.min,
+        children: [
+        FloatingActionButton(
+          onPressed: _getImageFromCamera,
+          child: const Icon(Icons.photo_camera),
+        ),
+        FloatingActionButton(
+          onPressed: _getImageFromGallery,
+          child: const Icon(Icons.photo_album),
+        ),
+      ]),
    );
  }
}

実行すると右下のfloatingActionButtonが増えていると思います
simulator_screenshot_24F3CE51-1E62-432A-A84D-398316A30ADB.png
下の写真フォルダ用のボタンをクリックすると写真を表示することができました
simulator_screenshot_8DFD98C2-B1F6-4F85-B212-865AB874DDC9.png

まとめ

ここまでで以上です
カメラ起動できなかったのはダメダメでしたが、flutter初心者でも簡単に写真を扱えたかなと思います
ご指摘等あればコメントお願いします
終わり〜〜
ばいちゃ〜〜

エラー日記

1. Image.file is not supported on Flutter Web

chromeで、Image.file(File(_image!.path))を使って画像を表示しようとしたら怒られました
僕の場合は、iosシミュレータを使って動かしましたが、どうしてもchromeで動かしたいときは代わりにImage.assetかImage.networkを使用すると良いみたいですね
"Image.file is not supported on Flutter Web. Consider using either Image.asset or Image.network instead."

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0