user2868835
user2868835

Reputation: 1600

Flutter Riverpod Future provider - requires async and await?

I've been reviewing the RiverPod 2 tutorial at https://codewithandrea.com/articles/flutter-state-management-riverpod/

In the section dealing with Future providers there is a code snippet as shown below...

final weatherFutureProvider = FutureProvider.autoDispose<Weather>((ref) {
  // get repository from the provider below
  final weatherRepository = ref.watch(weatherRepositoryProvider);
  // call method that returns a Future<Weather>
  return weatherRepository.getWeather(city: 'London');
});

I can't understand why this code snippet is missing the 'async' and 'await' syntax as shown below...

final weatherFutureProvider = FutureProvider.autoDispose<Weather>((ref) async {
  // get repository from the provider below
  final weatherRepository = ref.watch(weatherRepositoryProvider);
  // call method that returns a Future<Weather>
  return await weatherRepository.getWeather(city: 'London');
});

Is my version correct or what?

Upvotes: 3

Views: 1566

Answers (1)

R&#233;mi Rousselet
R&#233;mi Rousselet

Reputation: 276997

Think of it as doing:

Future<int> example() {
  return Future.value(42);
}

instead of:

Future<int> example() async {
  return await Future.value(42);
}

Sure, you can use async/await. But it is technically optional here.

Doing return future vs return await future doesn't change anything. In fact, there's a lint for removing the unnecessary await: unnecessary_await_in_return

The async keyword is generally helpful. It catches exceptions in the function and converts them into a Future.error.
But FutureProvider already takes care of that. So async could also be omitted

Upvotes: 5

Related Questions