জাভাস্ক্রিপ্টের মতো একইভাবে কীবোর্ড ইভেন্টগুলি রেকর্ড করা এবং বিরতি দেওয়া কি ফ্লটারের পক্ষে সম্ভব?

Flutter

ফ্লাটার এবং জাভাস্ক্রিপ্টে গ্লোবাল শর্টকাট ম্যানেজমেন্ট বোঝা

কীবোর্ড শর্টকাটগুলি কমান্ডগুলিতে দ্রুত অ্যাক্সেস প্রদান করে অ্যাপ্লিকেশনগুলির ব্যবহারযোগ্যতা উন্নত করতে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। যাইহোক, তাদের বাস্তবায়ন প্ল্যাটফর্ম জুড়ে পরিবর্তিত হয়, জাভাস্ক্রিপ্টের মতো ফ্রেমওয়ার্কগুলি ইভেন্ট পরিচালনার জন্য "ক্যাপচার" এবং "বাবল" এর মতো স্বতন্ত্র পর্যায়গুলি অফার করে। এই পর্যায়গুলি বিকাশকারীদের বিশ্বব্যাপী শর্টকাটগুলির অগ্রাধিকার কার্যকরভাবে পরিচালনা করতে দেয়।

জাভাস্ক্রিপ্টে, "ক্যাপচারিং" ফেজ নিশ্চিত করে যে উচ্চ-প্রধান শর্টকাটগুলি প্রথমে পরিচালনা করা হয়, যখন "বুদবুদ" ফেজ নিশ্চিত করে যে শুধুমাত্র আন-হ্যান্ডেল করা ইভেন্টগুলি বিশ্বব্যাপী শর্টকাটগুলিতে পৌঁছায়। এই ডুয়াল-ফেজড ইভেন্ট সিস্টেমটি নমনীয়তা অফার করে, নির্দিষ্ট ইনপুটগুলিকে প্রাধান্য দেওয়ার অনুমতি দেয় যখন প্রসঙ্গ ভিত্তিক অন্যদের স্থগিত করে।

Flutter বিকাশকারীদের জন্য, অনুরূপ নিয়ন্ত্রণ অর্জন করা চ্যালেঞ্জিং হতে পারে কারণ Flutter জাভাস্ক্রিপ্টের মতো "ক্যাপচারিং" বা "বুদবুদ" পর্যায়গুলি স্থানীয়ভাবে সমর্থন করে না। Flutter's কিনা তা নিয়ে প্রশ্ন উঠেছে উইজেট এই আচরণগুলিকে অনুকরণ করতে পারে এবং কীভাবে উইজেট গাছের মধ্যে উচ্চ-অগ্রাধিকার এবং নিম্ন-অগ্রাধিকারের গ্লোবাল শর্টকাট কীগুলির মধ্যে পার্থক্য করতে পারে।

এই নিবন্ধটি অন্বেষণ করে যদি এবং কিভাবে Flutter এই ধরনের উইজেটগুলি ব্যবহার করে এই ইভেন্ট পর্যায়গুলিকে প্রতিলিপি করতে পারে৷ . এটি নিম্ন-অগ্রাধিকার শর্টকাটগুলি বাস্তবায়নের জন্য সম্ভাব্য পন্থা নিয়েও আলোচনা করে, নিশ্চিত করে যে কীবোর্ড ইভেন্টগুলি শুধুমাত্র তখনই ট্রিগার করে যখন অন্য কোনও উইজেট সেগুলি ব্যবহার করে না। শেষ পর্যন্ত, আপনি বুঝতে পারবেন কীভাবে কীবোর্ড ইভেন্টগুলিকে ফ্লটারে আরও কার্যকরভাবে পরিচালনা করতে হয়।

