import 'package:just_audio/just_audio.dart'; import 'package:record/record.dart'; import 'package:universal_html/js.dart' as js; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/widgets/didvan/scaffold.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vibrate/flutter_vibrate.dart'; class Chat extends StatelessWidget { const Chat({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Material( child: Stack( children: [ Positioned( top: 0, bottom: 56, left: 0, right: 0, child: DidvanScaffold( appBarData: AppBarData( hasBack: true, subtitle: 'ارتباط با سردبیر', title: 'رادار اقتصادی', ), slivers: const [], ), ), Positioned( bottom: 0, right: 0, left: 0, child: Container( height: 56, decoration: BoxDecoration( border: Border( top: BorderSide( color: Theme.of(context).colorScheme.cardBorder, ), ), color: Theme.of(context).colorScheme.surface, ), child: Row( children: [ const _VoiceRecorderButton(), Expanded( child: TextField( decoration: InputDecoration( border: InputBorder.none, hintText: 'بنویسید یا پیام صوتی بگذارید...', hintStyle: Theme.of(context) .textTheme .caption! .copyWith( color: Theme.of(context).colorScheme.disabledText, ), ), onChanged: (value) {}, ), ), ], ), ), ), ], ), ); } } class _VoiceRecorderButton extends StatefulWidget { const _VoiceRecorderButton({Key? key}) : super(key: key); @override _VoiceRecorderButtonState createState() => _VoiceRecorderButtonState(); } class _VoiceRecorderButtonState extends State<_VoiceRecorderButton> { final _recorder = Record(); final _player = AudioPlayer(); @override void initState() { _recorder.hasPermission(); super.initState(); } @override Widget build(BuildContext context) { return GestureDetector( onLongPressStart: (details) async { if (!kIsWeb) { Vibrate.feedback(FeedbackType.medium); } await _recorder.start(); }, onLongPressEnd: (details) async { final path = await _recorder.stop(); if (kIsWeb) { await _player.setUrl(path!); } else { await _player.setFilePath(path!); } await _player.play(); if (kIsWeb) { js.context.callMethod('playAudio', ['/dash.mp3']); } }, child: Container( color: Colors.transparent, height: double.infinity, width: 52, child: Icon( DidvanIcons.mic_solid, color: Theme.of(context).colorScheme.focusedBorder, ), ), ); } @override void dispose() { _recorder.dispose(); _player.dispose(); super.dispose(); } }