From 8d2040da39973074cd5b999d3a86b8b0d8778c17 Mon Sep 17 00:00:00 2001 From: zypherift Date: Thu, 7 Aug 2025 01:27:55 +0200 Subject: [PATCH] dont call setState after dispose --- firka/lib/ui/phone/pages/home/home_main.dart | 5 +++++ firka/lib/ui/phone/pages/home/home_timetable.dart | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/firka/lib/ui/phone/pages/home/home_main.dart b/firka/lib/ui/phone/pages/home/home_main.dart index d1a3544..4290965 100644 --- a/firka/lib/ui/phone/pages/home/home_main.dart +++ b/firka/lib/ui/phone/pages/home/home_main.dart @@ -31,6 +31,7 @@ class _HomeMainScreen extends State { List? lessons; Student? student; Timer? timer; + bool disposed = false; @override void initState() { @@ -42,6 +43,7 @@ class _HomeMainScreen extends State { var resp = await data.client.getTimeTable( midnight, midnight.add(Duration(hours: 23, minutes: 59))); + if (disposed) return; setState(() { lessons = resp.response!; }); @@ -49,12 +51,14 @@ class _HomeMainScreen extends State { (() async { var resp = await data.client.getStudent(); + if (disposed) return; setState(() { student = resp.response!; }); })(); timer = Timer.periodic(Duration(seconds: 1), (timer) async { + if (disposed) return; setState(() { now = timeNow(); }); @@ -65,6 +69,7 @@ class _HomeMainScreen extends State { void dispose() { super.dispose(); + disposed = true; timer?.cancel(); } diff --git a/firka/lib/ui/phone/pages/home/home_timetable.dart b/firka/lib/ui/phone/pages/home/home_timetable.dart index 24b5354..78c8ba6 100644 --- a/firka/lib/ui/phone/pages/home/home_timetable.dart +++ b/firka/lib/ui/phone/pages/home/home_timetable.dart @@ -26,8 +26,16 @@ class _HomeTimetableScreen extends State { List? lessons; List? dates; DateTime? active; + bool disposed = false; _HomeTimetableScreen(this.data); + @override + void dispose() { + super.dispose(); + + disposed = true; + } + @override void initState() { super.initState(); @@ -58,6 +66,7 @@ class _HomeTimetableScreen extends State { } } + if (disposed) return; setState(() { this.dates = dates; if (timeNow().isAfter(dates.last)) {