feat(auth): refactor token retrieval to use maybeWhen for improved null handling

This commit is contained in:
Nils-Johan Gynther
2026-05-02 09:24:45 +02:00
parent 41ae7d4d06
commit 755258a4bc
2 changed files with 21 additions and 7 deletions
@@ -50,7 +50,6 @@ class _RecipeImportTabState extends ConsumerState<RecipeImportTab> {
if (result == null || result.files.isEmpty) return; if (result == null || result.files.isEmpty) return;
setState(() { setState(() {
_pickedFile = result.files.first; _pickedFile = result.files.first;
_error = null;
}); });
} }
@@ -65,7 +64,10 @@ class _RecipeImportTabState extends ConsumerState<RecipeImportTab> {
setState(() => _isLoading = true); setState(() => _isLoading = true);
try { try {
final token = ref.read(authStateProvider).valueOrNull ?? final token = ref.read(authStateProvider).maybeWhen(
data: (t) => t,
orElse: () => null,
) ??
await ref.read(authStateProvider.future); await ref.read(authStateProvider.future);
final repo = ref.read(importRepositoryProvider); final repo = ref.read(importRepositoryProvider);
final result = _method == _Method.file final result = _method == _Method.file
@@ -24,9 +24,12 @@ class RecipeDetailScreen extends ConsumerWidget {
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final recipeAsync = ref.watch(recipeDetailProvider(recipeId)); final recipeAsync = ref.watch(recipeDetailProvider(recipeId));
final token = ref.watch(authStateProvider).valueOrNull; final token = ref.watch(authStateProvider).maybeWhen(
data: (t) => t,
orElse: () => null,
);
final currentUserId = jwtUserId(token); final currentUserId = jwtUserId(token);
final recipe = recipeAsync.valueOrNull; final recipe = recipeAsync.asData?.value;
final isOwner = recipe != null && currentUserId != null && recipe.ownerId == currentUserId; final isOwner = recipe != null && currentUserId != null && recipe.ownerId == currentUserId;
return Scaffold( return Scaffold(
@@ -164,7 +167,10 @@ class RecipeDetailScreen extends ConsumerWidget {
Recipe recipe, Recipe recipe,
) async { ) async {
try { try {
final token = ref.read(authStateProvider).valueOrNull ?? final token = ref.read(authStateProvider).maybeWhen(
data: (t) => t,
orElse: () => null,
) ??
await ref.read(authStateProvider.future); await ref.read(authStateProvider.future);
await ref.read(recipeRepositoryProvider).setRecipeVisibility( await ref.read(recipeRepositoryProvider).setRecipeVisibility(
recipe.id, recipe.id,
@@ -242,7 +248,10 @@ class RecipeDetailScreen extends ConsumerWidget {
if (trimmed.isEmpty) return; if (trimmed.isEmpty) return;
try { try {
final token = ref.read(authStateProvider).valueOrNull ?? final token = ref.read(authStateProvider).maybeWhen(
data: (t) => t,
orElse: () => null,
) ??
await ref.read(authStateProvider.future); await ref.read(authStateProvider.future);
if (action == _ShareAction.unshare) { if (action == _ShareAction.unshare) {
await ref.read(recipeRepositoryProvider).unshareRecipeWithUsername( await ref.read(recipeRepositoryProvider).unshareRecipeWithUsername(
@@ -332,7 +341,10 @@ class _DeleteButton extends ConsumerWidget {
if (confirmed != true || !context.mounted) return; if (confirmed != true || !context.mounted) return;
try { try {
final token = ref.read(authStateProvider).valueOrNull ?? final token = ref.read(authStateProvider).maybeWhen(
data: (t) => t,
orElse: () => null,
) ??
await ref.read(authStateProvider.future); await ref.read(authStateProvider.future);
await ref.read(recipeRepositoryProvider).deleteRecipe(recipe.id, await ref.read(recipeRepositoryProvider).deleteRecipe(recipe.id,
token: token); token: token);