added haptic feedback

This commit is contained in:
otsmr 2025-06-25 22:41:21 +02:00
parent 674e42722d
commit 180c0679ed
3 changed files with 21 additions and 5 deletions

View file

@ -52,6 +52,7 @@
<uses-permission android:name="android.permission.USE_BIOMETRIC"/> <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Required to query activities that can process text, see: <!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and https://developer.android.com/training/package-visibility and

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class SlidingResponse extends StatefulWidget { class SlidingResponse extends StatefulWidget {
@ -17,19 +18,27 @@ class SlidingResponse extends StatefulWidget {
class _SlidingResponseWidgetState extends State<SlidingResponse> { class _SlidingResponseWidgetState extends State<SlidingResponse> {
double _offset = 0.0; double _offset = 0.0;
bool gotFeedback = false;
void _onHorizontalDragUpdate(DragUpdateDetails details) { void _onHorizontalDragUpdate(DragUpdateDetails details) {
setState(() { setState(() {
_offset += details.delta.dx; _offset += details.delta.dx;
if (_offset > 50) { if (_offset > 40) {
_offset = 50; _offset = 40;
if (!gotFeedback) {
HapticFeedback.heavyImpact();
gotFeedback = true;
} }
if (_offset < 0) _offset = 0; }
if (_offset < 30) {
gotFeedback = false;
}
if (_offset <= 0) _offset = 0;
}); });
} }
void _onHorizontalDragEnd(DragEndDetails details) { void _onHorizontalDragEnd(DragEndDetails details) {
if (_offset >= 50) { if (_offset >= 40) {
widget.onResponseTriggered(); widget.onResponseTriggered();
} }
setState(() { setState(() {
@ -49,7 +58,7 @@ class _SlidingResponseWidgetState extends State<SlidingResponse> {
child: widget.child, child: widget.child,
), ),
), ),
if (_offset >= 50) if (_offset >= 40)
Positioned( Positioned(
left: 20, left: 20,
top: 0, top: 0,

View file

@ -1,5 +1,6 @@
import 'package:drift/drift.dart'; import 'package:drift/drift.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:pie_menu/pie_menu.dart'; import 'package:pie_menu/pie_menu.dart';
import 'package:twonly/globals.dart'; import 'package:twonly/globals.dart';
@ -28,6 +29,11 @@ class _UserContextMenuState extends State<UserContextMenu> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return PieMenu( return PieMenu(
onPressed: () => (), onPressed: () => (),
onToggle: (menuOpen) {
if (menuOpen) {
HapticFeedback.heavyImpact();
}
},
actions: [ actions: [
if (!widget.contact.archived) if (!widget.contact.archived)
PieAction( PieAction(