Fluttermoebooru插件的动漫图片浏览功能使用

Fluttermoebooru插件的动漫图片浏览功能使用

简介

此简单库旨在为基于Moebooru的图像板提供一种易于使用的解决方案。

特性

  • 获取帖子
  • 创建帖子

开始使用

首先,在您的项目中添加moebooru插件:

dart pub add moebooru

使用示例

以下是一个完整的示例,展示如何使用Fluttermoebooru插件来浏览动漫图片。

完整示例代码

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

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

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

class AnimeImageBrowser extends StatefulWidget {
  @override
  _AnimeImageBrowserState createState() => _AnimeImageBrowserState();
}

class _AnimeImageBrowserState extends State<AnimeImageBrowser> {
  // 初始化Moebooru客户端
  final client = MoebooruClient('https://safebooru.org'); // 替换为您要使用的Moebooru站点URL

  List<Post> _posts = [];
  bool _isLoading = true;

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

  // 获取帖子数据
  Future<void> fetchPosts() async {
    try {
      final posts = await client.getPosts(tags: 'anime', limit: 20); // 搜索包含“anime”标签的图片
      setState(() {
        _posts = posts;
        _isLoading = false;
      });
    } catch (e) {
      print('Error fetching posts: $e');
      setState(() {
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('动漫图片浏览器'),
      ),
      body: _isLoading
          ? Center(child: CircularProgressIndicator())
          : GridView.builder(
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 3,
              ),
              itemCount: _posts.length,
              itemBuilder: (context, index) {
                final post = _posts[index];
                return GestureDetector(
                  onTap: () {
                    // 点击图片时打开大图预览
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => ImageViewer(post: post),
                      ),
                    );
                  },
                  child: Image.network(
                    post.fileUrl,
                    fit: BoxFit.cover,
                  ),
                );
              },
            ),
    );
  }
}

// 图片预览页面
class ImageViewer extends StatelessWidget {
  final Post post;

  const ImageViewer({required this.post});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('图片预览'),
      ),
      body: Center(
        child: Hero(
          tag: post.id.toString(),
          child: Image.network(
            post.fileUrl,
            fit: BoxFit.contain,
          ),
        ),
      ),
    );
  }
}

代码说明

  1. 初始化客户端

    final client = MoebooruClient('https://safebooru.org');
    

    这里我们初始化了一个MoebooruClient对象,并传入目标Moebooru站点的URL。您可以根据需要替换为您想要使用的站点。

  2. 获取帖子数据

    final posts = await client.getPosts(tags: 'anime', limit: 20);
    

    使用getPosts方法获取包含特定标签(如anime)的图片列表。这里限制了返回的结果数量为20个。

  3. 显示图片网格

    GridView.builder(
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
      itemCount: _posts.length,
      itemBuilder: (context, index) {
        final post = _posts[index];
        return GestureDetector(
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => ImageViewer(post: post)),
            );
          },
          child: Image.network(post.fileUrl, fit: BoxFit.cover),
        );
      },
    )
    

    使用GridView.builder构建一个3列的网格布局,每个网格项显示一张图片。点击图片时会导航到ImageViewer页面以查看大图。

  4. 图片预览页面

    class ImageViewer extends StatelessWidget {
      final Post post;
    
      const ImageViewer({required this.post});
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('图片预览')),
          body: Center(
            child: Hero(
              tag: post.id.toString(),
              child: Image.network(post.fileUrl, fit: BoxFit.contain),
            ),
          ),
        );
      }
    }
    

更多关于Fluttermoebooru插件的动漫图片浏览功能使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Fluttermoebooru插件的动漫图片浏览功能使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


FlutterMoebooru 是一个基于 Flutter 框架开发的插件,主要用于浏览和下载 Moebooru 类图站(如 Danbooru、Yande.re、Konachan 等)的动漫图片。以下是使用 FlutterMoebooru 插件的动漫图片浏览功能的基本步骤:

1. 安装插件

首先,你需要在你的 Flutter 项目中添加 flutter_moebooru 插件。在 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_moebooru: ^版本号

然后运行 flutter pub get 来安装插件。

2. 初始化插件

在你的 Flutter 项目中,导入插件并初始化:

import 'package:flutter_moebooru/flutter_moebooru.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FlutterMoebooru Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MoebooruHomePage(),
    );
  }
}

3. 使用浏览功能

FlutterMoebooru 插件提供了一个现成的页面来浏览图片。你可以直接使用 MoebooruHomePage 来展示图片:

class MoebooruHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Moebooru 图片浏览'),
      ),
      body: MoebooruGridView(
        site: MoebooruSite.yande, // 选择站点,如 yande.re, danbooru, konachan 等
        tags: ['anime'], // 设置搜索标签
      ),
    );
  }
}

4. 自定义搜索

你可以通过 tags 参数来指定搜索的标签,例如:

MoebooruGridView(
  site: MoebooruSite.danbooru,
  tags: ['1girl', 'blue_eyes'],
);

5. 图片详情页

点击图片后,插件会自动跳转到图片详情页,展示大图、标签、来源等信息。

6. 下载图片

在图片详情页,通常会有下载按钮,点击后可以将图片保存到本地设备。

7. 高级功能

  • 分页加载:插件支持分页加载,可以通过设置 page 参数来控制加载的页数。
  • 过滤:可以通过 filter 参数来过滤 NSFW 内容。
  • 自定义 UI:如果你需要自定义 UI,可以使用 MoebooruApi 类来获取数据,并自行构建 UI。

8. 注意事项

  • API 限制:不同的 Moebooru 站点可能有不同的 API 限制,使用时需注意。
  • 网络请求:确保你的应用有网络权限,并在 AndroidManifest.xmlInfo.plist 中配置相应的网络权限。

示例代码

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FlutterMoebooru Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MoebooruHomePage(),
    );
  }
}

class MoebooruHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Moebooru 图片浏览'),
      ),
      body: MoebooruGridView(
        site: MoebooruSite.yande,
        tags: ['anime'],
      ),
    );
  }
}
回到顶部