Use Localization and Internationalization
When you will specify Arabic locale as explained below in Main MyApp state MaterialApp it will change Directionality of each widget in the subtree of your app.
Explained very well in Flutter documentation Link
After Localization and Intl dependencies you can define and set Locale for Arabic like this in you myApp state MaterialApp like this.
I have used findAncestorStateOfType in Parent MyApp to setLocale in Child
Here is the code
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
static void setLocale(BuildContext context, Locale locale) {
_MyAppState? state = context.findAncestorStateOfType<_MyAppState>();
state!.setLocale(locale);
}
@override
_MyAppState createState() => _MyAppState();
}
// ignore: use_key_in_widget_constructors
class _MyAppState extends State<MyApp> {
// const MyApp({Key? key}) : super(key: key)
late Locale _locale;
void setLocale(Locale value) {
setState(() {
_locale = value;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: const [
AppLocalizations.delegate, // Add this line
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('en', ''), // English, no country code
Locale('ar', ''), // Spanish, no country code
],
locale: _locale,
themeMode: ThemeMode.light,
// themeMode: ThemeMode.dark,
// themeMode: ThemeMode.system,
theme: MyTheme.lightTheme(context),
darkTheme: MyTheme.darkTheme(context),
debugShowCheckedModeBanner: false,
initialRoute: "/",
routes: {
"/": (context) => LoginScreen1(), //LoginPage(),
MyRoutes.loginRoute: (context) => LoginScreen1(), //LoginPage(),
MyRoutes.signupRoute: (context) => const SignUpScreen1(),
MyRoutes.homeRoute: (context) => HomePage(),