Flutter图片资源获取插件gelbooru的使用
Flutter图片资源获取插件gelbooru的使用
特性
- 实现了Gelbooru API的所有#5端点。
- 没有抓取网页,所有的请求都是通过API进行,温和且尊重API速率限制。
- 使用Dart原生的
http
包进行请求,允许动态使用更高级的实现。
开始使用
运行以下命令:
# 你也可以添加http和xml包以处理各自的异常
$ dart pub add gelbooru
使用示例
import 'dart:io';
import 'package:gelbooru/gelbooru.dart';
/// 获取Gelbooru上最后的10个帖子
void main() async {
final client = GelbooruClient(baseUrl: 'https://gelbooru.com');
/// 你可以使用自定义的基于http的客户端
/// 如cupertino_http包
/// final client = GelbooruClient(baseUrl: 'https://gelbooru.com', httpClient: CupertinoClient.fromSessionConfiguration(config));
/// [PostResponsePage] 是一个包含 [Post] 的可迭代对象,同时包含请求的元数据
/// 包括 [offset]、[limit] 和 [count]
final PostResponsePage posts = await client.getPosts(
limit: 10,
page: 1,
tags: 'rating:safe',
);
/// [PostResponsePage] 是可迭代的,因此可以使用 [UnmodifiableListView] 的所有方法
if(posts.isEmpty) {
print('未找到帖子');
return;
}
for(final Post post in posts) {
print('帖子ID: ${post.id} @ 标签: ${post.tags.join(', ')} @ 链接: ${post.fileUrl}');
}
/// 类似地,对于标签、评论和用户
/// [TagResponsePage]、[CommentResponsePage] 和 [UserResponsePage] 分别是包含 [Tag]、[Comment] 和 [User] 的可迭代对象
final TagResponsePage tags = await client.getTags(
limit: 10,
page: 1,
order: TagOrder.count,
orderBy: TagOrderBy.desc,
);
final CommentResponsePage comments = await client.getComments(
limit: 10,
page: 1,
);
final UserResponsePage users = await client.getUsers(
limit: 10,
page: 1,
);
exit(0);
}
更多关于Flutter图片资源获取插件gelbooru的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片资源获取插件gelbooru的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你希望使用 gelbooru
API 来获取图片资源,你需要一个自定义的网络请求库来与 gelbooru
API 进行交互。由于 gelbooru
是一个公开的图像板(imageboard),通常用于分享和搜索动漫、游戏等相关图片,你需要确保你的应用遵循其使用条款和条件,并尊重版权。
下面是一个基本的例子,展示了如何使用 dio
库来从 gelbooru
获取图片资源。请注意,你需要替换 API 密钥和相关的 URL,以符合 gelbooru
的实际使用要求。通常,这些服务可能要求注册并获得 API 访问权限。
首先,在你的 pubspec.yaml
文件中添加 dio
依赖:
dependencies:
flutter:
sdk: flutter
dio: ^4.0.0 # 请检查最新版本号
然后,运行 flutter pub get
来安装依赖。
接下来,创建一个 Dart 文件(例如 gelbooru_service.dart
),用于封装与 gelbooru
的交互逻辑:
import 'package:dio/dio.dart';
class GelbooruService {
final Dio dio;
String baseUrl = "https://api.gelbooru.com/index.php"; // 基础URL,实际使用时可能需要调整
GelbooruService(this.dio);
// 创建一个获取图片列表的方法
Future<List<Map<String, dynamic>>> getImages(String tags, int limit) async {
try {
String url = "$baseUrl?page=dapi&s=post&q=index&tags=$tags&limit=$limit";
Response<Map<String, dynamic>> response = await dio.get(url);
if (response.statusCode == 200) {
Map<String, dynamic> data = response.data;
List<Map<String, dynamic>> posts = data["posts"] as List<Map<String, dynamic>>;
return posts;
} else {
throw Exception("Failed to fetch images");
}
} catch (e) {
throw e;
}
}
}
在你的主应用逻辑中(例如 main.dart
),你可以这样使用这个服务:
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'gelbooru_service.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Gelbooru Image Fetcher'),
),
body: GelbooruImageFetcher(),
),
);
}
}
class GelbooruImageFetcher extends StatefulWidget {
@override
_GelbooruImageFetcherState createState() => _GelbooruImageFetcherState();
}
class _GelbooruImageFetcherState extends State<GelbooruImageFetcher> {
List<Map<String, dynamic>> images = [];
@override
void initState() {
super.initState();
_fetchImages();
}
Future<void> _fetchImages() async {
Dio dio = Dio();
GelbooruService service = GelbooruService(dio);
try {
images = await service.getImages("rating:safe tag:anime limit:10", 10);
setState(() {});
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
itemCount: images.length,
itemBuilder: (BuildContext context, int index) {
Map<String, dynamic> image = images[index];
String imageUrl = image["file_url"] as String;
return Image.network(imageUrl);
},
);
}
}
这个示例代码展示了如何使用 dio
库来从 gelbooru
获取图片,并在 Flutter 应用中显示它们。请注意,你需要确保你的 gelbooru
使用符合其服务条款,并且处理任何可能的错误和异常。此外,gelbooru
的实际 API 端点和参数可能随时间而变化,因此请查阅最新的文档以获取正确的信息。