Flutter Windows平台支持插件smtc_windows的使用
Flutter Windows平台支持插件smtc_windows的使用
SMTC_Windows
在Windows上实现SystemMediaTransportControls
的Flutter插件。这是Android的audio_session
和Linux的D-Bus MPRIS(媒体播放器远程接口规范)的等效实现。
安装
在你的pubspec.yaml
文件中添加smtc_windows
作为依赖项。
flutter pub add smtc_windows
要求
确保安装了rustup
。
支持此项目
使用
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await SMTCWindows.initialize();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late SMTCWindows smtc;
[@override](/user/override)
void initState() {
// 初始化SMTC
smtc = SMTCWindows(
metadata: const MusicMetadata(
title: 'Title',
album: 'Album',
albumArtist: 'Album Artist',
artist: 'Artist',
thumbnail:
'https://media.glamour.com/photos/5f4c44e20c71c58fc210d35f/master/w_2560%2Cc_limit/mgid_ao_image_mtv.jpg',
),
// 时间轴信息供操作系统媒体播放器使用
timeline: const PlaybackTimeline(
startTimeMs: 0,
endTimeMs: 1000,
positionMs: 0,
minSeekTimeMs: 0,
maxSeekTimeMs: 1000,
),
// 在操作系统媒体播放器中显示哪些按钮
config: const SMTCConfig(
fastForwardEnabled: true,
nextEnabled: true,
pauseEnabled: true,
playEnabled: true,
rewindEnabled: true,
prevEnabled: true,
stopEnabled: true,
),
);
WidgetsBinding.instance.addPostFrameCallback((_) async {
try {
// 监听按钮事件并相应地更新播放状态
smtc.buttonPressStream.listen((event) {
switch (event) {
case PressedButton.play:
// 更新播放状态
smtc.setPlaybackStatus(PlaybackStatus.Playing);
break;
case PressedButton.pause:
smtc.setPlaybackStatus(PlaybackStatus.Paused);
break;
case PressedButton.next:
print('Next');
break;
case PressedButton.previous:
print('Previous');
break;
case PressedButton.stop:
smtc.setPlaybackStatus(PlaybackStatus.Stopped);
smtc.disableSmtc();
break;
default:
break;
}
});
} catch (e) {
debugPrint("Error: $e");
}
});
super.initState();
}
[@override](/user/override)
void dispose() {
// 释放SMTC
smtc.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Native Packages'),
),
body: ElevatedButton(
child: const Text("Click"),
onPressed: () {
// 更新播放器元数据
smtc.updateMetadata(
const MusicMetadata(
title: 'Title',
album: 'Album',
albumArtist: 'Album Artist',
artist: 'Artist',
thumbnail:
'https://media.glamour.com/photos/5f4c44e20c71c58fc210d35f/master/w_2560%2Cc_limit/mgid_ao_image_mtv.jpg',
),
);
},
),
),
);
}
}
更多关于Flutter Windows平台支持插件smtc_windows的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Windows平台支持插件smtc_windows的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
smtc_windows
是一个用于在 Windows 平台上控制系统的媒体传输控制(System Media Transport Controls, SMTC)的 Flutter 插件。它允许你在 Flutter 应用程序中与 Windows 的媒体控件进行交互,例如显示当前播放的媒体信息、控制播放/暂停、下一首/上一首等操作。
使用 smtc_windows
插件的基本步骤
-
添加依赖
在pubspec.yaml
文件中添加smtc_windows
插件的依赖:dependencies: flutter: sdk: flutter smtc_windows: ^1.0.0 # 请使用最新版本
-
导入插件
在 Dart 文件中导入smtc_windows
插件:import 'package:smtc_windows/smtc_windows.dart';
-
初始化 SMTC
在使用 SMTC 之前,需要先初始化它:final smtc = SMTCWindows(); smtc.initialize();
-
设置媒体信息
你可以设置当前播放的媒体信息,例如标题、艺术家、专辑等:smtc.setMediaInfo( title: 'Song Title', artist: 'Artist Name', album: 'Album Name', );
-
控制播放状态
你可以通过 SMTC 控制播放状态,例如播放、暂停、下一首、上一首等:smtc.play(); smtc.pause(); smtc.next(); smtc.previous();
-
监听 SMTC 事件
你可以监听 SMTC 的事件,例如用户点击了播放、暂停等按钮:smtc.onPlayPressed.listen((_) { print('Play button pressed'); // 处理播放逻辑 }); smtc.onPausePressed.listen((_) { print('Pause button pressed'); // 处理暂停逻辑 }); smtc.onNextPressed.listen((_) { print('Next button pressed'); // 处理下一首逻辑 }); smtc.onPreviousPressed.listen((_) { print('Previous button pressed'); // 处理上一首逻辑 });
-
释放资源
在应用程序退出时,记得释放 SMTC 的资源:smtc.dispose();
完整示例
以下是一个简单的示例,展示如何使用 smtc_windows
插件:
import 'package:flutter/material.dart';
import 'package:smtc_windows/smtc_windows.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final smtc = SMTCWindows();
@override
void initState() {
super.initState();
smtc.initialize();
// 设置媒体信息
smtc.setMediaInfo(
title: 'My Song',
artist: 'My Artist',
album: 'My Album',
);
// 监听 SMTC 事件
smtc.onPlayPressed.listen((_) {
print('Play button pressed');
// 处理播放逻辑
});
smtc.onPausePressed.listen((_) {
print('Pause button pressed');
// 处理暂停逻辑
});
smtc.onNextPressed.listen((_) {
print('Next button pressed');
// 处理下一首逻辑
});
smtc.onPreviousPressed.listen((_) {
print('Previous button pressed');
// 处理上一首逻辑
});
}
@override
void dispose() {
smtc.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SMTC Windows Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
smtc.play();
},
child: Text('Play'),
),
ElevatedButton(
onPressed: () {
smtc.pause();
},
child: Text('Pause'),
),
ElevatedButton(
onPressed: () {
smtc.next();
},
child: Text('Next'),
),
ElevatedButton(
onPressed: () {
smtc.previous();
},
child: Text('Previous'),
),
],
),
),
),
);
}
}
注意事项
-
smtc_windows
插件仅支持 Windows 平台,因此在其他平台(如 Android、iOS)上运行时可能会出现问题。你可以使用Platform.isWindows
来判断当前平台是否为 Windows,从而避免在其他平台调用相关代码。import 'dart:io'; if (Platform.isWindows) { // Windows 平台相关代码 }