Files
MWClash/lib/widgets/effect.dart
chen08209 afbc5adb05 Support override script
Support proxies search

Support svg display

Optimize config persistence

Add some scenes auto close connections

Update core

Optimize more details
2025-06-07 23:52:27 +08:00

143 lines
3.1 KiB
Dart

import 'dart:ui';
import 'package:flutter/material.dart';
class EffectGestureDetector extends StatefulWidget {
final Widget child;
final GestureLongPressCallback? onLongPress;
final GestureTapCallback? onTap;
const EffectGestureDetector({
super.key,
required this.child,
this.onLongPress,
this.onTap,
});
@override
State<EffectGestureDetector> createState() => _EffectGestureDetectorState();
}
class _EffectGestureDetectorState extends State<EffectGestureDetector>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
double _scale = 1;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AnimatedScale(
scale: _scale,
duration: kThemeAnimationDuration,
curve: Curves.easeOut,
child: GestureDetector(
onLongPress: widget.onLongPress,
onLongPressStart: (_) {
setState(() {
_scale = 0.95;
});
},
onTap: widget.onTap,
onLongPressEnd: (_) {
setState(() {
_scale = 1;
});
},
child: widget.child,
),
);
}
}
class CommonExpandIcon extends StatefulWidget {
final bool expand;
const CommonExpandIcon({
super.key,
this.expand = false,
});
@override
State<CommonExpandIcon> createState() => _CommonExpandIconState();
}
class _CommonExpandIconState extends State<CommonExpandIcon>
with SingleTickerProviderStateMixin {
late AnimationController _animationController;
late Animation<double> _iconTurns;
@override
void initState() {
super.initState();
_animationController = AnimationController(
duration: const Duration(milliseconds: 200),
vsync: this,
);
_iconTurns = _animationController.drive(
Tween<double>(begin: 0.0, end: 0.5),
);
if (widget.expand) {
_animationController.value = 1.0;
}
}
@override
void didUpdateWidget(covariant CommonExpandIcon oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.expand != widget.expand) {
if (widget.expand) {
_animationController.forward();
} else {
_animationController.reverse();
}
}
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _animationController.view,
builder: (_, child) {
return RotationTransition(
turns: _iconTurns,
child: child!,
);
},
child: const Icon(
Icons.expand_more,
),
);
}
}
Widget proxyDecorator(
Widget child,
int index,
Animation<double> animation,
) {
return AnimatedBuilder(
animation: animation,
builder: (_, Widget? child) {
final double animValue = Curves.easeInOut.transform(animation.value);
final double scale = lerpDouble(1, 1.02, animValue)!;
return Transform.scale(
scale: scale,
child: child,
);
},
child: child,
);
}