Flutter广播收听插件radio_browser_flutter的使用

Flutter广播收听插件radio_browser_flutter的使用

特性

包含以下端点的包装方法:

  1. 车站
  2. 国家
  3. 语言
  4. 标签
  5. 编解码器
  6. 服务器详细信息

开始使用

首先导入插件:

import 'package:radio_browser_flutter/radio_browser_flutter.dart';

在使用之前初始化 RadioBrowserClient

void main() {
  RadioBrowserClient.initialize("YourAppName/1.0.0"); // 请确保User-Agent描述清晰
  runApp(const MyApp());
}

使用示例

在应用程序中调用API的方法如下所示:

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: RadioBrowserClient.instance.codecs.fetch(), // 获取编解码器列表
        builder: ((context, AsyncSnapshot<List<Codec>> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(child: CircularProgressIndicator()); // 等待时显示加载指示器
          }
          if (snapshot.hasError) {
            return Text(snapshot.error?.toString() ?? "Something went wrong"); // 错误处理
          }
          var data = snapshot.data!; // 获取数据
          return ListView.builder(
            itemCount: data.length, // 列表项数量
            itemBuilder: ((context, index) {
              return ListTile(title: Text(data[index].name)); // 显示每个编解码器名称
            }),
          );
        }),
      ),
    );
  }
}

以上示例展示了如何获取并展示所有可用编解码器的名称。你可以根据需求调整示例代码以适应不同的API端点。

示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:radio_browser_flutter/radio_browser_flutter.dart';

void main() async {
  await RadioBrowserClient.initialize(""); // 初始化客户端
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSwatch(
          primarySwatch: Colors.blue,
        ).copyWith(
          secondary: Colors.pink,
        ),
      ),
      home: const HomePage(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: RadioBrowserClient.instance.codecs.fetch(), // 获取编解码器列表
        builder: ((context, AsyncSnapshot<List<Codec>> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(child: CircularProgressIndicator()); // 等待时显示加载指示器
          }
          if (snapshot.hasError) {
            return Text(snapshot.error?.toString() ?? "Something went wrong"); // 错误处理
          }
          var data = snapshot.data!; // 获取数据
          return ListView.builder(
            itemCount: data.length, // 列表项数量
            itemBuilder: ((context, index) {
              return ListTile(title: Text(data[index].name)); // 显示每个编解码器名称
            }),
          );
        }),
      ),
    );
  }
}

更多关于Flutter广播收听插件radio_browser_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter广播收听插件radio_browser_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 radio_browser_flutter 插件在 Flutter 应用中收听广播的示例代码。这个插件允许你从 Radio Browser API 获取广播电台列表并播放它们。

首先,确保你的 Flutter 项目已经添加了对 radio_browser_flutter 插件的依赖。在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  radio_browser_flutter: ^latest_version  # 请替换为最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,我们编写一个示例应用来展示如何使用这个插件。

主应用代码 (main.dart)

import 'package:flutter/material.dart';
import 'package:radio_browser_flutter/radio_browser_flutter.dart';
import 'package:just_audio/just_audio.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Radio Browser Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RadioBrowserScreen(),
    );
  }
}

class RadioBrowserScreen extends StatefulWidget {
  @override
  _RadioBrowserScreenState createState() => _RadioBrowserScreenState();
}

class _RadioBrowserScreenState extends State<RadioBrowserScreen> {
  final RadioBrowser _radioBrowser = RadioBrowser();
  final AudioPlayer _audioPlayer = AudioPlayer();
  List<RadioStation> _radioStations = [];
  RadioStation? _selectedStation;

  @override
  void initState() {
    super.initState();
    _fetchStations();
  }

  Future<void> _fetchStations() async {
    try {
      final List<RadioStation> stations = await _radioBrowser.fetchStations(
        country: 'US',  // 可根据需要修改国家代码
        limit: 20,
      );
      setState(() {
        _radioStations = stations;
      });
    } catch (e) {
      print('Error fetching stations: $e');
    }
  }

  void _playStation(RadioStation station) async {
    setState(() {
      _selectedStation = station;
    });
    await _audioPlayer.setUrl(station.streamUrl!);
    _audioPlayer.play();
  }

  void _pauseStation() {
    _audioPlayer.pause();
  }

  void _stopStation() {
    _audioPlayer.stop();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Radio Browser Flutter Demo'),
      ),
      body: _radioStations.isEmpty
          ? Center(child: CircularProgressIndicator())
          : ListView.builder(
              itemCount: _radioStations.length,
              itemBuilder: (context, index) {
                final RadioStation station = _radioStations[index];
                return ListTile(
                  title: Text(station.name),
                  subtitle: Text(station.country),
                  onTap: () => _playStation(station),
                );
              },
            ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        crossAxisAlignment: CrossAxisAlignment.end,
        children: [
          FloatingActionButton(
            onPressed: _selectedStation != null ? _pauseStation : null,
            tooltip: 'Pause',
            child: Icon(Icons.pause),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: _stopStation,
            tooltip: 'Stop',
            child: Icon(Icons.stop),
          ),
        ],
      ),
    );
  }
}

说明

  1. 依赖管理:确保在 pubspec.yaml 中添加了 radio_browser_flutterjust_audio 依赖。just_audio 是一个强大的音频播放库,用于处理音频播放逻辑。

  2. 初始化:在 RadioBrowserScreeninitState 方法中调用 _fetchStations 函数来获取广播电台列表。

  3. 获取广播电台_fetchStations 函数使用 RadioBrowser 类的 fetchStations 方法来获取广播电台列表,并将结果存储在 _radioStations 列表中。

  4. 播放控制:点击列表项时会调用 _playStation 函数,该函数设置 _selectedStation 并使用 AudioPlayer 播放电台。播放、暂停和停止功能分别通过 _playStation_pauseStation_stopStation 方法实现。

  5. UI:使用 ListView.builder 显示广播电台列表,并通过 FloatingActionButton 控制播放状态。

运行这个示例应用,你将能够看到一个广播电台列表,点击列表项可以播放选中的电台,并通过浮动操作按钮控制播放状态。

回到顶部