🏙️

【Flutter】image_pickerの複数画像選択(pickMultiImage)に枚数上限を設定してもAndroidだけ機能しない件

2024/06/19に公開

はじめに

image_pickerはFlutterで画像選択機能を提供する便利なパッケージです。このパッケージを使用すると、ギャラリーやカメラから画像を選択し、アプリに取り込むことができます。
また、pickMultiImageメソッドを使用することで複数画像の選択をすることができ、limitパラメータに値を渡すことで、選択できる画像の最大枚数を制限することができます。
そこでAndroidのみ制限がかからないエラーに遭遇したので対処した内容を書きます。

image_pickerの使い方は割愛します。私の書いた記事ではないですが、下記の別記事参照お願いします。
https://zenn.dev/wakanao/articles/cf44c543892324

バージョン

  • Flutter 3.19.5
  • image_picker ^1.0.7

コード

この記事では上限枚数を5枚として設定します。

final ImagePicker _picker = ImagePicker();
final List<XFile>? images = await _picker.pickMultiImage(limit: 5);

エラー内容

下記の画像の通りiosでは画面に白いマスクがかかり、6枚以上選択できなくなっています。しかし、Androidでは6枚以上選択できるようになってしまっています。

ios

Android

結論

調べてみたところ、Android 13から導入されたPhoto Picker APIがデフォルトではfalseで有効になっていないので、ここを有効にすることでlimitの値を適用させて制限をかけれるようになるとのこと。

まずはpubspec.yamlに下記を記述します。

pubspec.yaml
  dependencies:
    image_picker: ^1.0.7
+   image_picker_android: ^0.8.12
+   image_picker_platform_interface: ^2.10.0

main.dartにも下記コードを追記します。

main.dart
  import 'package:flutter/material.dart';
  import 'package:image_picker/image_picker.dart';
+ import 'package:image_picker_android/image_picker_android.dart';
+ import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';

  void main() {
+   final imagePickerImplementation = ImagePickerPlatform.instance;
+   if (imagePickerImplementation is ImagePickerAndroid) {
+     imagePickerImplementation.useAndroidPhotoPicker = true;
+   }
    runApp(MyApp());
  }

  class MyApp extends StatelessWidget {
    
    Widget build(BuildContext context) {
      return MaterialApp(
        title: 'Image Picker Sample',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      );
    }
  }

結果

6枚目を選択しようとタップすると「5件まで選択できます」というポップアップが出て選択できなくなってます。

最後に

日本語で調べましたが、この記事書いてる時点ではヒットせず。
英語で調べたら下記のissuesが出てきたので参考にさせていただきました。

参考URL
https://github.com/flutter/flutter/issues/147773#issuecomment-2098037870

Discussion