Flutter图片资源选择插件pixabay_picker的使用

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

Flutter图片资源选择插件pixabay_picker的使用

介绍

pixabay_picker 是一个用于从 Pixabay 获取媒体资源(如图片和视频)的 Flutter/Dart 插件。它提供了一个纯 Dart API,可以方便地与 Pixabay 的 API 进行交互。未来版本还将增强为包含一个 Flutter 媒体选择器。

使用说明

1. 创建 API 接口

首先,你需要创建一个 PixabayPicker 实例,并传入你的 API 密钥。你可以通过设置 language 参数来选择搜索语言,默认是英文。safeSearch 参数默认为 true,表示启用安全搜索,你也可以根据需要修改这个值。

// 创建 API 接口
PixabayPicker picker = PixabayPicker(
  apiKey: ApiKey, 
  language: "zh", // 设置语言为中文
  safeSearch: true // 启用安全搜索
);
2. 获取特定类别的图片

你可以通过 requestImages 方法获取特定类别的图片。例如,获取商业类别的图片:

// 获取商业类别的图片
PixabayResponse res = await picker.api.requestImages(
  resultsPerPage: 4, // 每页返回4张图片
  category: Category.business // 指定类别为商业
);

// 遍历结果
res.hits.forEach((f) {
  print(f); // 打印每张图片的信息
});
3. 使用关键词搜索图片

你可以通过 requestImagesWithKeyword 方法使用关键词搜索图片。注意,如果你在创建 API 对象时设置了语言参数,那么关键词也需要使用相应的语言。

// 使用关键词搜索图片
res = await picker.api.requestImagesWithKeyword(
  keyword: "狗", // 中文关键词
  resultsPerPage: 30 // 每页返回30张图片
);

// 遍历结果
if (res != null) {
  res.hits!.forEach((f) {
    print(f); // 打印每张图片的信息
  });
}
4. 搜索其他媒体(如视频)

除了图片,你还可以搜索视频。使用 requestVideosWithKeyword 方法来搜索带有特定关键词的视频。

// 使用关键词搜索视频
res = await picker.api.requestVideosWithKeyword(
  keyword: "狗", // 中文关键词
  resultsPerPage: 30 // 每页返回30个视频
);

// 遍历结果
if (res != null) {
  res.hits!.forEach((f) {
    print(f); // 打印每个视频的信息
  });
}
5. 下载媒体

你可以使用 downloadMedia 方法下载图片或视频。该方法返回一个 BytesBuilder 对象,你可以从中获取媒体的二进制数据。

// 下载图片
BytesBuilder bytes = await picker.api.downloadMedia(
  res.hits![0], // 选择第一张图片
  Resolution.medium // 下载中等分辨率的图片
);

print(bytes.length); // 打印下载的字节数
6. 获取每个类别的图片和视频

你可以使用 requestMapByCategory 方法来获取每个类别的图片和视频。该方法返回一个 Stream,你可以监听它以获取不同类别的媒体资源。

// 获取每个类别的3张图片和3个视频
Stream<Map<String, Map<MediaType, PixabayResponse>>> result =
    picker.api.requestMapByCategory(
        photoResultsPerCategory: 3, // 每个类别返回3张图片
        videoResultsPerCategory: 3 // 每个类别返回3个视频
    );

result.listen((Map<String, Map<MediaType, PixabayResponse>> onData) {
  var values = onData.values.toList();
  var keys = onData.keys.toList();

  // 打印第一个类别的视频缩略图链接
  print(keys[0] + ": 缩略图 " + values[0][MediaType.video]!.hits![0].getThumbnailLink()!);
  // 打印第一个类别的视频信息
  print(keys[0] + ":" + values[0][MediaType.video]!.hits![0].toString());
  // 打印第一个类别的图片缩略图链接
  print(keys[0] + ": 缩略图 " + values[0][MediaType.photo]!.hits![0].getThumbnailLink()!);
  // 打印第一个类别的图片信息
  print(keys[0] + ":" + values[0][MediaType.photo]!.hits![0].toString());
});

完整示例代码

以下是一个完整的示例代码,展示了如何使用 pixabay_picker 插件来获取和显示图片和视频。

import 'dart:io';
import 'package:pixabay_picker/model/pixabay_media.dart';
import 'package:pixabay_picker/pixabay_api.dart';

import 'key.dart'; // 引入你的 API 密钥

