flutter - 创建共享类 Flutter
问题描述
我不确定这是否可行,但使用 SwiftUI 我有一个媒体播放器类,其中包含我所有的媒体播放器控件。
我想知道是否有可能拥有一个包含flutter_radio_player和1个可以更改音频源的媒体播放器的flutter类文件?
我在使用旧的 android 应用程序时遇到的问题是,如果不创建全新的媒体播放器,我们就无法更改曲目。
我找不到任何有关如何执行此操作的示例代码。
我的代码目前:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_radio_player/flutter_radio_player.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
var playerState = FlutterRadioPlayer.flutter_radio_paused;
var volume = 0.8;
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _currentIndex = 0;
final List<Widget> _children = [
new MyApp(),
];
FlutterRadioPlayer _flutterRadioPlayer = new FlutterRadioPlayer();
@override
void initState() {
super.initState();
initRadioService();
}
Future<void> initRadioService() async {
try {
await _flutterRadioPlayer.init(
"DRN1", "Live", "http://stream.radiomedia.com.au:8003/stream", "false");
} on PlatformException {
print("Exception occurred while trying to register the services.");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter Radio Player Example'),
),
body: Center(
child: Column(
children: <Widget>[
StreamBuilder(
stream: _flutterRadioPlayer.isPlayingStream,
initialData: widget.playerState,
builder:
(BuildContext context, AsyncSnapshot<String> snapshot) {
String returnData = snapshot.data;
print("object data: " + returnData);
switch (returnData) {
case FlutterRadioPlayer.flutter_radio_stopped:
return RaisedButton(
child: Text("Start listening now"),
onPressed: () async {
await initRadioService();
});
break;
case FlutterRadioPlayer.flutter_radio_loading:
return Text("Loading stream...");
case FlutterRadioPlayer.flutter_radio_error:
return RaisedButton(
child: Text("Retry ?"),
onPressed: () async {
await initRadioService();
});
break;
default:
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
IconButton(
onPressed: () async {
print("button press data: " +
snapshot.data.toString());
await _flutterRadioPlayer.playOrPause();
},
icon: snapshot.data ==
FlutterRadioPlayer
.flutter_radio_playing
? Icon(Icons.pause)
: Icon(Icons.play_arrow)),
IconButton(
onPressed: () async {
await _flutterRadioPlayer.stop();
},
icon: Icon(Icons.stop))
]);
break;
}
}),
Slider(
value: widget.volume,
min: 0,
max: 1.0,
onChanged: (value) => setState(() {
widget.volume = value;
_flutterRadioPlayer.setVolume(widget.volume);
})),
Text("Volume: " + (widget.volume * 100).toStringAsFixed(0))
],
),
),
),
);
}
}
解决方案
FlutterRadioPlayer 作者在这里。使用新版本的播放器,您可以做到这一点。你只需要打电话
_flutterRadioPlayer.setUrl('URL_HERE')
播放器将自动将旧流设置为停止并启动新流。是的,您也可以将其设置为在准备好时自动播放。只需参考新版本中的文档即可。
推荐阅读
- ajax - 尝试在 Drupal 8 中添加块时收到 AJAX 错误
- c# - 在 Param (...) 块之间匹配 [STRING]
- azure - Azure DevOps 构建管道 - 失败的构建仍会部署到 Azure
- entity-framework - 与自身有关系的表上的流利 API
- python - JSON文件未读取
- php - XAMPP 无法启动:SSH 无法访问
- javascript - Angular - 菜单在 IE 和 Firefox 上不起作用
- php - PHP isset 等于 $var1 或 $var2
- python - 无法向 Luis 发送请求
- python - 从 Python 2 中的地址获取地理坐标