TextFormField هو ويدجت (Widget) لكتابة النصوص مبني فوق TextField، لكنه يضيف ميزة قوية جدًا: ✅ التكامل مع Form وFormState — يعني تقدر تتحقق (validate) من القيم، تحفظها (save)، وتتحكم فيها بسهولة.
باختصار: TextField = إدخال نص بسيط TextFormField = إدخال نص ضمن نموذج (Form) مع التحقق، الحفظ، وغيرها.
⚙️ كيف يعمل؟
يوضع داخل Form (عن طريق Form Widget).
يتم تعريف مفتاح (GlobalKey<FormState>) للتحكم في النموذج.
عند الضغط على زر “إرسال” أو “حفظ”، يمكنك استدعاء:
formKey.currentState!.validate() ← يتحقق من جميع الحقول.
formKey.currentState!.save() ← يحفظ القيم بعد تحققها.
📋 البنية العامة
TextFormField(controller: _controller,// للتحكم بالنصfocusNode: _focusNode,// للتحكم بالـ focusdecoration:InputDecoration(// للتحكم بالشكلlabelText:'الاسم',hintText:'ادخل اسمك الكامل',prefixIcon:Icon(Icons.person),border:OutlineInputBorder(),),keyboardType: TextInputType.text,// نوع الكيبوردtextInputAction: TextInputAction.next,// زر الإدخالobscureText:false,// إخفاء النص؟ (كلمة مرور مثلاً)validator:(value){// التحقق من القيمةif(value ==null|| value.isEmpty){return'هذا الحقل مطلوب';}returnnull;},onSaved:(value){// حفظ القيمة بعد التحقق name = value!;},onChanged:(value)=>print(value),)
PHP
🎯 الأقسام الأساسية للخصائص (مقسّمة + الشرح + القيم الشائعة)
🧠 أولًا: إدارة النص والتحكم
الخاصية
النوع
الوصف
القيم الشائعة
controller
TextEditingController?
للتحكم بالنص داخل الحقل (قراءة/تغيير)
TextEditingController()
focusNode
FocusNode?
التحكم بالتركيز (Focus)
FocusNode()
initialValue
String?
تعيين قيمة ابتدائية للحقل (بدون controller)
'Ahmed'
enabled
bool?
تفعيل/تعطيل الحقل بالكامل
true / false
readOnly
bool
عرض النص فقط بدون تعديل
true / false
🔸 ملاحظة: لا يمكن استخدام controller وinitialValue معًا، لأنهما يحددان النص بطريقتين مختلفتين.
TextFormField(keyboardType: TextInputType.phone,inputFormatters:[ FilteringTextInputFormatter.digitsOnly,LengthLimitingTextInputFormatter(10),],decoration:InputDecoration(labelText:'رقم الهاتف',prefixIcon:Icon(Icons.phone),border:OutlineInputBorder(),),validator:(value){if(value ==null|| value.isEmpty)return'الرقم مطلوب';if(value.length <10)return'الرقم غير مكتمل';returnnull;},)
PHP
🧠 ملاحظات احترافية
✅ استخدم autovalidateMode: AutovalidateMode.onUserInteraction لتفعيل التحقق فورًا عند التعديل. ✅ لا تستخدم initialValue مع controller. ✅ يمكنك الوصول لقيمة الحقل من controller.text. ✅ استخدم ThemeData.inputDecorationTheme لتغيير مظهر كل الحقول دفعة واحدة. ✅ يفضل دائمًا داخل Form وضع كل TextFormField مع FormState للتحقق الشامل.