base_state.dart 1.07 KB
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

abstract class BaseState<T extends StatefulWidget> extends State<T> {
  bool _isFirstBuild = true;
  List<Timer> delayTimers = [];

  @override
  Widget build(BuildContext context) {
    if (_isFirstBuild) {
      onFirstBuildBody(context);
      _isFirstBuild = false;
    }
    return buildBody(context);
  }

  postDelay(VoidCallback fn, int delayTime) {
    var delayTimer = Timer(Duration(milliseconds: delayTime), fn);
    delayTimers.add(delayTimer);
  }

  Widget buildBody(BuildContext context);

  void onFirstBuildBody(BuildContext context) {}

  showLoading({String text = 'Loading...'}) {
    EasyLoading.show(status: text);
  }

  hideLoading() {
    EasyLoading.dismiss();
  }

  toast(String text) {
    EasyLoading.showToast(text);
  }

  Widget buildLoading() {
    return const Center(child: CircularProgressIndicator());
  }

  @override
  void dispose() {
    super.dispose();
    for (var element in delayTimers) {
      element.cancel();
    }
  }
}