# Theme Lens > A Material 3 check for a Flutter theme. Paste the MaterialApp, its ThemeData and the widgets that use it (or drop a > .dart file); the browser masks comments and strings, matches every call to its closing bracket and reads its named > arguments, then finds useMaterial3: false and primarySwatch, the deprecated accent properties and AppBarTheme color, > *Theme classes where ThemeData takes *ThemeData, the removed FlatButton, RaisedButton and OutlineButton, Material 2 > navigation components, ColorScheme role pairs under 4.5:1 (with a passing colour it measures), widgets that hard-code > colours and font sizes, a missing or differently seeded dark theme, and desktop idioms. Metered runs write the review > and the migrated file. Built on the SkillSafe skill @flutter/flutter-theming-apps, from flutter/skills > (BSD-3-Clause), by the Flutter team. > Independent tool; not affiliated with or endorsed by Flutter or Google. Flutter is a trademark of Google LLC. https://theme-lens.skillsafe.ai/ ## What is free - The scan: every finding with an id (T1, T2, ...), a severity (blocker - does not compile, major, minor), the line, where it is, what the page saw and the fix. - Role contrast for every ColorScheme that spells out a role and its on-colour, with a colour that passes when a pair fails. - The skill's Material 3 migration checklist marked from the scan, a starter lib/app_theme.dart from the seed it finds (ColorScheme.fromSeed for light and dark, the *ThemeData component classes), a findings CSV and everything as JSON. ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (review or migrate), `theme`, `code`, `carry` (migrate only: the review's decisions) and `facts` (the page's scan). - `review` replies with `summary`, `findings` (confirmed ids with the issue, the fix and a short code fix), `cleared`, `extra` (up to five issues a scan cannot see, on real lines), `plan` (the migration in order, naming its ids) and `caveats`. - `migrate` replies with `summary`, `code` (the whole migrated file), `changes`, `kept` and `caveats`. The page holds every reply to its scan: each id accounted for exactly once, the measured passing colours used, every class and the whole file kept, and the migrated file re-scanned - a claimed fix the re-scan still finds, or a new finding, is flagged. ## Links - API tutorial: https://theme-lens.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@flutter/flutter-theming-apps