আদেশ ব্যবহারের উদাহরণ
Focus এই উইজেটটি পুরো উইজেট ট্রি জুড়ে কীবোর্ড ইভেন্ট ক্যাপচার করে। মূল উইজেটটিকে ফোকাসে মোড়ানোর মাধ্যমে, আপনি অন্য উইজেটগুলি পরিচালনা করার আগে বিশ্বব্যাপী কী ইভেন্টগুলিকে আটকাতে পারেন।
LogicalKeyboardKey.escape একটি কীবোর্ডে Escape কী প্রতিনিধিত্ব করে। ব্যবহারকারী চাপলে এটি সনাক্ত করতে ব্যবহৃত হয় কী, Flutter-এ উচ্চ-অগ্রাধিকার শর্টকাট সক্রিয় করা।
KeyEventResult.handled এই মানটি ইভেন্টের আরও প্রচার বন্ধ করে দেয়, যা নির্দেশ করে যে বর্তমান উইজেট কীবোর্ড ইনপুট পরিচালনা করেছে, যা জাভাস্ক্রিপ্টে ইভেন্ট ক্যাপচার করার মতো।
FocusScope একটি উইজেট যা উইজেটগুলির একটি গ্রুপের মধ্যে ফোকাস পরিচালনা করে। এটি একটি উইজেট সাবট্রির মধ্যে ইভেন্টগুলি কোথায় প্রচার করা হয় তার উপর আরও সুনির্দিষ্ট নিয়ন্ত্রণ সক্ষম করে।
RawKeyDownEvent নিম্ন-স্তরের কী প্রেস ইভেন্টগুলি ক্যাপচার করতে ব্যবহৃত একটি বিশেষ ইভেন্ট ক্লাস। ইউনিট পরীক্ষা লেখার জন্য এটি অপরিহার্য যা কীবোর্ড ইনপুট অনুকরণ করে।
LogicalKeyboardKey.enter কীবোর্ড ইনপুট ইভেন্টগুলিতে এন্টার কী সনাক্ত করতে ব্যবহৃত হয়। কম-অগ্রাধিকার শর্টকাটগুলিতে, এটি পরীক্ষা করে কিনা কী কোনো বৈশ্বিক কর্মকে ট্রিগার করে।
KeyEventResult.ignored এই ফলাফল ইভেন্টটিকে জাভাস্ক্রিপ্টে দেখা "বুদবুদ" ফেজ অনুকরণ করে অন্যান্য উইজেটগুলিতে প্রচার চালিয়ে যাওয়ার অনুমতি দেয়।
sendKeyEvent flutter_test প্যাকেজ থেকে একটি ফাংশন, ইউনিট পরীক্ষায় মূল ঘটনাগুলি অনুকরণ করতে ব্যবহৃত হয়। এটি বিভিন্ন উইজেটগুলি কী ইনপুটগুলিতে প্রতিক্রিয়া জানায় তা যাচাই করতে সহায়তা করে।
autofocus একটি বৈশিষ্ট্য যা একটি ফোকাস বা ফোকাসস্কোপ উইজেট নিশ্চিত করে যখন উইজেট ট্রি নির্মিত হয় তখন তা অবিলম্বে ফোকাস লাভ করে। এটি বিশ্বব্যাপী শর্টকাট ব্যবস্থাপনার জন্য অত্যন্ত গুরুত্বপূর্ণ।

ফোকাস উইজেট ব্যবহার করে ফ্লটারে কীবোর্ড ইভেন্ট পর্যায়গুলি বাস্তবায়ন করা

প্রথম সমাধানে, আমরা Flutter's ব্যবহার করেছি ইভেন্ট পরিচালনার "ক্যাপচারিং" ফেজ অনুকরণ করার জন্য উইজেট, যা উচ্চ-অগ্রাধিকার বৈশ্বিক শর্টকাট বাস্তবায়নের জন্য গুরুত্বপূর্ণ। একটি ফোকাস উইজেট দিয়ে পুরো উইজেট ট্রি মোড়ানো এবং অটোফোকাস সক্ষম করার মাধ্যমে, আমরা নিশ্চিত করি যে কোনও শিশু উইজেট তাদের পরিচালনা করতে পারে তার আগে কীবোর্ড ইভেন্টগুলি মূলে ক্যাপচার করা হয়েছে। এই পদ্ধতির মত কী ইন্টারসেপ্ট করার জন্য কার্যকর , যা অবিলম্বে ইভেন্টটি পরিচালনা করে এবং উইজেট গাছের মধ্যে আরও বিস্তার রোধ করে। এর মূল ফলাফল হল জাভাস্ক্রিপ্টের ক্যাপচার পর্বের মতো বিশ্বব্যাপী কীবোর্ড শ্রোতা অর্জন করার ক্ষমতা।

