import 'dart:async'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/main_model.dart'; class OfflineRedirect extends StatefulWidget { final Widget child; OfflineRedirect({@required this.child}); @override _OfflineRedirectState createState() => _OfflineRedirectState(); } class _OfflineRedirectState extends State { Timer offlineTimer; @override void initState() { super.initState(); } @override void didChangeDependencies() { _startOfflineTimer(); super.didChangeDependencies(); } _startOfflineTimer() async { if (offlineTimer != null && offlineTimer.isActive) return; var _duration = new Duration(milliseconds: 500); this.offlineTimer = new Timer.periodic(_duration, offlineNav); } Future offlineNav(Timer timer) async { MainModel mainModel = Provider.of(context, listen: false); if (!mainModel.isOnline) { timer.cancel(); Navigator.pushNamedAndRemoveUntil(context, "/", (r) => false); } } void dispose() { offlineTimer.cancel(); super.dispose(); } @override Widget build(BuildContext context) { return SafeArea(child: widget.child); } }