Flutter媒体模板插件mediatemplate的功能使用
Flutter媒体模板插件mediatemplate的功能使用
Media Template
展示移动设备上的模板。
它支持以下模板:
- POP_UP
- FLOATING_BAR
- FULL_SCREEN
- INLINE
- SLIDE_IN
- GAMIFIED

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
更多关于Flutter媒体模板插件mediatemplate的功能使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
MediaTemplate 是一个 Flutter 插件,旨在简化在应用中处理媒体(如图片、视频等)的流程。它提供了一些模板和工具,帮助开发者快速集成媒体相关的功能。以下是一些常见的使用场景和功能:
主要功能
-
图片选择与显示:
- 从相册或相机中选择图片。
- 显示选择的图片。
-
视频选择与播放:
- 从相册或相机中选择视频。
- 播放视频。
-
媒体裁剪与编辑:
- 对图片或视频进行裁剪。
- 添加滤镜或其他编辑功能。
-
媒体上传:
- 将选择的媒体文件上传到服务器。
-
媒体预览:
- 提供全屏预览功能。
-
权限管理:
- 自动处理媒体访问权限。
使用步骤
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 的 Image 或 VideoPlayer 控件来显示选择的媒体文件。
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");
}
}

