yu_file_preview 0.1.1 copy "yu_file_preview: ^0.1.1" to clipboard
yu_file_preview: ^0.1.1 copied to clipboard

Full-screen media preview for Flutter. Integrates yuni_photo_view, yu_ni_image_widget, and yu_ni_player. Supports image, video, multi-platform UI.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:yu_file_preview/yu_file_preview.dart';
import 'package:yu_ni_player_base/yu_ni_player_base.dart';
import 'package:yu_ni_player_video_player_kit/yu_ni_player_video_player_kit.dart';

import 'pages/api_challenge_page.dart';
import 'pages/custom_chrome_page.dart';
import 'pages/custom_menu_page.dart';
import 'pages/custom_renderer_page.dart';
import 'pages/image_preview_page.dart';
import 'pages/main_preview_page.dart';
import 'pages/paging_preview_page.dart';
import 'pages/video_preview_page.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 media_kit 视频引擎(必须在 runApp 之前)
  VideoPlayerKitEngine.initLicense();

  // 配置 FilePreview:注册 Android 平台引擎 + DefaultCacheManager 演示图片缓存
  FilePreview.configure(
    FilePreviewConfig(
      imageStorage: DefaultCacheManager(),
      playerConfig: YuNiPlayerConfig(
        platformEngines: {
          PlatformKey.android: (source) => VideoPlayerKitEngine(source),
          PlatformKey.defaultKey: (source) => VideoPlayerKitEngine(source),
        },
      ),
    ),
  );

  runApp(const ExampleApp());
}

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'yu_file_preview 示例',
      theme: ThemeData.dark(),
      home: const HomePage(),
      routes: {
        '/main-preview': (_) => const MainPreviewPage(),
        '/image': (_) => const ImagePreviewPage(),
        '/video': (_) => const VideoPreviewPage(),
        '/custom-renderer': (_) => const CustomRendererPage(),
        '/custom-menu': (_) => const CustomMenuPage(),
        '/custom-chrome': (_) => const CustomChromePage(),
        '/api-challenge': (_) => const ApiChallengePage(),
        '/paging': (_) => const PagingPreviewPage(),
      },
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  static const _demos = [
    _Demo('完整预览(对齐主项目)', '图片/视频/其他文件,含日期顶部栏、原图按钮、Live Photo、信息面板', '/main-preview'),
    _Demo('图片预览', '含 Hero 动画、查看原图、Live Photo 角标、信息面板', '/image'),
    _Demo('视频预览', '含封面、播放控制、翻页自动暂停、信息面板', '/video'),
    _Demo('自定义渲染器', '注册 PDF 占位页示例', '/custom-renderer'),
    _Demo('自定义菜单', '注入「设为封面」「复制到相册」', '/custom-menu'),
    _Demo('自定义 Chrome', '自定义顶部栏、底部栏、全局水印浮层', '/custom-chrome'),
    _Demo('API 实战挑战', '测试 show/showPaging、参数重写、分页加载逻辑', '/api-challenge'),
    _Demo('分页加载测试', '测试异步分页加载及预加载阈值设置', '/paging'),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('yu_file_preview 示例')),
      body: ListView.separated(
        padding: const EdgeInsets.all(16),
        itemCount: _demos.length,
        separatorBuilder: (_, __) => const Divider(),
        itemBuilder: (ctx, i) {
          final demo = _demos[i];
          return ListTile(
            title: Text(demo.title),
            subtitle: Text(demo.subtitle),
            trailing: const Icon(Icons.chevron_right),
            onTap: () => Navigator.pushNamed(ctx, demo.route),
          );
        },
      ),
    );
  }
}

class _Demo {
  const _Demo(this.title, this.subtitle, this.route);
  final String title;
  final String subtitle;
  final String route;
}
0
likes
135
points
9
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Full-screen media preview for Flutter. Integrates yuni_photo_view, yu_ni_image_widget, and yu_ni_player. Supports image, video, multi-platform UI.

License

MIT (license)

Dependencies

crypto, flutter, flutter_cache_manager, yu_ni_image_widget, yu_ni_player_base, yu_ni_player_tx_player, yu_ni_player_video_player_kit, yuni_photo_view, yuni_widget

More

Packages that depend on yu_file_preview