added clicking sounds on button click (#1236)
This commit is contained in:
parent
0b5edffbf9
commit
50b435b7e9
14 changed files with 110 additions and 4 deletions
BIN
assets/sounds/click.ogg
Normal file
BIN
assets/sounds/click.ogg
Normal file
Binary file not shown.
|
|
@ -391,6 +391,8 @@ class Message extends StatelessWidget {
|
|||
showToolbar(pangeaMessageEvent);
|
||||
},
|
||||
color: color,
|
||||
clickPlayer:
|
||||
controller.choreographer.clickPlayer,
|
||||
child:
|
||||
// Pangea#
|
||||
Container(
|
||||
|
|
@ -519,6 +521,7 @@ class Message extends StatelessWidget {
|
|||
controller: controller,
|
||||
nextEvent: nextEvent,
|
||||
prevEvent: previousEvent,
|
||||
isButton: isButton,
|
||||
// Pangea#
|
||||
),
|
||||
if (event.hasAggregatedEvents(
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ class MessageContent extends StatelessWidget {
|
|||
final ChatController controller;
|
||||
final Event? nextEvent;
|
||||
final Event? prevEvent;
|
||||
final bool isButton;
|
||||
// Pangea#
|
||||
|
||||
const MessageContent(
|
||||
|
|
@ -55,6 +56,7 @@ class MessageContent extends StatelessWidget {
|
|||
required this.controller,
|
||||
this.nextEvent,
|
||||
this.prevEvent,
|
||||
this.isButton = false,
|
||||
// Pangea#
|
||||
required this.borderRadius,
|
||||
});
|
||||
|
|
@ -331,6 +333,10 @@ class MessageContent extends StatelessWidget {
|
|||
return;
|
||||
}
|
||||
|
||||
if (isButton) {
|
||||
controller.choreographer.clickPlayer.play();
|
||||
}
|
||||
|
||||
controller.showToolbar(
|
||||
event,
|
||||
pangeaMessageEvent: pangeaMessageEvent,
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import 'package:fluffychat/pangea/models/tokens_event_content_model.dart';
|
|||
import 'package:fluffychat/pangea/utils/any_state_holder.dart';
|
||||
import 'package:fluffychat/pangea/utils/error_handler.dart';
|
||||
import 'package:fluffychat/pangea/utils/overlay.dart';
|
||||
import 'package:fluffychat/pangea/utils/play_click_sound.dart';
|
||||
import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart';
|
||||
import 'package:fluffychat/pangea/widgets/igc/paywall_card.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
|
@ -42,6 +43,7 @@ class Choreographer {
|
|||
late AlternativeTranslator altTranslator;
|
||||
late ErrorService errorService;
|
||||
final tts = TtsController();
|
||||
final clickPlayer = ClickPlayer();
|
||||
|
||||
bool isFetching = false;
|
||||
int _timesClicked = 0;
|
||||
|
|
@ -483,6 +485,7 @@ class Choreographer {
|
|||
_textController.dispose();
|
||||
trialStream?.cancel();
|
||||
tts.dispose();
|
||||
clickPlayer.dispose();
|
||||
}
|
||||
|
||||
LanguageModel? get l2Lang {
|
||||
|
|
|
|||
20
lib/pangea/utils/play_click_sound.dart
Normal file
20
lib/pangea/utils/play_click_sound.dart
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import 'package:audioplayers/audioplayers.dart';
|
||||
|
||||
class ClickPlayer {
|
||||
late AudioPlayer _player;
|
||||
|
||||
ClickPlayer() {
|
||||
_player = AudioPlayer();
|
||||
_player.setPlayerMode(PlayerMode.lowLatency);
|
||||
_player.setVolume(0.5);
|
||||
}
|
||||
|
||||
Future<void> play() async {
|
||||
await _player.stop();
|
||||
_player.play(AssetSource('sounds/click.ogg'));
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
_player.dispose();
|
||||
}
|
||||
}
|
||||
|
|
@ -109,6 +109,8 @@ class ToolbarButtons extends StatelessWidget {
|
|||
onPressed: enabled
|
||||
? () => overlayController.updateToolbarMode(mode)
|
||||
: null,
|
||||
clickPlayer: overlayController
|
||||
.widget.chatController.choreographer.clickPlayer,
|
||||
child: AnimatedContainer(
|
||||
duration: FluffyThemes.animationDuration,
|
||||
height: buttonSize,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:fluffychat/pangea/utils/play_click_sound.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
|
@ -13,6 +14,7 @@ class PressableButton extends StatefulWidget {
|
|||
|
||||
final void Function()? onPressed;
|
||||
final Stream? triggerAnimation;
|
||||
final ClickPlayer? clickPlayer;
|
||||
|
||||
const PressableButton({
|
||||
required this.borderRadius,
|
||||
|
|
@ -22,6 +24,7 @@ class PressableButton extends StatefulWidget {
|
|||
this.buttonHeight = 5,
|
||||
this.depressed = false,
|
||||
this.triggerAnimation,
|
||||
this.clickPlayer,
|
||||
super.key,
|
||||
});
|
||||
|
||||
|
|
@ -79,10 +82,11 @@ class PressableButtonState extends State<PressableButton>
|
|||
if (_animationCompleter != null) {
|
||||
await _animationCompleter!.future;
|
||||
}
|
||||
if (mounted) _controller.reverse();
|
||||
widget.clickPlayer?.play();
|
||||
if (!kIsWeb) {
|
||||
HapticFeedback.mediumImpact();
|
||||
}
|
||||
if (mounted) _controller.reverse();
|
||||
}
|
||||
|
||||
void _onTapCancel() {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <audioplayers_linux/audioplayers_linux_plugin.h>
|
||||
#include <dynamic_color/dynamic_color_plugin.h>
|
||||
#include <emoji_picker_flutter/emoji_picker_flutter_plugin.h>
|
||||
#include <file_selector_linux/file_selector_plugin.h>
|
||||
|
|
@ -20,6 +21,9 @@
|
|||
#include <window_to_front/window_to_front_plugin.h>
|
||||
|
||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin");
|
||||
audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar);
|
||||
g_autoptr(FlPluginRegistrar) dynamic_color_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin");
|
||||
dynamic_color_plugin_register_with_registrar(dynamic_color_registrar);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
audioplayers_linux
|
||||
dynamic_color
|
||||
emoji_picker_flutter
|
||||
file_selector_linux
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import Foundation
|
|||
|
||||
import appkit_ui_element_colors
|
||||
import audio_session
|
||||
import audioplayers_darwin
|
||||
import device_info_plus
|
||||
import dynamic_color
|
||||
import emoji_picker_flutter
|
||||
|
|
@ -46,6 +47,7 @@ import window_to_front
|
|||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
AppkitUiElementColorsPlugin.register(with: registry.registrar(forPlugin: "AppkitUiElementColorsPlugin"))
|
||||
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
|
||||
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
|
||||
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
|
||||
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
|
||||
|
|
|
|||
60
pubspec.lock
60
pubspec.lock
|
|
@ -97,6 +97,62 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.20"
|
||||
audioplayers:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: audioplayers
|
||||
sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.0"
|
||||
audioplayers_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_android
|
||||
sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.0"
|
||||
audioplayers_darwin:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_darwin
|
||||
sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.0.0"
|
||||
audioplayers_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_linux
|
||||
sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.0"
|
||||
audioplayers_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_platform_interface
|
||||
sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.0"
|
||||
audioplayers_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_web
|
||||
sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.1"
|
||||
audioplayers_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audioplayers_windows
|
||||
sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.0"
|
||||
badges:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -412,10 +468,10 @@ packages:
|
|||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
|
||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.3"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ description: Learn a language while texting your friends.
|
|||
# Pangea#
|
||||
publish_to: none
|
||||
# On version bump also increase the build number for F-Droid
|
||||
version: 1.23.17+3576
|
||||
version: 1.23.18+1
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.0 <4.0.0"
|
||||
|
|
@ -111,6 +111,7 @@ dependencies:
|
|||
webrtc_interface: ^1.0.13
|
||||
# #Pangea
|
||||
android_intent_plus: ^5.2.0
|
||||
audioplayers: ^6.1.0
|
||||
country_picker: ^2.0.25
|
||||
csv: ^6.0.0
|
||||
dropdown_button2: ^2.3.9
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <audioplayers_windows/audioplayers_windows_plugin.h>
|
||||
#include <dynamic_color/dynamic_color_plugin_c_api.h>
|
||||
#include <emoji_picker_flutter/emoji_picker_flutter_plugin_c_api.h>
|
||||
#include <file_selector_windows/file_selector_windows.h>
|
||||
|
|
@ -25,6 +26,8 @@
|
|||
#include <window_to_front/window_to_front_plugin.h>
|
||||
|
||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
AudioplayersWindowsPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin"));
|
||||
DynamicColorPluginCApiRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("DynamicColorPluginCApi"));
|
||||
EmojiPickerFlutterPluginCApiRegisterWithRegistrar(
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
audioplayers_windows
|
||||
dynamic_color
|
||||
emoji_picker_flutter
|
||||
file_selector_windows
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue