This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
import 'package:flutter_riverpod/flutter_riverpod.dart'; | |
import 'package:dio/dio.dart'; | |
import 'package:freezed_annotation/freezed_annotation.dart'; | |
import 'package:riverpod_annotation/riverpod_annotation.dart'; | |
import 'package:go_router/go_router.dart'; | |
part 'main.freezed.dart'; | |
part 'main.g.dart'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Before | |
@riverpod | |
Future<Movie> movieDetails(MovieDetailsRef ref, String id) { | |
return ref.watch(movieServiceProvider.notifier).fetchMovie(id); | |
} | |
// After | |
@riverpod | |
Future<Movie> movieDetails(Ref ref, String id) { | |
return ref.watch(movieServiceProvider.notifier).fetchMovie(id); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class EditMovieModal extends ConsumerStatefulWidget { | |
final Movie movie; | |
const EditMovieModal({required this.movie, super.key}); | |
@override | |
ConsumerState<EditMovieModal> createState() => _EditMovieModalState(); | |
} | |
class _EditMovieModalState extends ConsumerState<EditMovieModal> { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@riverpod | |
class EditMovie extends _$EditMovie { | |
@override | |
AsyncValue<Movie?> build() => const AsyncValue.data(null); | |
void setMovie(Movie movie) { | |
state = AsyncValue.data(movie); | |
} | |
Future<void> saveChanges(Movie updatedMovie) async { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@riverpod | |
class MovieNotifier extends _$MovieNotifier { | |
@override | |
FutureOr<List<Movie>> build() async { | |
return _fetch(); | |
} | |
Future<List<Movie>> _fetch([String filter = ""]) async { | |
final movieService = ref.read(movieServiceProvider.notifier); | |
return movieService.fetchMovies(filter); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@riverpod | |
class MovieService extends _$MovieService { | |
late final _dio = Dio( | |
BaseOptions( | |
baseUrl: 'https://6748a43f5801f5153591b589.mockapi.io/api', | |
connectTimeout: const Duration(seconds: 5), | |
receiveTimeout: const Duration(seconds: 3), | |
), | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@freezed | |
class Movie with _$Movie { | |
const factory Movie({ | |
required String id, | |
required String title, | |
required String year, | |
required String plot, | |
String? poster, | |
}) = _Movie; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Before (Riverpod 1.0) | |
final movieServiceProvider = Provider<MovieService>((ref) => MovieService()); | |
// After (Riverpod 2.0) | |
@riverpod | |
class MovieService extends _$MovieService { | |
@override | |
Future<List<Movie>> build() async { | |
return fetchMovies(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dependencies: | |
flutter: | |
sdk: flutter | |
flutter_riverpod: ^2.4.9 | |
riverpod_annotation: ^2.3.3 | |
freezed_annotation: ^2.4.1 | |
json_annotation: ^4.8.1 | |
dio: ^5.4.0 | |
go_router: ^13.0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@override | |
bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { | |
final isKeyUp = event is RawKeyUpEvent; | |
// | |
if (isKeyUp) { | |
if (current == PlayerState.right || current == PlayerState.left || current == PlayerState.jump) { | |
stop(); | |
current = PlayerState.regular; | |
} | |
} |
NewerOlder