diameter/lib/components/progress_indicator.dart

70 lines
2.0 KiB
Dart
Raw Normal View History

2021-10-22 23:08:09 +00:00
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class ViewWithProgressIndicator extends StatefulWidget {
final AsyncSnapshot snapshot;
final Widget child;
final double progressIndicatorSize;
final EdgeInsets padding;
const ViewWithProgressIndicator(
{Key? key,
required this.snapshot,
required this.child,
this.progressIndicatorSize = 100,
this.padding = const EdgeInsets.all(0)})
: super(key: key);
@override
_ViewWithProgressIndicatorState createState() =>
_ViewWithProgressIndicatorState();
}
class _ViewWithProgressIndicatorState extends State<ViewWithProgressIndicator> {
2021-10-27 19:42:11 +00:00
2021-10-22 23:08:09 +00:00
@override
Widget build(BuildContext context) {
switch (widget.snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
2021-10-27 19:42:11 +00:00
Widget progressIndicator = Container();
// Future.delayed(const Duration(milliseconds: 100)).then((_) => {
// progressIndicator = const CircularProgressIndicator()
// });
2021-10-22 23:08:09 +00:00
return Container(
alignment: Alignment.center,
padding: widget.padding,
child: Center(
child: SizedBox(
width: widget.progressIndicatorSize,
height: widget.progressIndicatorSize,
2021-10-27 19:42:11 +00:00
child: FutureBuilder(
future: Future.delayed(const Duration(seconds: 1)),
builder: (context, wait) {
if (wait.connectionState != ConnectionState.waiting) {
return const CircularProgressIndicator();
}
return Container();
}
),
2021-10-22 23:08:09 +00:00
),
),
);
default:
if (widget.snapshot.hasError) {
return Center(
child: Text(widget.snapshot.error.toString()),
);
}
if (!widget.snapshot.hasData) {
return const Center(
child: Text("No data"),
);
} else {
return widget.child;
}
}
}
}