61 lines
1.6 KiB
Dart
61 lines
1.6 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:photos/ente_theme_data.dart';
|
|
|
|
class SearchSuffixIcon extends StatefulWidget {
|
|
final Timer debounceTimer;
|
|
const SearchSuffixIcon(this.debounceTimer, {Key key}) : super(key: key);
|
|
|
|
@override
|
|
State<SearchSuffixIcon> createState() => _SearchSuffixIconState();
|
|
}
|
|
|
|
class _SearchSuffixIconState extends State<SearchSuffixIcon>
|
|
with TickerProviderStateMixin {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final controller = AnimationController(
|
|
vsync: this,
|
|
duration: const Duration(milliseconds: 200),
|
|
);
|
|
final animation = Tween(
|
|
begin: 0.0,
|
|
end: 1.0,
|
|
).animate(controller);
|
|
if (widget.debounceTimer == null || !widget.debounceTimer.isActive) {
|
|
controller.forward();
|
|
return FadeTransition(
|
|
opacity: animation,
|
|
child: IconButton(
|
|
onPressed: () {
|
|
Navigator.pop(context);
|
|
},
|
|
icon: Icon(
|
|
Icons.close,
|
|
color: Theme.of(context).colorScheme.iconColor.withOpacity(0.5),
|
|
),
|
|
),
|
|
);
|
|
} else {
|
|
controller.forward();
|
|
return FadeTransition(
|
|
opacity: animation,
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(12),
|
|
child: SizedBox(
|
|
height: 6,
|
|
width: 6,
|
|
child: Center(
|
|
child: CircularProgressIndicator(
|
|
strokeWidth: 2,
|
|
color: Theme.of(context).colorScheme.iconColor.withOpacity(0.5),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
}
|