দ্বিতীয় সমাধান নিয়োগ করে জাভাস্ক্রিপ্টে "বুদবুদ" ফেজ অনুকরণ করে কম-অগ্রাধিকারের গ্লোবাল শর্টকাটগুলি পরিচালনা করার জন্য উইজেট। এখানে পার্থক্য হল ফোকাসস্কোপ ইভেন্টগুলিকে উইজেট গাছের নিচে প্রচার করার অনুমতি দেয়, প্রতিটি উইজেট ইভেন্টে প্রতিক্রিয়া জানানোর সুযোগ করে। যদি কোনো উইজেট ইভেন্টটি গ্রাস না করে, তাহলে এটি ফোকাসস্কোপে ব্যাক আপ করে, বিশ্বব্যাপী শর্টকাট ট্রিগার করে। উদাহরণস্বরূপ, ENTER কী টিপলে শুধুমাত্র শর্টকাটটি কার্যকর হয় যদি অন্য কোনো উইজেট কী ইভেন্টটি ব্যবহার না করে। এই পদ্ধতিটি এমন পরিস্থিতিতে দরকারী যেখানে বিশ্বব্যাপী শর্টকাটগুলি শুধুমাত্র স্থানীয় ইনপুটগুলি নিষ্ক্রিয় হলেই ট্রিগার করা উচিত।

আমাদের তৃতীয় সমাধানটি ব্যবহার করে ইউনিট টেস্টিং প্রবর্তন করে উচ্চ-অগ্রাধিকার এবং নিম্ন-অগ্রাধিকার উভয় কীবোর্ড ইভেন্ট হ্যান্ডলিং বৈধ করার জন্য প্যাকেজ। আমরা মূল ইভেন্টগুলি অনুকরণ করি, যেমন ESC এবং ENTER প্রেস, নিশ্চিত করতে যে সঠিক উইজেট তাদের প্রত্যাশা অনুযায়ী পরিচালনা করে। এটি শুধুমাত্র কার্যকারিতা যাচাই করে না বরং এটিও নিশ্চিত করে যে উইজেট শ্রেণিবিন্যাস বিভিন্ন পরিস্থিতিতে যথাযথভাবে সাড়া দেয়। বিভিন্ন পরিবেশে ইভেন্ট ম্যানেজমেন্ট লজিক বজায় রাখতে এবং উইজেট ট্রি পরিবর্তিত হলে রিগ্রেশন প্রতিরোধের জন্য ইউনিট পরীক্ষা অপরিহার্য।

কোড উদাহরণ এছাড়াও বিশেষ কমান্ড ব্যবহার করে যেমন কী ইনপুট এবং অনুকরণের জন্য ঘটনা প্রবাহ পরিচালনা করতে. ব্যবহার করে নিশ্চিত করে যে জাভাস্ক্রিপ্টের ক্যাপচার ফেজের মতোই একটি ইভেন্ট প্রয়োজনের সময় প্রচার করা বন্ধ করে দেয়। অন্যদিকে, KeyEventResult.ignored ইভেন্টটিকে প্রচার চালিয়ে যেতে দেয়, যা বুদবুদ ফেজ ধারণার সাথে সারিবদ্ধ। এই প্রক্রিয়াগুলি বিকাশকারীদের কীবোর্ড ইনপুটগুলিকে সুনির্দিষ্টভাবে পরিচালনা করতে সক্ষম করে, ফ্লাটার অ্যাপ্লিকেশনগুলির মধ্যে উচ্চ-অগ্রাধিকার এবং নিম্ন-অগ্রাধিকার শর্টকাটগুলির মধ্যে পার্থক্য করার জন্য প্রয়োজনীয় নমনীয়তা প্রদান করে।

ফ্লটারে কীবোর্ড ইভেন্টগুলির জন্য ক্যাপচারিং এবং বুদবুদ করার পর্যায়গুলি অনুকরণ করা৷

গ্লোবাল কীবোর্ড শর্টকাট হ্যান্ডলিং অনুকরণ করতে ফ্লটারের ফোকাস উইজেট ব্যবহার করে

