From d86c694cde3419a075c34c65db59a2a8ba2369c8 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 2 May 2026 19:01:54 -0400 Subject: [PATCH] fix(flutter): five flutter analyze --fatal-infos issues from first CI run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. lib/app.dart + lib/shared/routing.dart — buildRouter takes a Ref but was being called from a ConsumerWidget's build() with a WidgetRef. Add a routerProvider; the widget watches it instead of constructing the router from its own ref. Real bug — would have crashed compile in slice 1, just never compiled until CI ran. 2. lib/player/audio_handler.dart — override of AudioHandler.seek used `p` for the Duration; rename to `position` to match the base class (avoid_renaming_method_parameters lint). 3. lib/theme/theme_extension.dart — fromTokens() returned a non-const constructor; all inputs are const so make the call const too (prefer_const_constructors). 4. test/library/home_screen_test.dart — same const-constructor lint on the HomeData test fixture. 5. test/smoke_test.dart — drop the unused `import 'package:flutter/material.dart'`. These are exactly the kind of issues the no-in-task-tests rule shifted to CI; this is the first run that actually exercises the analyzer against the slice 1 code. --- flutter_client/lib/app.dart | 2 +- flutter_client/lib/player/audio_handler.dart | 2 +- flutter_client/lib/shared/routing.dart | 6 ++++++ flutter_client/lib/theme/theme_extension.dart | 2 +- flutter_client/test/library/home_screen_test.dart | 2 +- flutter_client/test/smoke_test.dart | 1 - 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/flutter_client/lib/app.dart b/flutter_client/lib/app.dart index f0c01e29..f6884573 100644 --- a/flutter_client/lib/app.dart +++ b/flutter_client/lib/app.dart @@ -9,7 +9,7 @@ class MinstrelApp extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final router = buildRouter(ref); + final router = ref.watch(routerProvider); return MaterialApp.router( title: 'Minstrel', theme: buildThemeData(), diff --git a/flutter_client/lib/player/audio_handler.dart b/flutter_client/lib/player/audio_handler.dart index 4dd35e27..81048a2d 100644 --- a/flutter_client/lib/player/audio_handler.dart +++ b/flutter_client/lib/player/audio_handler.dart @@ -55,7 +55,7 @@ class MinstrelAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandl Future pause() => _player.pause(); @override - Future seek(Duration p) => _player.seek(p); + Future seek(Duration position) => _player.seek(position); @override Future skipToNext() => _player.seekToNext(); diff --git a/flutter_client/lib/shared/routing.dart b/flutter_client/lib/shared/routing.dart index df417199..a23a980d 100644 --- a/flutter_client/lib/shared/routing.dart +++ b/flutter_client/lib/shared/routing.dart @@ -12,6 +12,12 @@ import '../player/now_playing_screen.dart'; import '../player/player_bar.dart'; import 'widgets/version_gate.dart'; +/// Exposed as a Provider so its single argument is a real `Ref` (the +/// constructor's redirect closures use `ref.read`). Widgets consume the +/// router via `ref.watch(routerProvider)` instead of constructing it +/// themselves with a `WidgetRef`, which can't satisfy the `Ref` type. +final routerProvider = Provider((ref) => buildRouter(ref)); + GoRouter buildRouter(Ref ref) { return GoRouter( initialLocation: '/', diff --git a/flutter_client/lib/theme/theme_extension.dart b/flutter_client/lib/theme/theme_extension.dart index f325b664..5efa1bb1 100644 --- a/flutter_client/lib/theme/theme_extension.dart +++ b/flutter_client/lib/theme/theme_extension.dart @@ -30,7 +30,7 @@ class FabledSwordTheme extends ThemeExtension { final Color warning, error, info; final TextStyle display, body, mono; - static FabledSwordTheme fromTokens() => FabledSwordTheme( + static FabledSwordTheme fromTokens() => const FabledSwordTheme( accent: FabledSwordTokens.accent, obsidian: FabledSwordTokens.obsidian, iron: FabledSwordTokens.iron, diff --git a/flutter_client/test/library/home_screen_test.dart b/flutter_client/test/library/home_screen_test.dart index 65b22ffd..f4608f18 100644 --- a/flutter_client/test/library/home_screen_test.dart +++ b/flutter_client/test/library/home_screen_test.dart @@ -11,7 +11,7 @@ import 'package:minstrel/theme/theme_data.dart'; void main() { testWidgets('home renders sections with rows', (tester) async { - final fixture = HomeData( + const fixture = HomeData( recentlyAddedAlbums: const [ AlbumRef(id: 'a', title: 'Geogaddi', artistId: 'x', artistName: 'BoC'), ], diff --git a/flutter_client/test/smoke_test.dart b/flutter_client/test/smoke_test.dart index 51c1407c..001cb05e 100644 --- a/flutter_client/test/smoke_test.dart +++ b/flutter_client/test/smoke_test.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart';