home_widget icon indicating copy to clipboard operation
home_widget copied to clipboard

Is it possible to play a sound from the assets when the user clicks on a button on a home_widget?

Open myThorsten opened this issue 3 years ago • 0 comments

Hello :)

I am trying to make a home_widget which will play sounds. I successfully implemented your example, the title is changing just fine. Now I want to expand on that. I am usning the package flutter_sound . Here is what I am trying:

import 'dart:io';
import 'dart:math';

import 'package:flutter_sound_lite/flutter_sound.dart';
import 'package:home_widget/home_widget.dart';
import 'package:logger/logger.dart';

import '../../../core/file_helper.dart';

void backgroundCallback(Uri? data) async {
  if (data?.host == 'titleclicked') {
    final greetings = ['Hello', 'Hallo', 'Bonjour', 'Hola', 'Ciao', '哈洛', '안녕하세요', 'xin chào'];
    final selectedGreeting = greetings[Random().nextInt(greetings.length)];

    await HomeWidget.saveWidgetData<String>('title', selectedGreeting);
    await HomeWidget.updateWidget(name: 'HomeWidgetExampleProvider', iOSName: 'HomeWidgetExample');

    final FlutterSoundPlayer player = FlutterSoundPlayer(logLevel: Level.warning);
    player.openAudioSession(); // this line throws the error, await is not necessary since .startPlayer will wait autoatically
    final File file = await FileHelper.assetToFile(assetSource: 'default/woo.aac');
    print(file);
    await player.startPlayer(
      fromURI: file.path,
      codec: Codec.aacADTS,
      sampleRate: 32000,
    );
  }
}

The output I am getting is this:

E/flutter (11630): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: MissingPluginException(No implementation found for method resetPlugin on channel com.dooboolab.flutter_sound_player)
E/flutter (11630): #0      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:165
E/flutter (11630): <asynchronous suspension>
E/flutter (11630): #1      FlutterSoundPlayer._openAudioSession
package:flutter_sound_lite/public/flutter_sound_player.dart:688
E/flutter (11630): <asynchronous suspension>
E/flutter (11630): #2      FlutterSoundPlayer.openAudioSession.<anonymous closure>
package:flutter_sound_lite/public/flutter_sound_player.dart:651
E/flutter (11630): <asynchronous suspension>
E/flutter (11630): #3      BasicLock.synchronized
package:synchronized/src/basic_lock.dart:33
E/flutter (11630): <asynchronous suspension>
E/flutter (11630): #4      FlutterSoundPlayer.openAudioSession
package:flutter_sound_lite/public/flutter_sound_player.dart:650
E/flutter (11630): <asynchronous suspension>
E/flutter (11630):
I/flutter (11630): File: '/data/user/0/com.example/cache/default/woo.aac'
E/flutter (11630): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Exception: Player is not open
E/flutter (11630): #0      FlutterSoundPlayer._waitOpen
package:flutter_sound_lite/public/flutter_sound_player.dart:608
E/flutter (11630): #1      FlutterSoundPlayer._startPlayer
package:flutter_sound_lite/public/flutter_sound_player.dart:1097
E/flutter (11630): #2      FlutterSoundPlayer.startPlayer.<anonymous closure>
package:flutter_sound_lite/public/flutter_sound_player.dart:1076
E/flutter (11630): #3      FlutterSoundPlayer.startPlayer.<anonymous closure>
package:flutter_sound_lite/public/flutter_sound_player.dart:1075
E/flutter (11630): #4      BasicLock.synchronized
package:synchronized/src/basic_lock.dart:31
E/flutter (11630): #5      FlutterSoundPlayer.startPlayer
package:flutter_sound_lite/public/flutter_sound_player.dart:1075
E/flutter (11630): #6      backgroundCallback
package:soundboard/…/application/background_callback.dart:22
E/flutter (11630): <asynchronous suspension>
E/flutter (11630):

Is that even possible?

Thank you, Thorsten

myThorsten avatar Aug 26 '22 20:08 myThorsten