// Solution 1: High-priority shortcut using Focus widget
import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Focus(
        autofocus: true,
        onKey: (node, event) {
          if (event.isKeyPressed(LogicalKeyboardKey.escape)) {
            print('High-priority ESC pressed.');
            return KeyEventResult.handled;
          }
          return KeyEventResult.ignored;
        },
        child: HomeScreen(),
      ),
    );
  }
}
class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Flutter Global Shortcut')),
      body: Center(child: Text('Press ESC for high-priority action')),
    );
  }
}

ফোকাসস্কোপ এবং প্রচার ব্যবহার করে ফ্লটারে কম অগ্রাধিকারের শর্টকাট পরিচালনা করা

প্রচার এবং মূল ইভেন্ট পরিচালনা নিয়ন্ত্রণ করতে FocusScope ব্যবহার করে

// Solution 2: Low-priority shortcut using FocusScope
import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FocusScope(
        autofocus: true,
        onKey: (node, event) {
          if (event.isKeyPressed(LogicalKeyboardKey.enter)) {
            print('Low-priority ENTER pressed.');
            return KeyEventResult.ignored; 
          }
          return KeyEventResult.ignored;
        },
        child: LowPriorityScreen(),
      ),
    );
  }
}
class LowPriorityScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Low-priority Shortcut Example')),
      body: Center(child: Text('Press ENTER for low-priority action')),
    );
  }
}

ইউনিট টেস্ট ব্যবহার করে উইজেট জুড়ে ইভেন্ট হ্যান্ডলিং পরীক্ষা করা

উইজেট জুড়ে সঠিক শর্টকাট আচরণ নিশ্চিত করতে ডার্ট ইউনিট পরীক্ষা করে

// Solution 3: Unit tests for shortcut handling
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';
import 'package:my_app/main.dart';
void main() {
  testWidgets('High-priority shortcut test', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());
    final escEvent = RawKeyDownEvent(
      data: RawKeyEventDataAndroid(keyCode: 111),
      logicalKey: LogicalKeyboardKey.escape,
    );
    await tester.sendKeyEvent(escEvent);
    expect(find.text('High-priority ESC pressed.'), findsOneWidget);
  });
  testWidgets('Low-priority shortcut test', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());
    final enterEvent = RawKeyDownEvent(
      data: RawKeyEventDataAndroid(keyCode: 66),
      logicalKey: LogicalKeyboardKey.enter,
    );
    await tester.sendKeyEvent(enterEvent);
    expect(find.text('Low-priority ENTER pressed.'), findsOneWidget);
  });
}

কীবোর্ড ইভেন্ট হ্যান্ডলিং এবং ফ্লাটারে পারফরম্যান্স সম্প্রসারণ করা

ব্যবহারের বাইরে এবং , ফ্লাটার কিবোর্ড ইভেন্ট হ্যান্ডলিং উন্নত করতে অন্যান্য দরকারী প্রক্রিয়া প্রদান করে, যেমন এবং কর্ম. এই উইজেটগুলি উইজেট ট্রিকে বিশৃঙ্খল না করে কর্মের জন্য নির্দিষ্ট কী সমন্বয় ম্যাপিং সক্ষম করে। এটি বিশেষভাবে কার্যকর যখন অ্যাপ্লিকেশনটিকে বিভিন্ন উপাদান জুড়ে বিভিন্ন কীগুলির জন্য ভিন্নভাবে প্রতিক্রিয়া জানাতে হয়। এই উইজেটগুলি ব্যবহার করে শর্টকাটগুলিকে বিচ্ছিন্ন করা নিশ্চিত করে এবং কোডবেসের অন্যান্য অংশগুলিকে প্রভাবিত না করে সহজেই পরিচালনা বা আপডেট করা যায়।

