Flutter选择器插件ph_picker_view_controller的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter选择器插件ph_picker_view_controller的使用

ph_picker_view_controller 是一个用于在 Flutter 应用程序中使用 iOS 的 PHPickerViewController API 的包装器(iOS 14+)。以下是该插件的基本使用方法。

安装

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

dependencies:
  ph_picker_view_controller: ^版本号

然后运行 flutter pub get 来获取该包。

使用

1. 初始化插件

首先,你需要初始化 PhPickerViewController 实例。

final _phPickerViewControllerPlugin = PhPickerViewController();

2. 挑选资源

你可以通过调用 pick 方法来打开资源选择器。以下是一个示例:

Future<void> _pickAssets() async {
  try {
    var results = await _phPickerViewControllerPlugin.pick(
      filter: {
        'any': ['images', 'videos'],
      },
      preferredAssetRepresentationMode: PHPickerAssetRepresentationMode.current,
      selection: PHPickerSelection.ordered,
      selectionLimit: 3,
      appendLiveVideos: true,
    );
    if (results == null) {
      setState(() {
        _output = 'No assets selected';
        _results = [];
      });
      return;
    }

    var output = '';

    // 打印所有文件路径和长度。
    for (var file in results) {
      output += 'File info: $file\n';

      if (file.path != null) {
        var length = await File(file.path!).length();
        output += 'File length: $length\n';
      }

      output += '------------\n\n';
    }

    setState(() {
      _output = output;
      _results = results;
    });
  } catch (err) {
    setState(() {
      _output = err.toString();
    });
  }
}

3. 删除资源

你也可以通过调用 delete 方法来删除已选择的资源。以下是一个示例:

Future<void> _deleteAssets() async {
  try {
    final res = await _phPickerViewControllerPlugin.delete(_results.map((e) => e.id).toList());
    setState(() {
      _output = 'Deleted: $res';
      _results = [];
    });
  } catch (err) {
    setState(() {
      _output = err.toString();
    });
  }
}

示例代码

以下是一个完整的示例代码,展示了如何使用 ph_picker_view_controller 插件:

import 'dart:io';

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _output = '';
  List<PHPickerResult> _results = [];
  final _phPickerViewControllerPlugin = PhPickerViewController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: SingleChildScrollView(
            child: Padding(
                padding: const EdgeInsets.all(16),
                child: Column(
                  children: [
                    const Text('Pick assets by clicking the + button'),
                    const SizedBox(
                      height: 10,
                    ),
                    Text(_output),
                    const SizedBox(
                      height: 10,
                    ),
                    if (_results.isNotEmpty)
                      OutlinedButton(
                          onPressed: _deleteAssets,
                          child: const Text('Delete'))
                  ],
                ))),
        floatingActionButton: FloatingActionButton(
          onPressed: _pickAssets,
          tooltip: 'Select an asset',
          child: const Icon(Icons.add),
        ),
      ),
    );
  }

  Future<void> _pickAssets() async {
    try {
      var results = await _phPickerViewControllerPlugin.pick(
        filter: {
          'any': ['images', 'videos'],
        },
        preferredAssetRepresentationMode: PHPickerAssetRepresentationMode.current,
        selection: PHPickerSelection.ordered,
        selectionLimit: 3,
        appendLiveVideos: true,
      );
      if (results == null) {
        setState(() {
          _output = 'No assets selected';
          _results = [];
        });
        return;
      }

      var output = '';

      // 打印所有文件路径和长度。
      for (var file in results) {
        output += 'File info: $file\n';

        if (file.path != null) {
          var length = await File(file.path!).length();
          output += 'File length: $length\n';
        }

        output += '------------\n\n';
      }

      setState(() {
        _output = output;
        _results = results;
      });
    } catch (err) {
      setState(() {
        _output = err.toString();
      });
    }
  }

  Future<void> _deleteAssets() async {
    try {
      final res = await _phPickerViewControllerPlugin.delete(_results.map((e) => e.id).toList());
      setState(() {
        _output = 'Deleted: $res';
        _results = [];
      });
    } catch (err) {
      setState(() {
        _output = err.toString();
      });
    }
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用ph_picker_view_controller插件的详细步骤和代码示例。请注意,ph_picker_view_controller是一个iOS平台特定的插件,用于在Flutter应用中展示一个类似于iOS原生选择器(Picker View)的组件。由于这是一个iOS特定的插件,因此你需要在iOS平台上进行测试。

步骤 1: 添加依赖

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

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

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

步骤 2: 配置iOS原生代码

由于ph_picker_view_controller是一个iOS平台特定的插件,你需要在iOS原生代码中进行一些配置。不过,通常这个插件已经为你处理好了大部分配置,你只需要确保你的Info.plist文件中包含了必要的权限(如果需要的话)。

步骤 3: 使用插件

在你的Flutter代码中,你可以使用ph_picker_view_controller来显示选择器。以下是一个简单的示例,展示了如何使用这个插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Picker View Example'),
        ),
        body: Center(
          child: PickerButton(),
        ),
      ),
    );
  }
}

class PickerButton extends StatefulWidget {
  @override
  _PickerButtonState createState() => _PickerButtonState();
}

class _PickerButtonState extends State<PickerButton> {
  List<String> items = ['Option 1', 'Option 2', 'Option 3', 'Option 4'];
  String selectedItem = '';

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        final result = await PhpickerViewController.showPicker(
          context: context,
          title: 'Please select an option',
          items: items,
          initialSelection: 0,
        );

        if (result != null) {
          setState(() {
            selectedItem = items[result];
          });

          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(
              content: Text('You selected: $selectedItem'),
            ),
          );
        }
      },
      child: Text('Show Picker'),
    );
  }
}

解释

  1. 导入插件:确保你已经导入了ph_picker_view_controller插件。
  2. 创建UI:创建一个简单的UI,包含一个按钮来触发选择器。
  3. 显示选择器:当按钮被点击时,调用PhpickerViewController.showPicker方法来显示选择器。
  4. 处理结果:选择器关闭后,处理返回的结果,并更新UI。

注意事项

  • 由于这是一个iOS平台特定的插件,确保你在iOS模拟器或真机上运行这个示例。
  • 插件的版本可能会更新,请查阅最新的插件文档和示例代码以确保兼容性。

希望这能帮助你在Flutter项目中成功使用ph_picker_view_controller插件!

回到顶部