opt.: tag switcher

This commit is contained in:
lollipopkit
2023-12-15 12:01:55 +08:00
parent f10c5b9ea8
commit ee18b85108
30 changed files with 316 additions and 281 deletions

View File

@@ -0,0 +1,32 @@
import 'package:flutter/material.dart';
import 'package:toolbox/core/utils/function.dart';
extension WidgetX on Widget {
Widget padding(EdgeInsetsGeometry padding) {
return Padding(padding: padding, child: this);
}
Widget expanded({int flex = 1}) {
return Expanded(flex: flex, child: this);
}
Widget center() {
return Center(child: this);
}
Widget tap({
VoidCallback? onTap,
bool disable = false,
VoidCallback? onLongTap,
VoidCallback? onDoubleTap,
}) {
if (disable) return this;
return InkWell(
onTap: () => Funcs.throttle(onTap),
onLongPress: onLongTap,
onDoubleTap: onDoubleTap,
child: this,
);
}
}

View File

@@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
abstract final class Funcs {
static const int _defaultDurationTime = 377;
static const String _defaultThrottleId = 'default';
static final Map<String, int> startTimeMap = <String, int>{
_defaultThrottleId: 0
};
static void throttle(
VoidCallback? func, {
String id = _defaultThrottleId,
int duration = _defaultDurationTime,
Function? continueClick,
}) {
final currentTime = DateTime.now().millisecondsSinceEpoch;
if (currentTime - (startTimeMap[id] ?? 0) > duration) {
func?.call();
startTimeMap[id] = DateTime.now().millisecondsSinceEpoch;
} else {
continueClick?.call();
}
}
}