Software Development ⭐ Featured

Building Arabic-First Mobile Apps with Flutter

Abdulaziz Yahya 8 min read
## Why Arabic-First Matters Most mobile apps are built in English first, then "localized" to Arabic as an afterthought. The result? Mirrored layouts that feel awkward, fonts that look wrong at small sizes, and date formats that confuse users. At AzizWares, we flip the script: we design for Arabic first, then adapt for English. This isn't just ideology — it's practical. The Arabic-speaking market has over 400 million native speakers and is one of the fastest-growing mobile markets in the world. Building Arabic-first means your app feels native to the majority of your users from day one. ## Setting Up Flutter for RTL Flutter has excellent built-in support for RTL (Right-to-Left) layouts, but you need to set it up correctly from the start. ### 1. Configure MaterialApp for Localization ```dart MaterialApp( localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: [ Locale('ar'), // Arabic first! Locale('en'), ], locale: Locale('ar'), // Default to Arabic ) ``` ### 2. Use Directional Widgets Replace `Padding` with `EdgeInsetsDirectional` and `Align` with `AlignmentDirectional`: ```dart // Bad: hardcoded LTR padding Padding(padding: EdgeInsets.only(left: 16)) // Good: direction-aware padding Padding(padding: EdgeInsetsDirectional.only(start: 16)) ``` ### 3. Arabic Typography Best Practices Arabic text requires different typographic treatment than Latin text: - **Font size:** Arabic fonts generally need to be 10-15% larger than their English equivalents for the same readability - **Line height:** Use at least 1.6x for Arabic body text (compared to 1.4x for English) - **Font family:** We recommend Noto Sans Arabic or IBM Plex Arabic for UI text, and Amiri for decorative headings - **Letter spacing:** Arabic text should have zero or negative letter spacing — never positive ```dart TextStyle arabicBody = TextStyle( fontFamily: 'NotoSansArabic', fontSize: 16, height: 1.7, letterSpacing: 0, ); ``` ## Locale-Aware Formatting Dates, numbers, and currencies must respect the user's locale: ```dart import 'package:intl/intl.dart'; // Arabic date formatting final dateFormatter = DateFormat.yMMMMd('ar'); print(dateFormatter.format(DateTime.now())); // Output: ١٥ فبراير ٢٠٢٦ // Arabic number formatting final numberFormatter = NumberFormat('#,##0', 'ar'); print(numberFormatter.format(1500)); // Output: ١٬٥٠٠ ``` ## Islamic Calendar Integration Many Arabic apps need Hijri calendar support. We use the `hijri_calendar` package: ```dart import 'package:hijri_calendar/hijri_calendar.dart'; final hijri = HijriCalendar.now(); print('${hijri.hDay} ${hijri.longMonthName} ${hijri.hYear}'); ``` In our apps like **Jummal Calculator** and **SakinahLoop**, we display both Hijri and Gregorian dates side by side, letting users see the date in whichever system feels natural to them. ## Testing Arabic Layouts Always test your app with: 1. **Long Arabic text** — Arabic words can be much longer than English 2. **Mixed content** — Arabic text with English brand names or numbers 3. **Edge cases** — Empty states, error messages, and loading screens in Arabic 4. **Different devices** — Arabic text rendering varies across Android OEMs ## Real-World Example: Q-Arabi Our app **Q-Arabi** (القارئ العربي) is a reading companion designed Arabic-first. Every interaction — from the page-turn animation direction to the bookmark icon placement — was designed for RTL users first. The English version is a mirror, not the other way around. ## Conclusion Building Arabic-first isn't harder — it's different. Flutter makes it straightforward with its built-in RTL support, but the real work is in the design decisions: typography, spacing, cultural expectations, and testing. Start Arabic-first, and you'll build better apps for everyone. --- *Abdulaziz Yahya is the founder of AzizWares, a Saudi software studio building Arabic-first mobile apps. Follow our work at [azizwares.com](https://azizwares.com).*
Tags: Flutter Arabic RTL Mobile Development i18n Localization