গ্লোবাল শর্টকাটগুলি পরিচালনা করার সময় আরেকটি গুরুত্বপূর্ণ বিবেচনা হল কর্মক্ষমতা অপ্টিমাইজেশন নিশ্চিত করা। যখন একটি উইজেট গাছ বড় হয়, তখন বিশ্বব্যাপী প্রতিটি মূল ইভেন্ট পরিচালনা করলে কর্মক্ষমতার সামান্য অবনতি ঘটতে পারে। ফ্লাটার ডেভেলপাররা কোথায় রাখবেন তা সাবধানে সিদ্ধান্ত নিয়ে এটি প্রশমিত করতে পারেন এবং অপ্রয়োজনীয় ইভেন্ট পরিচালনা কমাতে উইজেট। উদাহরণস্বরূপ, পুরো গাছটিকে এককভাবে মোড়ানোর পরিবর্তে ফোকাস উইজেট, গুরুত্বপূর্ণ পয়েন্টগুলিতে ছোট, স্থানীয় ফোকাস উইজেট স্থাপন করা কার্যকারিতা এবং দক্ষতার মধ্যে সঠিক ভারসাম্য বজায় রাখতে পারে।

ফ্লাটারও সমর্থন করে নিম্ন-স্তরের কীবোর্ড ইনপুটের জন্য, আরও দানাদার নিয়ন্ত্রণ দেয়। এই উইজেটটি অপারেটিং সিস্টেমের কীবোর্ড ইভেন্টগুলিতে সরাসরি অ্যাক্সেস প্রদান করে, যা গেমিং বা অ্যাক্সেসিবিলিটি টুলের মতো অত্যন্ত কাস্টমাইজড আচরণের প্রয়োজন হয় এমন অ্যাপ তৈরি করার সময় উপযোগী হতে পারে। এই ধরনের ক্ষেত্রে, অ্যাকশনের সাথে RawKeyboardListener একত্রিত করা ডেভেলপারদের ইনপুট পরিচালনার উপর সর্বাধিক নিয়ন্ত্রণ নিশ্চিত করে স্ট্যান্ডার্ড এবং অ-মানক কীবোর্ড ইনপুট উভয়ের প্রতিক্রিয়া কাস্টমাইজ করতে দেয়।

  1. আপনি কিভাবে ব্যবহার করবেন এবং ফ্লাটারে?
  2. দ উইজেট ম্যাপ কী সমন্বয়গুলিকে ইন্টেন্টে, যা দ্বারা নির্বাহ করা হয় উইজেট এই সংমিশ্রণটি অ্যাপ জুড়ে কীবোর্ড শর্টকাটগুলির মডুলার পরিচালনার অনুমতি দেয়।
  3. এর উদ্দেশ্য কি ফ্লাটারে?
  4. দ উইজেট কাঁচা কী ইভেন্ট ক্যাপচার করে, আরও কাস্টমাইজড ইনপুট হ্যান্ডলিংয়ের জন্য কী প্রেস ইভেন্টগুলিতে নিম্ন-স্তরের অ্যাক্সেস প্রদান করে।
  5. একাধিক করতে পারেন উইজেট একই উইজেট গাছে বিদ্যমান?
  6. হ্যাঁ, একাধিক উইজেটগুলিকে কৌশলগতভাবে স্থাপন করা যেতে পারে তা নিশ্চিত করার জন্য যে অ্যাপের নির্দিষ্ট অংশগুলি মূল ইভেন্টগুলিতে প্রসঙ্গের উপর ভিত্তি করে ভিন্নভাবে সাড়া দেয়।
  7. না হলে কি হবে একটি উইজেট থেকে ফেরত দেওয়া হয়?
  8. যদি একটি উইজেট ফিরে আসে , ইভেন্টটি জাভাস্ক্রিপ্টে দেখানো বুদবুদ পর্বের অনুকরণ করে প্রচার অব্যাহত রাখে।
  9. কিভাবে করে শর্টকাট হ্যান্ডলিং উন্নত?
  10. যখন ক উইজেটটি অটোফোকাসে সেট করা আছে, অ্যাপটি শুরু হলে এটি অবিলম্বে ফোকাস লাভ করে, নিশ্চিত করে যে মূল ঘটনাগুলি শুরু থেকেই ক্যাপচার করা হয়েছে।
  11. ব্যবহার করে কি লাভ একটি নিয়মিত উপর উইজেট?
  12. একাধিক পরিচালনা করে উইজেট, একটি উইজেট গোষ্ঠীর মধ্যে ফোকাস কোথায় থাকে তার উপর আরও ভাল সংগঠন এবং নিয়ন্ত্রণের অনুমতি দেয়।
  13. ফ্লটার কি প্ল্যাটফর্ম-নির্দিষ্ট কী ইভেন্টগুলি পরিচালনা করতে পারে?
  14. হ্যাঁ, ব্যবহার করে বা , ফ্লটার প্ল্যাটফর্ম-নির্দিষ্ট কী ইভেন্ট ক্যাপচার করতে পারে, যেমন বিশেষ ফাংশন কী।
  15. কিভাবে কর্মক্ষমতা গ্লোবাল কীবোর্ড শর্টকাট হ্যান্ডলিং প্রভাবিত করে?
  16. অনেক বেশি গ্লোবাল শ্রোতা স্থাপন করা কর্মক্ষমতা কমিয়ে দিতে পারে। বিকাশকারীদের কৌশলগতভাবে স্থাপন করা উচিত এবং অপ্রয়োজনীয় ইভেন্ট পরিচালনা এড়াতে উইজেট।
  17. ফ্লটারে কীবোর্ড ইভেন্টগুলি পরীক্ষা করার জন্য সেরা অনুশীলনগুলি কী কী?
  18. ব্যবহার করুন ইউনিট পরীক্ষা তৈরি করতে যা মূল ঘটনাগুলি অনুকরণ করে। এটি নিশ্চিত করে যে অ্যাপ্লিকেশনটির ইভেন্ট হ্যান্ডলিং লজিক বিভিন্ন পরিস্থিতিতে প্রত্যাশিত হিসাবে কাজ করে।
  19. আমি কি একটি মূল ইভেন্ট পরিচালনা করার পরে ইভেন্টের প্রচার রোধ করতে পারি?
  20. হ্যাঁ, ফিরে আসছে থেকে হ্যান্ডলার ইভেন্টের আরও বিস্তার রোধ করে।

