Skip to content

Releases: chinmayrozekar/21DayForge_Android

v1.0.3 — Fix black screen on launch

Choose a tag to compare

@chinmayrozekar chinmayrozekar released this 09 May 04:22

Bug Fix: Black Screen on Launch (Real Devices)

What was happening

Several users reported seeing a permanent black screen when launching the app on physical Android devices, while the app worked fine on emulators.

Root Cause

During startup, the app calls NotificationService.init() before runApp() is invoked. Inside that init, FlutterTimezone.getLocalTimezone() makes a platform call to retrieve the device's local timezone. On certain real devices — particularly those running custom ROMs, Android Go editions, or older Android versions — this call throws an unhandled exception.

Because the crash happened before a single frame was ever rendered, Flutter had nothing to fall back to, resulting in a permanent black screen with no visible error.

Emulators always grant this call successfully, which is why the bug never appeared during development.

What was fixed

  • main.dart: Wrapped NotificationService.init() in a try-catch so any failure during notification setup cannot block the app from launching.
  • notification_service.dart: Added an inner try-catch around FlutterTimezone.getLocalTimezone() with a UTC fallback — scheduled reminders will still work, just anchored to UTC if the device timezone cannot be resolved.

Install

Download and install app-release.apk directly on your Android device.

v1.0.2 — Bug fixes

Choose a tag to compare

@chinmayrozekar chinmayrozekar released this 07 May 05:07

Bug Fixes

UI / Reactivity

  • Challenge detail view now updates immediately after toggling a day or using freeze. Previously the day grid and action button label would stay stale until the user navigated away and came back. The view now watches the challenges provider so it rebuilds as soon as a change is saved.

Appearance

  • "System" theme now correctly follows the device's dark/light mode setting. It previously always showed the light theme regardless of what the system was set to.

Streak calculation

  • Frozen days no longer break the current streak counter. A freeze-protected day (one marked with the freeze action) is now skipped when walking back through completed days, so the streak stays intact across a freeze.

Freeze days

  • Available freeze days are now capped at 3 per challenge. The counter previously showed up to 21 available freeze slots (one per challenge day), making freezing trivially abusable.

Settings — stability

  • Profile photo load no longer crashes on corrupt data. Base64 decoding is now wrapped in a try/catch; if stored image data is malformed the avatar simply shows blank instead of throwing an unhandled exception.
  • Profile photo is resized before storing. Images are now scaled down to 512 × 512 px at 80 % quality before being base64-encoded into SharedPreferences, preventing very large photos from bloating storage or causing silent write failures.
  • Name field rejects whitespace-only input. Tapping Save with only spaces entered now dismisses the dialog without overwriting the stored name.

Tests

  • Fixed syntax errors in widget_test.dart (v/oid, stray n) and corrected the app class reference (MyAppDayforgeApp) so the test file compiles.

v1.0.1 — Notification Bug Fix

Choose a tag to compare

@chinmayrozekar chinmayrozekar released this 06 May 04:32

Bug Fixes

Daily reminders now work correctly

Fixed a bug where reminders set in Settings would never fire. Two root causes:

Missing broadcast receivers (primary fix)
flutter_local_notifications requires ScheduledNotificationReceiver to be registered in AndroidManifest.xml. Without it, Android fires the scheduled alarm but has no handler to deliver it to, so the notification is silently dropped every time. Also registered ScheduledNotificationBootReceiver so reminders survive device reboots.

Wrong timezone (secondary fix)
The notification time was computed against a hardcoded Asia/Kolkata timezone instead of the device's actual local timezone. Now reads the device timezone at runtime, so reminders fire at the correct time regardless of region.

Download

Install app-release.apk directly on your Android device.

v1.0.0 - Initial Release

Choose a tag to compare

@chinmayrozekar chinmayrozekar released this 05 May 11:36