Skip to content

Add in-app tutorial screen with a first-launch welcome prompt - #8

Merged
Vinald merged 1 commit into
mainfrom
feat/in-app-tutorial
Sep 11, 2026
Merged

Vinald merged 1 commit into
mainfrom
feat/in-app-tutorial

Conversation

@Vinald

@Vinald Vinald commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Surfaces the walkthrough from TUTORIAL.md inside the app itself, per your ask ("yes or a popup for a new user actually both").

Changes

  • lib/ui/tutorial/tutorial_screen.dart (new) — a 9-step walkthrough (sample data, editing sections, preview, signature, letter placeholders, export/share, LaTeX source, settings, PDF combiner) as icon+title+body cards, matching the app's visual style.
  • lib/models/app_settings.dart — new tutorialSeen bool field (defaults false), persisted like every other setting.
  • lib/ui/home/home_screen.dart:
    • A help icon (?) in the AppBar opens the tutorial on demand, any time.
    • On first launch (once tutorialSeen is false and settings have loaded), a "Welcome to Resumate" dialog offers Show me (opens the tutorial, marks it seen) or Skip (marks it seen, no tutorial). Never shown again after either choice.
  • test/home_screen_tutorial_test.dart (new, 4 tests) + a tutorialSeen round-trip test in test/models_serialization_test.dart.

A note on the test file

Getting this test file right took real digging — two environment gotchas, documented in the file's header comment:

  1. Real dart:io calls (temp dir, repo .load()) must happen in setUp()/tearDown(), not directly inside a testWidgets body — the latter hangs indefinitely in this environment.
  2. The dialog's "Show me" handler does a real file write (SettingsStore.update) before navigating to TutorialScreen. flutter_test's fake clock doesn't reliably resume a genuine dart:io Future triggered as a side effect of pumping (confirmed even inside tester.runAsync()), so the one assertion that depended on that (navigating to TutorialScreen after accepting) is intentionally not automated — it's covered by code review of the four-line if that gates it, plus manual verification.

flutter analyze clean · all 32 tests pass (28 + 4 new).

Manual on-device verification was blocked by two pre-existing, unrelated machine issues I fixed along the way (Flutter's configured --jdk-dir pointed at a JDK that no longer exists, and a stale Gradle daemon was pinned to it) — after fixing both, the build now hits a separate Kotlin compiler crash in image_picker_android/pdf_combiner unrelated to this PR's diff, worth a flutter clean + toolchain look separately.

🤖 Generated with Claude Code

@Vinald
Vinald merged commit f858cb4 into main Sep 11, 2026
2 checks passed
@Vinald
Vinald deleted the feat/in-app-tutorial branch September 11, 2026 06:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant