في Flutter، يعد TextField عنصر واجهة المستخدم الأساسي للحصول على إدخال البيانات من المستخدم. يسمح TextField للمستخدم بإدخال النص والأرقام والبيانات الأخرى في التطبيق. يتيح لك Flutter تخصيص TextField بسهولة باستخدام مجموعة من الخصائص.
خصائص TextField في فلاتر
decoration
تتحكم خاصية decoration في مظهر TextField. يمكن استخدام decoration لتغيير الألوان والحدود والخلفية والظل والأيقونات والصور وغيرها من المظاهر المختلفة.
TextField( decoration: InputDecoration( labelText: 'Full Name', hintText: 'Enter your full name', prefixIcon: Icon(Icons.person), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), ), ), ),
“اقرأ أيضاً: شرح استخدام ويدجت SnackBar في فلاتر“
controller
تسمح خاصية controller لـ TextField بالتفاعل مع النص الذي قام المستخدم بإدخاله. يمكن استخدام هذه الخاصية للحصول على النص الذي تم إدخاله أو لتحديث TextField بناءً على بعض الأحداث الأخرى.
final TextEditingController _nameController = TextEditingController(); TextField( controller: _nameController, decoration: InputDecoration( labelText: 'Full Name', ), ),
onChanged
يتم استخدام onChanged للاستماع إلى تغييرات النص الذي يتم إدخاله. يتم استخدام onChanged لتحديث النص أو للقيام بأي عمليات أخرى على البيانات.
String _name = ''; TextField( onChanged: (value) { setState(() { _name = value; }); }, decoration: InputDecoration( labelText: 'Full Name', ), ),
“اقرأ أيضاً: شرح استخدام ويدجت WillPopScope في فلاتر“
obscureText
يستخدم obscureText لإخفاء النص المدخل بناءً على الحاجة. يمكن استخدام هذه الخاصية لإخفاء كلمة المرور أو الرمز السري الذي يتم إدخاله.
bool _passwordVisible = false; TextField( obscureText: !_passwordVisible, decoration: InputDecoration( labelText: 'Password', suffixIcon: IconButton( icon: Icon( _passwordVisible ? Icons.visibility : Icons.visibility_off, ), onPressed: () { setState(() { _passwordVisible = !_passwordVisible; }); }, ), ), ),
keyboardType
تحدد خاصية keyboardType نوع لوحة المفاتيح المستخدمة لإدخال البيانات. يمكن استخدام القيم التالية لتحديد نوع لوحة المفاتيح:
- TextInputType.text.
- TextInputType.number.
- TextInputType.emailAddress.
- TextInputType.phone.
- TextInputType.multiline.
- والمزيد.
TextField( keyboardType: TextInputType.emailAddress, decoration: InputDecoration( labelText: 'Email', ), ),
maxLength
يحدد maxLength الحد الأقصى لعدد الأحرف التي يمكن للمستخدم إدخالها في TextField.
TextField( maxLength: 10, decoration: InputDecoration( labelText: 'Username', ), ),
maxLines
يحدد maxLines الحد الأقصى لعدد الأسطر التي يمكن للمستخدم إدخالها في TextField.
TextField( maxLines: 3, decoration:InputDecoration( labelText: 'Description', ), ),
textAlign
يحدد textAlign موقع النص داخل TextField. يمكن استخدامه للتحكم في موقع النص الذي يتم إدخاله.
TextField( textAlign: TextAlign.center, decoration: InputDecoration( labelText: 'Username', ), ),
style
يتحكم style في أسلوب النص داخل TextField. يمكن استخدامه لتغيير الخط وحجم الخط ولون النص وغيرها من الخصائص.
TextField( style: TextStyle( color: Colors.blue, fontSize: 16, fontWeight: FontWeight.bold, ), decoration: InputDecoration( labelText: 'Username', ), ),
textInputAction
يحدد textInputAction الإجراء الذي يتم تنفيذه عند الضغط على زر “Done” في لوحة المفاتيح. يمكن استخدامه لتحديد الإجراء الذي يتم تنفيذه بعد إدخال النص.
TextField( textInputAction: TextInputAction.done, decoration: InputDecoration( labelText: 'Username', ), ),
مثال على استخدام TextField في فلاتر
هذا مثال كامل على استخدام TextField في Flutter:
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key? key, required this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { final TextEditingController _nameController = TextEditingController(); final TextEditingController _emailController = TextEditingController(); bool _passwordVisible = false; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ TextField( controller: _nameController, decoration: const InputDecoration( labelText: 'Full Name', ), ), const SizedBox(height: 16), TextField( controller: _emailController, keyboardType: TextInputType.emailAddress, decoration: const InputDecoration( labelText: 'Email', ), ), const SizedBox(height: 16), TextField( obscureText: !_passwordVisible, decoration: InputDecoration( labelText: 'Password', suffixIcon: IconButton( icon: Icon( _passwordVisible ? Icons.visibility : Icons.visibility_off, ), onPressed: () { setState(() { _passwordVisible = !_passwordVisible; }); }, ), ), ), const SizedBox(height: 16), ElevatedButton( onPressed: () { String name = _nameController.text; String email = _emailController.text; String password = '***'; // Hide password for security reasons print('Name: $name \nEmail: $email \nPassword: $password'); }, child: const Text('Submit'), ), ], ), ), ); } }
في هذا المثال، يتم استخدام TextField للحصول على اسم المستخدم والبريد الإلكتروني وكلمة المرور. يتم استخدام خاصية controller للتفاعل مع النص الذي يتم إدخاله في TextField. يتم استخدام keyboardType لتحديد نوع لوحة المفاتيح المستخدمة لإدخال البريد الإلكتروني. تم استخدام obscureText لإخفاء كلمة المرور. تم استخدام ElevatedButton لتقديم النموذج.
“اقرأ أيضاً: شرح استخدام ويدجت InkWell في فلاتر“
إن TextField هو عنصر واجهة المستخدم الأساسي للحصول على إدخال البيانات من المستخدم في Flutter. يتيح لك Flutter تخصيص TextField بسهولة باستخدام مجموعة من الخصائص. في هذا الدليل، قمنا بتغطية جميع الخصائص الأساسية التي تساعدك على تحديد مظهر وسلوك TextField الخاص بك. استخدم هذا الدليل كمرجع لتخصيص TextField وجعله يعمل بشكل جيد في التطبيقات الخاصة بك.