audioplayers icon indicating copy to clipboard operation
audioplayers copied to clipboard

I can't adjust the volume when I open the web app on ios.

Open kang86h opened this issue 1 year ago • 1 comments

Checklist

  • [ ] I read the troubleshooting guide before raising this issue
  • [ ] I made sure that the issue I am raising doesn't already exist

번역I can't adjust the volume when I open the web app uploaded to Firebase with the Safari browser of iOS.

Current bug behaviour

The volume of the music file played in the web app can be adjusted well through PC or android, but there is a problem that it cannot be adjusted with ios.

Expected behaviour

It is expected that the volume should be adjusted regardless of the user's connected device.

Steps to reproduce

  1. Build an audio player that can control the volume of sound files.

  2. After building the created app from flutter to web, deploy it to firebase hosting.

  3. Try adjusting the volume by accessing the hosted address using a PC, android phone, or I phone.

  4. Execute flutter run on the code sample

  5. ...

  6. ...

import 'dart:async';

import 'package:audioplayers/audioplayers.dart';
import 'package:audioplayers_example/components/tabs.dart';
import 'package:audioplayers_example/components/tgl.dart';
import 'package:audioplayers_example/tabs/audio_context.dart';
import 'package:audioplayers_example/tabs/controls.dart';
import 'package:audioplayers_example/tabs/logger.dart';
import 'package:audioplayers_example/tabs/sources.dart';
import 'package:audioplayers_example/tabs/streams.dart';
import 'package:audioplayers_example/utils.dart';
import 'package:flutter/material.dart';

typedef OnError = void Function(Exception exception);

void main() {
  runApp(const MaterialApp(home: ExampleApp()));
}

class ExampleApp extends StatefulWidget {
  const ExampleApp({Key? key}) : super(key: key);

  @override
  _ExampleAppState createState() => _ExampleAppState();
}

class _ExampleAppState extends State<ExampleApp> {
  List<AudioPlayer> players =
      List.generate(4, (_) => AudioPlayer()..setReleaseMode(ReleaseMode.stop));
  int selectedPlayerIdx = 0;

  AudioPlayer get selectedPlayer => players[selectedPlayerIdx];
  List<StreamSubscription> streams = [];

  @override
  void initState() {
    super.initState();
    players.asMap().forEach((index, player) {
      streams.add(
        player.onPlayerComplete.listen(
          (it) => toast(
            'Player complete!',
            textKey: Key('toast-player-complete-$index'),
          ),
        ),
      );
      streams.add(
        player.onSeekComplete.listen(
          (it) => toast(
            'Seek complete!',
            textKey: Key('toast-seek-complete-$index'),
          ),
        ),
      );
    });
  }

  @override
  void dispose() {
    streams.forEach((it) => it.cancel());
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('audioplayers example'),
      ),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Center(
              child: Tgl(
                options: ['P1', 'P2', 'P3', 'P4']
                    .asMap()
                    .map((key, value) => MapEntry('player-$key', value)),
                selected: selectedPlayerIdx,
                onChange: (v) => setState(() => selectedPlayerIdx = v),
              ),
            ),
          ),
          Expanded(
            child: Tabs(
              tabs: [
                TabData(
                  key: 'sourcesTab',
                  label: 'Src',
                  content: SourcesTab(player: selectedPlayer),
                ),
                TabData(
                  key: 'controlsTab',
                  label: 'Ctrl',
                  content: ControlsTab(player: selectedPlayer),
                ),
                TabData(
                  key: 'streamsTab',
                  label: 'Stream',
                  content: StreamsTab(player: selectedPlayer),
                ),
                TabData(
                  key: 'audioContextTab',
                  label: 'Ctx',
                  content: AudioContextTab(player: selectedPlayer),
                ),
                TabData(
                  key: 'loggerTab',
                  label: 'Log',
                  content: const LoggerTab(),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

flutter buile web

firebase deploy --only hosting

kang86h avatar Nov 27 '22 06:11 kang86h

See #813 All active developers don't own an iPhone, so we would be glad, if you could help us fixing this bug by providing a Merge Request.

Gustl22 avatar Jan 11 '23 10:01 Gustl22