void main() async {
  // 创建 API 接口
  PixabayMediaProvider api = PixabayMediaProvider(
    apiKey: ApiKey, 
    language: "zh" // 设置语言为中文
  );

  // 获取商业类别的图片
  PixabayResponse? res = await api.requestImages(
    resultsPerPage: 1, 
    category: Category.business
  );

  if (res != null) {
    res.hits!.forEach((f) {
      print(f); // 打印每张图片的信息
    });
  }

  print("--------------------------------------");

  // 使用关键词搜索图片
  res = await api.requestImagesWithKeyword(
    keyword: "狗", 
    resultsPerPage: 30
  );

  if (res != null) {
    res.hits!.forEach((f) {
      print(f); // 打印每张图片的信息
    });

    // 下载第一张图片
    BytesBuilder bytes = await api.downloadMedia(
      res.hits![0], 
      Resolution.medium
    );

    print(bytes.length); // 打印下载的字节数
  }

  // 获取所有视频
  res = await api.requestVideos();

  if (res != null) {
    res.hits!.forEach((f) {
      print(f); // 打印每个视频的信息
    });
  }

  // 使用关键词搜索视频
  res = await api.requestVideosWithKeyword(
    keyword: "狗", 
    resultsPerPage: 30
  );

  if (res != null) {
    res.hits!.forEach((f) {
      print(f); // 打印每个视频的信息
    });

    // 下载第一个视频
    BytesBuilder bytes = await api.downloadMedia(
      res.hits![0], 
      Resolution.medium
    );

    print(bytes.length); // 打印下载的字节数
  }

  // 获取每个类别的3张图片和3个视频
  Stream<Map<String, Map<MediaType, PixabayResponse?>>> result =
      api.requestMapByCategory(
          photoResultsPerCategory: 3, 
          videoResultsPerCategory: 3
      );

  result.listen((Map<String, Map<MediaType, PixabayResponse?>> onData) {
    var values = onData.values.toList();
    var keys = onData.keys.toList();

    // 打印第一个类别的视频缩略图链接
    print(keys[0] + ": 缩略图 " + values[0][MediaType.video]!.hits![0].getThumbnailLink()!);
    // 打印第一个类别的视频信息
    print(keys[0] + ":" + values[0][MediaType.video]!.hits![0].toString());
    // 打印第一个类别的图片缩略图链接
    print(keys[0] + ": 缩略图 " + values[0][MediaType.photo]!.hits![0].getThumbnailLink()!);
    // 打印第一个类别的图片信息
    print(keys[0] + ":" + values[0][MediaType.photo]!.hits![0].toString());
  });
}

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

1 回复

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


当然,下面是一个关于如何使用 pixabay_picker 插件在 Flutter 中选择图片资源的代码示例。pixabay_picker 插件允许你从 Pixabay API 中搜索和选择图片,然后在你的 Flutter 应用中使用这些图片。

首先,确保你已经在 pubspec.yaml 文件中添加了 pixabay_picker 依赖:

dependencies:
  flutter:
    sdk: flutter
  pixabay_picker: ^最新版本号  # 请替换为当前最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,是一个简单的 Flutter 应用示例,展示了如何使用 pixabay_picker

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _imageUrl = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Pixabay Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _imageUrl.isEmpty
                ? Text('No image selected')
                : Image.network(_imageUrl),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final result = await PixabayPicker.pickImage(
                  apiKey: '你的Pixabay API密钥',  // 请替换为你的Pixabay API密钥
                  context: context,
                );
                if (result != null) {
                  setState(() {
                    _imageUrl = result.largeImageURL;
                  });
                }
              },
              child: Text('Pick Image from Pixabay'),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖导入

    import 'package:pixabay_picker/pixabay_picker.dart';
    
  2. 状态管理_MyHomePageState 类管理图片 URL 的状态。

  3. UI 构建

    • 使用 CenterColumn 布局组件。
    • 如果没有选择图片,显示 “No image selected” 文本。
    • 如果选择了图片,显示该图片。
  4. 选择图片按钮

    • ElevatedButton 触发 PixabayPicker.pickImage 方法。
    • 传入 apiKeycontext 参数。
    • 如果选择成功,更新 _imageUrl 状态。

注意事项:

  • 你需要在 Pixabay 网站上注册并获取一个 API 密钥,然后将其替换为代码中的 '你的Pixabay API密钥'
  • 确保你的网络连接正常,因为 PixabayPicker 需要从互联网上获取数据。

这个示例展示了如何使用 pixabay_picker 插件在 Flutter 应用中选择和显示图片。你可以根据需要进行进一步的自定义和扩展。

回到顶部