تكرار السؤال: …
الإجابة المختصرة
استخدم تخطيطات مرنة بدل الارتفاعات الثابتة، واترك النص يتمدد مع إعدادات المستخدم، وفضّل الأصناف الاتجاهية (EdgeInsetsDirectional و AlignmentDirectional) حتى ينعكس التخطيط تلقائيًا في اللغات من اليمين لليسار.
الشرح
يضبط المستخدم حجم الخط من إعدادات النظام ويقرأه Flutter عبر MediaQuery.textScalerOf. تجنب تحديد ارتفاع ثابت لعناصر تحتوي نصًا، واستخدم Flexible/Expanded و ConstrainedBox بحدّ أدنى، وراجع الشاشات عند مقياس 200%. ويحدد Directionality اتجاه الكتابة تلقائيًا من اللغة، فتنعكس الأصناف الاتجاهية (start/end) بدل (left/right). وتحتاج الأيقونات الاتجاهية (مثل سهم الرجوع) إلى انعكاس، بينما لا تُعكس الصور والأرقام بلا سبب.
مثال بالكود
Padding(
padding: const EdgeInsetsDirectional.only(start: 16, end: 8), // flips automatically in RTL
child: Row(
children: [
const Icon(Icons.arrow_back), // Icons.arrow_back mirrors in RTL
const SizedBox(width: 8),
Expanded(child: Text(title, maxLines: 2, overflow: TextOverflow.ellipsis)),
],
),
);
Align(
alignment: AlignmentDirectional.centerStart, // left in LTR, right in RTL
child: Text(label),
);
// Respect the user's font size; avoid fixed heights around text
ConstrainedBox(
constraints: const BoxConstraints(minHeight: 48),
child: Text(label, textScaler: MediaQuery.textScalerOf(context)),
);أخطاء شائعة
- تحديد height ثابت لحاوية نص فيتجاوز النص الحاوية (overflow) عند تكبير الخط.
- استخدام EdgeInsets.only(left: ...) و Alignment.centerLeft فلا ينعكس التخطيط في اللغة العربية.