import 'package:diplomaticquarterapp/core/service/packages_offers/PackagesOffersServices.dart'; import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; // import 'package:shimmer/shimmer.dart'; class ShimmerLoadingWidget extends StatefulWidget { Future Function()? onPreProccess; Widget Function()? loadingWidget; Widget Function()? realWidget; Function()? onFinish; ShimmerLoadingWidget({this.onPreProccess, this.loadingWidget, this.realWidget, this.onFinish}); void loadWidget() {} @override State createState() => _ShimmerLoadingWidgetState(); } class _ShimmerLoadingWidgetState extends State { var service = locator(); @override Widget build(BuildContext context) { Stream preProccess = (() async* { await super.widget.onPreProccess!(); })(); // TODO: implement build return StreamBuilder( stream: preProccess, builder: (context, snapshot) { Widget? widget; if (snapshot.hasError) { widget = Texts( "Error happened", color: Colors.red, fontSize: 20, bold: true, ); } else { switch (snapshot.connectionState) { case ConnectionState.none: break; case ConnectionState.active: break; case ConnectionState.waiting: // widget = Shimmer.fromColors(child: super.widget.loadingWidget!(), baseColor: Colors.red, highlightColor: Colors.yellow); break; case ConnectionState.done: widget = super.widget.realWidget!(); if (super.widget.onFinish != null) super.widget.onFinish!(); break; default: widget = SizedBox(); } } return widget!; }); } }