Flutter媒体模板插件mediatemplate的功能使用

Flutter媒体模板插件mediatemplate的功能使用

Media Template

展示移动设备上的模板。

它支持以下模板:

  • POP_UP
  • FLOATING_BAR
  • FULL_SCREEN
  • INLINE
  • SLIDE_IN
  • GAMIFIED

image info

Media Template


Getting Started

对于如何开始使用Flutter,可以查看在线文档(https://flutter.dev/)。


iOS

为了让插件正常工作,你需要在ios/Runner/Info.plist文件中添加一个新的键值对:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

NSAllowsArbitraryLoadsInWebContent适用于iOS 10及以上版本,而NSAllowsArbitraryLoads适用于iOS 9。


Install

通过以下命令安装插件:

flutter pub add mediatemplate

Example

以下是一个完整的示例代码,展示了如何使用mediatemplate插件:

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:mediatemplate/mediatemplate.dart';
import 'package:flutter/scheduler.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/services.dart';
import 'package:android_id/android_id.dart';
import 'dart:io' show Platform;

class FloatingBar extends StatefulWidget {
  final String deviceId;

  const FloatingBar({required this.deviceId});

  [@override](/user/override)
  State<FloatingBar> createState() => _FloatingBarState();
}

class _FloatingBarState extends State<FloatingBar> {
  late AdInfo _ad;
  bool loaded = false;
  String? deviceId;
  static final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();

  [@override](/user/override)
  void initState() {
    _initState();
  }

  Future<void> _initState() async {
    if (Platform.isAndroid) {
      const androidId = AndroidId();
      deviceId = await androidId.getId();
    } else if (Platform.isIOS) {
      final iosInfo = await deviceInfo.iosInfo;
      deviceId = iosInfo.identifierForVendor;
    } else if (Platform.isLinux) {
      final linuxInfo = await deviceInfo.linuxInfo;
      deviceId = linuxInfo.machineId;
    } else if (Platform.isWindows) {
      final windowsInfo = await deviceInfo.windowsInfo;
      deviceId = windowsInfo.deviceId;
    } else if (Platform.isMacOS) {
      final macOsInfo = await deviceInfo.macOsInfo;
      deviceId = macOsInfo.systemGUID;
    }

    Ads.load(
        portalId: 561236459,
        propsId: 564990801,
        ec: 'product',
        ea: 'view',
        templateType: 'floating_bar',
        zoneCode: 'div_asm_inline',
        userId: deviceId,
        onAdFailedToLoad: (String error) {
          print(error);
        },
        onAdLoaded: (AdInfo ad) {
          setState(() {
            _ad = ad;
            loaded = true;
          });
        });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    final scaffoldKey = GlobalKey<ScaffoldState>();

    if (loaded) {
      WidgetsBinding.instance.addPostFrameCallback((_) {
        Ads.show(_ad, context, scaffoldKey);
      });
    }

    return Scaffold(
        key: scaffoldKey,
        appBar: AppBar(
          title: const Text('FloatingBar'),
        ),
        body: Center(
          child: ElevatedButton(
            child: const Text('Home'),
            onPressed: () {
              // 导航到主页。
              Navigator.pop(context);
            },
          ),
        ));
  }
}

Usage

  • 打开示例代码以获取更多信息。

示例代码完整展示

以下是完整的示例代码,包括所有模板的实现:

import 'package:example/floatingbar.dart';
import 'package:flutter/material.dart';
import 'package:mediatemplate/mediatemplate.dart';
import 'package:flutter/scheduler.dart';

import './floatingbar.dart';
import './fullscreen.dart';
import './popup.dart';
import './slidein.dart';
import './inline.dart';
import './gamified.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              child: const Text('Floating Bar'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const FloatingBar(deviceId: '22312')),
                );
              },
            ),
            ElevatedButton(
              child: const Text('Full Screen'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const FullScreen()),
                );
              },
            ),
            ElevatedButton(
              child: const Text('Popup'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const Popup()),
                );
              },
            ),
            ElevatedButton(
              child: const Text('Slide in'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const SlideIn()),
                );
              },
            ),
            ElevatedButton(
              child: const Text('Inline'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const Inline()),
                );
              },
            ),
            ElevatedButton(
              child: const Text('Gamified'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const Gamified()),
                );
              },
            )
          ],
        ),
      ),
    );
  }
}

更多关于Flutter媒体模板插件mediatemplate的功能使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter媒体模板插件mediatemplate的功能使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


MediaTemplate 是一个 Flutter 插件,旨在简化在应用中处理媒体(如图片、视频等)的流程。它提供了一些模板和工具,帮助开发者快速集成媒体相关的功能。以下是一些常见的使用场景和功能:


主要功能

  1. 图片选择与显示

    • 从相册或相机中选择图片。
    • 显示选择的图片。
  2. 视频选择与播放

    • 从相册或相机中选择视频。
    • 播放视频。
  3. 媒体裁剪与编辑

    • 对图片或视频进行裁剪。
    • 添加滤镜或其他编辑功能。
  4. 媒体上传

    • 将选择的媒体文件上传到服务器。
  5. 媒体预览

    • 提供全屏预览功能。
  6. 权限管理

    • 自动处理媒体访问权限。

使用步骤

1. 安装插件

pubspec.yaml 中添加依赖:

dependencies:
  mediatemplate: ^latest_version

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


2. 基本使用

选择图片
import 'package:mediatemplate/mediatemplate.dart';

Future<void> pickImage() async {
  final image = await MediaTemplate.pickImage();
  if (image != null) {
    // 使用选择的图片
    print("Image path: ${image.path}");
  }
}
选择视频
Future<void> pickVideo() async {
  final video = await MediaTemplate.pickVideo();
  if (video != null) {
    // 使用选择的视频
    print("Video path: ${video.path}");
  }
}
显示图片或视频

使用 Flutter 的 ImageVideoPlayer 控件来显示选择的媒体文件。

Image.file(File(image.path));

3. 裁剪图片

Future<void> cropImage() async {
  final croppedImage = await MediaTemplate.cropImage(image.path);
  if (croppedImage != null) {
    // 使用裁剪后的图片
    print("Cropped image path: ${croppedImage.path}");
  }
}

4. 上传媒体

将媒体文件上传到服务器:

Future<void> uploadMedia(String filePath) async {
  final response = await MediaTemplate.uploadMedia(filePath, "https://your-server.com/upload");
  if (response.statusCode == 200) {
    print("Upload successful!");
  } else {
    print("Upload failed: ${response.body}");
  }
}

5. 处理权限

插件会自动处理媒体访问权限。如果需要手动检查权限:

Future<void> checkPermissions() async {
  final hasPermission = await MediaTemplate.checkPermissions();
  if (hasPermission) {
    print("Permissions granted");
  } else {
    print("Permissions denied");
  }
}
回到顶部