تعریف Listener
Listener به معنی شنونده ، وظیفه شناسایی تغییرات در ویجت تحت نظر خود را دارد . به عنوان مثال شما اگر یک کنترلر از نوع TextEditingController تعریف نمایید و آن را به خصوصیت controller ویجت TextFormField یا ویجت TextField متصل نمایید ، می توانید توسط یک Listener مقادیر ثبت شده توسط کاربر در ویجت ها را آشکار نمایید . این قابلیت در زمانی که شما مایلید به ازای هر کلید فشرده شده ، کنترلی را انجام و واکنشی نشان دهید ( مثلا از درج کاراکترهای خاص جلوگیری نمایید ) کاربرد دارد و یا اگر مایل باشید کاربر به ازای فشرده دکمه های جهت نما از صفحه کلید باعث جابجایی یک ویجت در صفحه گردد ، باز هم راه حل استفاده از شنونده هاست .
قطعه کد زیر روش تعریف یک Listener را به نمایش گذاشته است :
import 'package:flutter/material.dart'; void main() { runApp(MaterialApp( debugShowCheckedModeBanner: false, home: MyApp(), )); } class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { // تعریف کنترلر var textController = new TextEditingController(); String _textInput = ''; @override void initState() { // TODO: implement initState super.initState(); textController.addListener(() { setState(() { _textInput = textController.text; }); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Listener'), ), body: Padding( padding: const EdgeInsets.all(20), child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ SizedBox( width: 100, height: 100, child: Image.network( 'https://javareshkian.ir/wp-content/uploads/2020/03/javareshkian4.png')), SizedBox( height: 60, ), Text( _textInput, style: TextStyle(fontSize: 38), ), SizedBox( height: 60, ), InputFieldArea( textController: textController, ) ], ), ), ), ); } } class InputFieldArea extends StatelessWidget { // تعریف یک خصوصیت کنترلر final TextEditingController textController; // تعریف سازنده کلاس و دریافت کنترلر از ورودی InputFieldArea({@required this.textController}); @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(bottom: 10), child: TextField( // اتصال کنترلر به ویجت controller: textController, )); } }
خروجی کد فوق در تصویر زیر قابل مشاهده است :
جهت کسب اطلاعات بیشتر از این آدرس به سایت اصلی فلاتر مراجعه نمایید .
امیدوارم این مطلب برای شما مفید باشد .