تعریف Listener

تعداد بازدید ها : 1,456 بازدید
 تعریف 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,
        ));
  }
}

خروجی کد فوق در تصویر زیر قابل مشاهده است :

می خوانم   ویجت PopupMenuButton

Listenerجهت کسب اطلاعات بیشتر از این آدرس به سایت اصلی فلاتر مراجعه نمایید .

امیدوارم این مطلب برای شما مفید باشد .

محمدمجتبی جوارشکیان

محمدمجتبی جوارشکیان

من محمدمجتبی جوارشکیان ، کارشناس IT و فعال اجتماعی هستم و در حوزه معماری ، طراحی ، تحلیل گری ، مدلسازی و توسعه ی محیط های نرم افزاری فعالیت دارم . بسیار خوشحال می شوم من را از انتقادات ، پیشنهادات و نظرات خود مطلع فرمایید . آدرس ایمیل : info@javareshkian.ir

ارسال یک پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

19 + دوازده =