diff options
Diffstat (limited to 'frontend/lib/views/chat/loading_indicator.dart')
-rw-r--r-- | frontend/lib/views/chat/loading_indicator.dart | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/frontend/lib/views/chat/loading_indicator.dart b/frontend/lib/views/chat/loading_indicator.dart new file mode 100644 index 000000000..cb0e69b35 --- /dev/null +++ b/frontend/lib/views/chat/loading_indicator.dart @@ -0,0 +1,81 @@ +import 'package:auto_gpt_flutter_client/constants/app_colors.dart'; +import 'package:flutter/material.dart'; + +class LoadingIndicator extends StatefulWidget { + final bool isLoading; + + const LoadingIndicator({Key? key, required this.isLoading}) : super(key: key); + + @override + _LoadingIndicatorState createState() => _LoadingIndicatorState(); +} + +class _LoadingIndicatorState extends State<LoadingIndicator> + with SingleTickerProviderStateMixin { + late AnimationController _controller; + + @override + void initState() { + super.initState(); + + _controller = AnimationController( + duration: const Duration(seconds: 2), + vsync: this, + )..repeat(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return LayoutBuilder( + builder: (context, constraints) { + double width = + (constraints.maxWidth >= 1000) ? 850 : constraints.maxWidth - 65; + + return SizedBox( + width: width, + height: 4.0, + child: widget.isLoading + ? AnimatedBuilder( + animation: _controller, + builder: (context, child) { + return ShaderMask( + shaderCallback: (rect) { + return LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Colors.grey[400]!, + AppColors.primaryLight, + Colors.white, + Colors.grey[400]!, + ], + stops: [ + _controller.value - 0.5, + _controller.value - 0.25, + _controller.value, + _controller.value + 0.25, + ], + ).createShader(rect); + }, + child: Container( + width: width, + height: 4.0, + color: Colors.white, + ), + ); + }, + ) + : Container( + color: Colors.grey[400], + ), + ); + }, + ); + } +} |