Skip to content

Instantly share code, notes, and snippets.

View vbalagovic's full-sized avatar

Vedran Balagović vbalagovic

View GitHub Profile
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';
// 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);
class EditMovieModal extends ConsumerStatefulWidget {
final Movie movie;
const EditMovieModal({required this.movie, super.key});
@override
ConsumerState<EditMovieModal> createState() => _EditMovieModalState();
}
class _EditMovieModalState extends ConsumerState<EditMovieModal> {
@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 {
@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);
@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),
),
);
@freezed
class Movie with _$Movie {
const factory Movie({
required String id,
required String title,
required String year,
required String plot,
String? poster,
}) = _Movie;
// 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();
}
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
@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;
}
}