1

I am using flutter localization from their official documentation here, and I am using clean architecture in my project. I want to access the app localization class without a context so I can translate the error messages in the repository file.

Here is an example:

class UserRepository{
  Future<Either<Failure, Unit>> logOut() async{
    try{
      return const Right(unit);
    }catch(e){
      return const Left(AuthFailure('I want to translate this error based on app`s language'));
    }
  }
}
ibrahim Eltayfe
  • 118
  • 2
  • 5
  • Does this answer your question? [Flutter localization without context](https://stackoverflow.com/questions/61563074/flutter-localization-without-context) – Ruchit Jan 21 '23 at 10:31

1 Answers1

2

Well, since this is not the best practice to do, you can create a custom localizations widget that gets you the Localizations.of(context) but here the context will be obtained by a GlobalKey that you to get from a widget that we can access the Localization widget context with it, which is inside the MaterialApp of course.

For this, you can use the navigatorKey to achieve it:

// somewhere else in your project
GlobalKey<NavigatorState> ourNavigatorKey = GlobalKey<NavigatorState>();

// main.dart
MaterialApp(
  navigatorKey: ourNavigatorKey,
//...

Now that you assigned that key, you can create a WithoutContextLocalizations widget:

Localizations withoutContextLocalizations() {
  final BuildContext context = ourNavigatorKey.currentContext!;
  return Localizations.of<Localizations>(context, Localizations)!;
}

Now from any place instead of using :

Localizations.of(context);

You can use :

WithoutContextLocalizations();
Gwhyyy
  • 7,554
  • 3
  • 8
  • 35