Flutter图片选择对话框插件image_picker_dialog的使用

Flutter图片选择对话框插件image_picker_dialog的使用

插件信息

  • 版本: image_picker_dialog 版本

  • 大小: image_picker_dialog 大小

  • 问题数量: image_picker_dialog 问题

  • 点赞数量: image_picker_dialog 点赞

使用方法

iOS

Info.plist文件中添加以下权限描述:

<key>NSCameraUsageDescription</key>
<string>您的相机使用说明</string>
<key>NSMicrophoneUsageDescription</key>
<string>您的麦克风使用说明</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>为了访问您的照片库</string>
Android

AndroidManifest.xml文件中添加以下配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.fluttercandies.photo_manager_example">

    <application
        android:label="photo_manager_example"
        android:icon="@mipmap/ic_launcher"
        android:requestLegacyExternalStorage="true">
    </application>

</manifest>

UI 示例

UI Demo

完整示例代码

以下是使用image_picker_dialog插件的完整示例代码。

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 初始化控制器
  final controller = GalleryController(
    gallerySetting: const GallerySetting(
      enableCamera: true,
      maximum: 19,
      requestType: RequestType.common,
      actionButton: null,
      albumColor: Colors.black,
      albumTitleStyle: TextStyle(fontSize: 16),
    ),
    panelSetting: const PanelSetting(),
    headerSetting: const HeaderSetting(
      borderRadius: BorderRadius.only(
        topLeft: Radius.circular(8),
        topRight: Radius.circular(8),
      ),
    ),
  );

  // 创建一个值监听器用于更新图片列表
  final notifier = ValueNotifier<List<MediaEntity>>([]);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GalleryViewWrapper(
      controller: controller,
      child: Scaffold(
        backgroundColor: Colors.green,
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              // 显示选中的图片
              ValueListenableBuilder(
                  valueListenable: notifier,
                  builder: (ctx, values, _) => Wrap(
                        children: [
                          for (final value in values)
                            Image.memory(
                              value.bytes,
                              width: 40,
                              height: 40,
                              fit: BoxFit.cover,
                            ),
                        ],
                      )),
              // 显示图片选择对话框
              ValueListenableBuilder<List<MediaEntity>>(
                valueListenable: notifier,
                builder: (context, list, child) {
                  return GalleryViewField(
                    controller: controller,
                    selectedEntities: list,
                    onChanged: (entity, isRemoved) {
                      final value = notifier.value.toList();
                      if (isRemoved) {
                        value.remove(entity);
                      } else {
                        value.add(entity);
                      }
                      notifier.value = value;
                    },
                    onSubmitted: (list) async {
                      notifier.value = list;
                    },
                    child: child,
                  );
                },
                child: const Icon(Icons.image, color: Colors.black, size: 24.0),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter图片选择对话框插件image_picker_dialog的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片选择对话框插件image_picker_dialog的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用image_picker_dialog插件的详细代码示例。这个插件允许你以对话框的形式选择图片,非常适合需要用户从设备相册或相机中选择图片的场景。

首先,你需要在你的pubspec.yaml文件中添加image_picker_dialog依赖:

dependencies:
  flutter:
    sdk: flutter
  image_picker_dialog: ^latest_version  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用image_picker_dialog

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:image_picker_dialog/image_picker_dialog.dart';
  1. 创建选择图片的函数
Future<void> pickImage() async {
  try {
    final result = await ImagePickerDialog.pickImage(
      context: context,
      title: '选择图片',
      thumbSize: 100,
      imageLimitCount: 1,  // 限制选择的图片数量
      enableCamera: true,  // 是否启用相机
      isCompressed: true,  // 是否压缩图片
      maxDuration: const Duration(seconds: 10),  // 视频的最大时长(如果启用视频选择)
      // 选择图片后的回调
      onSelectedFiles: (files) async {
        // 这里files是一个List<MediaFile>,你可以根据需要进行处理
        if (files.isNotEmpty) {
          final file = files.first;
          // 例如,你可以显示选择的图片
          setState(() {
            _imagePath = file.path;
          });
        }
      },
    );
  } catch (e) {
    print(e);
  }
}
  1. 在UI中调用选择图片的函数
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? _imagePath;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Image Picker Dialog Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              if (_imagePath != null)
                Image.file(
                  File(_imagePath!),
                  width: 300,
                  height: 300,
                  fit: BoxFit.cover,
                )
              else
                Text('没有选择图片'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: pickImage,
                child: Text('选择图片'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

这个示例代码展示了如何使用image_picker_dialog插件来选择图片,并在UI中显示选中的图片。如果你需要更多的功能,比如选择视频或者限制图片类型,你可以查阅image_picker_dialog的官方文档,了解更多的配置选项。

回到顶部