import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:f0ckapp/providers/MediaProvider.dart'; import 'package:f0ckapp/screens/DetailView.dart'; Map routes = { //'login': RegExp(r'^/login/?$'), //'user': RegExp(r'^/user/(?.*)$'), 'complex': RegExp( r'^/?' r'(?:tag/(?.+?))?' r'(?:/user/(?.+?)/(?f0cks|favs))?' r'(?:/(?image|audio|video))?' r'(?:/(?\d+))?' r'$', ), //'random': RegExp(r'^/random$'), //'search': RegExp(r'^/search/?$'), }; Map parseDeepLink(Uri? uri) { if (uri == null) { return {}; } String url = uri.toString().replaceAll("https://f0ck.me", ""); for (final MapEntry entry in routes.entries) { final String routeName = entry.key; final RegExp pattern = entry.value; final RegExpMatch? match = pattern.firstMatch(url.toString()); if (match != null) { Map params = {}; for (String name in match.groupNames) { params[name] = match.namedGroup(name) ?? ''; } return {'route': routeName, 'params': params}; } } return {}; } Future handleComplexDeepLink( Map params, BuildContext context, WidgetRef ref, ScrollController scrollController, ) async { final media = params['media']; const validMediaTypes = {'audio', 'video', 'image'}; if (media != null && validMediaTypes.contains(media)) { ref.read(mediaProvider.notifier).setType(media); } else { ref.read(mediaProvider.notifier).setType('alles'); } ref.read(mediaProvider.notifier).setMode(0); // wip ref.read(mediaProvider.notifier).setTag(null); final idParam = params['id']; if (idParam == null || idParam.isEmpty) return; final int? id = int.tryParse(idParam); if (id == null) return; final mediaState = ref.read(mediaProvider); final index = mediaState.mediaItems.indexWhere((item) => item.id == id); if (index == -1) { await ref.read(mediaProvider.notifier).loadMedia(id: id + 50); final updatedState = ref.read(mediaProvider); final updatedIndex = updatedState.mediaItems.indexWhere( (item) => item.id == id, ); print(updatedIndex.toString()); if (updatedIndex == -1) { return; } } bool? navigationResult = await Navigator.push( context, MaterialPageRoute(builder: (_) => DetailView(initialItemId: id)), ); if (navigationResult == true) { scrollController.jumpTo(0); } } /* type: mediaTypes[state.typeIndex], mode: state.modeIndex, random: state.random, tag: state.tag,*/