দ উইজেট হল বিশ্বব্যাপী উচ্চ-অগ্রাধিকারমূলক ইভেন্টগুলি ক্যাপচার করার একটি দুর্দান্ত উপায়, এটি নিশ্চিত করে যে Escape কী-এর মতো শর্টকাটগুলি শীর্ষ স্তরে পরিচালনা করা হয়৷ এটি বিশেষত এমন অ্যাপ্লিকেশনগুলির জন্য উপযোগী যেগুলি দ্রুত-অ্যাক্সেস কমান্ডের উপর নির্ভর করে বা অন্য কোনও উইজেট তাদের প্রতিক্রিয়া করার আগে নির্দিষ্ট কী ইনপুটগুলিকে আটকাতে হয়।

অন্যদিকে, কম-অগ্রাধিকার শর্টকাটগুলির জন্য, ব্যবহার করে অথবা ইভেন্টগুলিকে প্রচার করার অনুমতি দেওয়া জাভাস্ক্রিপ্টের বুদবুদ ফেজ অনুকরণ করে। এটি নিশ্চিত করে যে কীবোর্ড ইভেন্টগুলি শুধুমাত্র তখনই প্রক্রিয়া করা হয় যদি অন্য কোনও উইজেট প্রথমে সেগুলি গ্রহণ না করে। যদিও Flutter ঘটনা পর্যায়গুলিকে সরাসরি সমর্থন করে না, এই প্রক্রিয়াগুলি অনুরূপ আচরণের জন্য ব্যবহারিক বিকল্প প্রস্তাব করে।

  1. বিস্তারিত ডকুমেন্টেশন উপর এবং অফিসিয়াল ফ্লটার ফ্রেমওয়ার্ক থেকে: ফ্লাটার API ডকুমেন্টেশন
  2. Flutter ব্যবহার করে কাঁচা কী ইভেন্ট পরিচালনার অন্তর্দৃষ্টি : ফ্লটার কুকবুক
  3. জাভাস্ক্রিপ্টের ইভেন্ট পর্যায় এবং ফ্লটারের ইভেন্ট পরিচালনার মধ্যে তুলনা: MDN ওয়েব ডক্স
  4. ফ্লটার টেস্টিং সেরা অনুশীলন, সহ ইনপুট ইভেন্ট অনুকরণের জন্য: ফ্লটার টেস্টিং ডকুমেন্টেশন
  5. জাভাস্ক্রিপ্টের ইভেন্ট প্রচার মডেল উদাহরণ সহ ব্যাখ্যা করা হয়েছে: JavaScript.info