首页
/ Flutter Photo Manager 使用教程

Flutter Photo Manager 使用教程

2026-01-18 10:01:16作者:虞亚竹Luna

项目介绍

Flutter Photo Manager 是一个用于管理移动设备上照片和视频的开源库。它提供了丰富的API,使得开发者能够轻松地访问和操作设备中的媒体资源。该库支持iOS和Android平台,并且与Flutter框架完美集成,为开发者提供了一个高效、简洁的解决方案。

项目快速启动

安装依赖

首先,在你的Flutter项目中添加photo_manager依赖:

dependencies:
  photo_manager: ^1.0.0

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

初始化

在你的Flutter应用中,导入photo_manager库:

import 'package:photo_manager/photo_manager.dart';

获取媒体资源

以下是一个简单的示例,展示如何获取设备中的所有图片:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PhotoListScreen(),
    );
  }
}

class PhotoListScreen extends StatefulWidget {
  @override
  _PhotoListScreenState createState() => _PhotoListScreenState();
}

class _PhotoListScreenState extends State<PhotoListScreen> {
  List<AssetEntity> assets = [];

  @override
  void initState() {
    super.initState();
    _fetchAssets();
  }

  Future<void> _fetchAssets() async {
    final PermissionState ps = await PhotoManager.requestPermissionExtend();
    if (ps.isAuth) {
      List<AssetPathEntity> paths = await PhotoManager.getAssetPathList();
      if (paths.isNotEmpty) {
        List<AssetEntity> list = await paths.first.getAssetListPaged(page: 0, size: 50);
        setState(() {
          assets = list;
        });
      }
    } else {
      PhotoManager.openSetting();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Photo Manager'),
      ),
      body: GridView.builder(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
        ),
        itemCount: assets.length,
        itemBuilder: (context, index) {
          return FutureBuilder(
            future: assets[index].thumbDataWithSize(200, 200),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                return Image.memory(snapshot.data);
              }
              return Container();
            },
          );
        },
      ),
    );
  }
}

应用案例和最佳实践

案例一:图片选择器

一个常见的应用场景是实现一个图片选择器,允许用户从设备中选择多张图片。以下是一个简单的实现示例:

class ImagePickerScreen extends StatefulWidget {
  @override
  _ImagePickerScreenState createState() => _ImagePickerScreenState();
}

class _ImagePickerScreenState extends State<ImagePickerScreen> {
  List<AssetEntity> selectedAssets = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker'),
      ),
      body: GridView.builder(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
        ),
        itemCount: assets.length,
        itemBuilder: (context, index) {
          return GestureDetector(
            onTap: () {
              setState(() {
                if (selectedAssets.contains(assets[index])) {
                  selectedAssets.remove(assets[index]);
                } else {
                  selectedAssets.add(assets[index]);
                }
              });
            },
            child: Stack(
              children: [
                FutureBuilder(
                  future: assets[index].thumb
登录后查看全文
热门项目推荐
相关项目推荐