import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart'; import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gifimage/flutter_gifimage.dart'; class NetworkBaseView extends StatefulWidget { final BaseViewModel baseViewModel; final Widget child; NetworkBaseView({Key key, this.baseViewModel, this.child}); @override _NetworkBaseViewState createState() => _NetworkBaseViewState(); } class _NetworkBaseViewState extends State with TickerProviderStateMixin{ GifController controller1; @override void initState() { controller1 = GifController(vsync: this); WidgetsBinding.instance.addPostFrameCallback((_){ controller1.repeat(min: 0,max: 12,period: Duration(milliseconds: 750),reverse: true); }); super.initState(); } @override void dispose() { controller1.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Container( child: buildBaseViewWidget(), ); } buildBaseViewWidget() { switch (widget.baseViewModel.state) { case ViewState.ErrorLocal: case ViewState.Idle: case ViewState.BusyLocal: return widget.child; break; case ViewState.Busy: return Stack(children: [Container( height: MediaQuery.of(context).size.height, color: Colors.grey.withOpacity(0.6), ),Center(//progress-loading.gif child: Container( margin: EdgeInsets.only(bottom: 40), child: GifImage( controller: controller1, image: AssetImage("assets/images/progress-loading.gif"),//NetworkImage("http://img.mp.itc.cn/upload/20161107/5cad975eee9e4b45ae9d3c1238ccf91e.jpg"), ), ), )],); break; case ViewState.Error: return Center( child: AppEmbeddedError( error: widget.baseViewModel.error, ), ); break; } } }