کیا پھڑپھڑانے کے لیے جاوا اسکرپٹ کی طرح کی بورڈ ایونٹس کو ریکارڈ کرنا اور روکنا ممکن ہے؟

کیا پھڑپھڑانے کے لیے جاوا اسکرپٹ کی طرح کی بورڈ ایونٹس کو ریکارڈ کرنا اور روکنا ممکن ہے؟
کیا پھڑپھڑانے کے لیے جاوا اسکرپٹ کی طرح کی بورڈ ایونٹس کو ریکارڈ کرنا اور روکنا ممکن ہے؟

فلٹر اور جاوا اسکرپٹ میں عالمی شارٹ کٹ مینجمنٹ کو سمجھنا

کی بورڈ شارٹ کٹس کمانڈز تک فوری رسائی فراہم کرکے ایپلی کیشنز کے استعمال کو بہتر بنانے میں اہم کردار ادا کرتے ہیں۔ تاہم، ان کا نفاذ ہر پلیٹ فارم پر مختلف ہوتا ہے، جاوا اسکرپٹ جیسے فریم ورک کے ساتھ ایونٹ ہینڈلنگ کے لیے "کیپچر" اور "بلبل" ​​جیسے الگ الگ مراحل پیش کرتے ہیں۔ یہ مراحل ڈویلپرز کو عالمی شارٹ کٹس کی ترجیح کو مؤثر طریقے سے منظم کرنے کی اجازت دیتے ہیں۔

جاوا اسکرپٹ میں، "کیپچرنگ" مرحلہ یقینی بناتا ہے کہ اعلی ترجیحی شارٹ کٹس کو پہلے ہینڈل کیا جائے، جب کہ "بلبلنگ" مرحلہ یقینی بناتا ہے کہ صرف غیر ہینڈل شدہ واقعات عالمی شارٹ کٹس تک پہنچیں۔ یہ دوہرے مرحلے والا ایونٹ سسٹم لچک پیش کرتا ہے، جس سے سیاق و سباق کی بنیاد پر دوسروں کو موخر کرتے ہوئے بعض ان پٹس کو ترجیح دی جاتی ہے۔

فلٹر ڈویلپرز کے لیے، اسی طرح کا کنٹرول حاصل کرنا مشکل ہو سکتا ہے کیونکہ فلٹر جاوا اسکرپٹ جیسے "کیپچرنگ" یا "بلبلنگ" کے مراحل کو مقامی طور پر سپورٹ نہیں کرتا ہے۔ اس بارے میں سوالات اٹھتے ہیں کہ آیا Flutter's فوکس ویجیٹ ان طرز عمل کی تقلید کر سکتا ہے اور ویجیٹ ٹری کے اندر اعلی ترجیحی اور کم ترجیح والی عالمی شارٹ کٹ کیز کے درمیان فرق کیسے کر سکتا ہے۔

یہ مضمون اس بات کی کھوج کرتا ہے کہ آیا اور کیسے فلٹر ویجٹ جیسے وجیٹس کا استعمال کرتے ہوئے ان ایونٹ کے مراحل کو نقل کر سکتا ہے۔ فوکس. یہ کم ترجیحی شارٹ کٹس کو لاگو کرنے کے ممکنہ طریقوں پر بھی تبادلہ خیال کرتا ہے، اس بات کو یقینی بناتے ہوئے کہ کی بورڈ ایونٹس صرف اس وقت متحرک ہوں جب کوئی دوسرا ویجیٹ انہیں استعمال نہ کرے۔ آخر تک، آپ سمجھ جائیں گے کہ فلٹر میں کی بورڈ ایونٹس کو زیادہ مؤثر طریقے سے کیسے منظم کیا جائے۔

حکم استعمال کی مثال
Focus یہ ویجیٹ پورے ویجیٹ درخت میں کی بورڈ کے واقعات کو کیپچر کرتا ہے۔ روٹ ویجیٹ کو فوکس میں لپیٹ کر، آپ عالمی کلیدی واقعات کو دوسرے ویجیٹس کے سنبھالنے سے پہلے روک سکتے ہیں۔
LogicalKeyboardKey.escape کی بورڈ پر Escape کلید کی نمائندگی کرتا ہے۔ یہ پتہ لگانے کے لیے استعمال کیا جاتا ہے جب صارف دباتا ہے۔ ای ایس سی کلید، فلٹر میں اعلی ترجیحی شارٹ کٹس کو فعال کرنا۔
KeyEventResult.handled یہ قدر ایونٹ کے مزید پھیلاؤ کو روکتی ہے، اس بات کی نشاندہی کرتی ہے کہ موجودہ ویجیٹ نے کی بورڈ ان پٹ کو ہینڈل کیا ہے، جیسا کہ JavaScript میں واقعات کیپچر کرنے کے مترادف ہے۔
FocusScope ایک ویجیٹ جو ویجٹ کے گروپ کے اندر فوکس کا انتظام کرتا ہے۔ یہ اس بات پر زیادہ درست کنٹرول کو قابل بناتا ہے کہ ویجیٹ کے ذیلی درخت کے اندر واقعات کو کہاں پروپیگنڈ کیا جاتا ہے۔
RawKeyDownEvent نچلی سطح کے کلیدی پریس ایونٹس کو کیپچر کرنے کے لیے استعمال ہونے والی ایک خصوصی ایونٹ کلاس۔ یہ یونٹ ٹیسٹ لکھنے کے لیے ضروری ہے جو کی بورڈ ان پٹ کی نقل کرتے ہیں۔
LogicalKeyboardKey.enter کی بورڈ ان پٹ ایونٹس میں Enter کلید کی شناخت کے لیے استعمال کیا جاتا ہے۔ کم ترجیحی شارٹ کٹس میں، یہ چیک کرتا ہے کہ آیا داخل کریں۔ کلید کسی بھی عالمی کارروائی کو متحرک کرتی ہے۔
KeyEventResult.ignored یہ نتیجہ ایونٹ کو جاوا اسکرپٹ میں نظر آنے والے "بلبلنگ" مرحلے کی نقل کرتے ہوئے، دوسرے ویجٹس پر پروپیگنڈہ جاری رکھنے کی اجازت دیتا ہے۔
sendKeyEvent flutter_test پیکیج سے ایک فنکشن، جو یونٹ ٹیسٹ میں اہم واقعات کی نقل کرنے کے لیے استعمال ہوتا ہے۔ اس سے اس بات کی توثیق کرنے میں مدد ملتی ہے کہ مختلف ویجٹ کلیدی ان پٹ کو کس طرح جواب دیتے ہیں۔
autofocus ایک ایسی پراپرٹی جو فوکس یا فوکس اسکوپ ویجیٹ کو یقینی بناتی ہے جب ویجیٹ ٹری بن جاتا ہے تو فوری توجہ حاصل کر لیتی ہے۔ یہ عالمی شارٹ کٹ مینجمنٹ کے لیے اہم ہے۔

فوکس وجیٹس کا استعمال کرتے ہوئے پھڑپھڑانے میں کی بورڈ ایونٹ کے مراحل کو نافذ کرنا

پہلے حل میں، ہم نے فلٹر کا استعمال کیا۔ فوکس ویجیٹ ایونٹ ہینڈلنگ کے "کیپچرنگ" مرحلے کی تقلید کے لیے، جو کہ اعلیٰ ترجیحی عالمی شارٹ کٹس کو نافذ کرنے کے لیے اہم ہے۔ پورے ویجیٹ ٹری کو فوکس ویجیٹ کے ساتھ لپیٹ کر اور آٹو فوکس کو فعال کر کے، ہم اس بات کو یقینی بناتے ہیں کہ کی بورڈ ایونٹس کو جڑ میں پکڑ لیا جائے اس سے پہلے کہ کوئی بچہ ویجیٹ انہیں سنبھال سکے۔ یہ نقطہ نظر کلیدوں کو روکنے کے لئے موثر ہے۔ ای ایس سی، جو واقعہ کو فوری طور پر سنبھالتا ہے اور ویجیٹ ٹری کے اندر مزید پھیلاؤ کو روکتا ہے۔ اس کا کلیدی نتیجہ جاوا اسکرپٹ کے کیپچر مرحلے کی طرح عالمی کی بورڈ سننے والے کو حاصل کرنے کی صلاحیت ہے۔

دوسرا حل ملازمت کرتا ہے۔ فوکس سکوپ جاوا اسکرپٹ میں "بلبلنگ" مرحلے کی نقل کرتے ہوئے، کم ترجیحی عالمی شارٹ کٹس کا انتظام کرنے کے لیے ویجیٹ۔ یہاں فرق یہ ہے کہ FocusScope واقعات کو ویجیٹ کے درخت کے نیچے پھیلانے کی اجازت دیتا ہے، ہر ویجیٹ کے پاس ایونٹ کا جواب دینے کا موقع ہوتا ہے۔ اگر کوئی ویجیٹ ایونٹ کو استعمال نہیں کرتا ہے، تو یہ فوکس اسکوپ پر واپس بلبلا جاتا ہے، عالمی شارٹ کٹ کو متحرک کرتا ہے۔ مثال کے طور پر، ENTER کلید کو دبانے سے شارٹ کٹ صرف اس صورت میں چلتا ہے جب کسی دوسرے ویجیٹ نے کلیدی ایونٹ کا استعمال نہ کیا ہو۔ یہ نقطہ نظر ایسے منظرناموں میں مفید ہے جہاں عالمی شارٹ کٹس کو صرف اس وقت متحرک کیا جانا چاہیے جب مقامی ان پٹ غیر فعال ہوں۔

ہمارا تیسرا حل استعمال کرتے ہوئے یونٹ ٹیسٹنگ متعارف کراتا ہے۔ flutter_test اعلی ترجیحی اور کم ترجیحی کی بورڈ ایونٹ ہینڈلنگ دونوں کی توثیق کرنے کے لیے پیکیج۔ ہم اہم واقعات کی نقل کرتے ہیں، جیسے کہ ESC اور ENTER پریس، اس بات کو یقینی بنانے کے لیے کہ درست ویجیٹ انہیں توقع کے مطابق ہینڈل کرتا ہے۔ یہ نہ صرف فعالیت کی تصدیق کرتا ہے بلکہ یہ بھی یقینی بناتا ہے کہ ویجیٹ کا درجہ بندی مختلف حالات میں مناسب طریقے سے جواب دیتا ہے۔ یونٹ ٹیسٹ متنوع ماحول میں ایونٹ مینجمنٹ منطق کو برقرار رکھنے اور ویجیٹ کے درخت کے تبدیل ہونے پر رجعت کو روکنے کے لیے ضروری ہیں۔

کوڈ کی مثالیں بھی خصوصی کمانڈز کا استعمال کرتی ہیں۔ sendKeyEvent کلیدی آدانوں کی تقلید کے لیے اور کلیدی ایونٹ کا نتیجہ ایونٹ کے بہاؤ کو منظم کرنے کے لئے. استعمال کرنا KeyEventResult.handled اس بات کو یقینی بناتا ہے کہ ضرورت پڑنے پر کوئی واقعہ پھیلنا بند کر دے، بالکل جاوا اسکرپٹ کے کیپچر فیز کی طرح۔ دوسری طرف، 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);
  });
}

پھڑپھڑاہٹ میں کی بورڈ ایونٹ ہینڈلنگ اور کارکردگی کو بڑھانا

استعمال کرنے سے آگے فوکس اور فوکس سکوپ, Flutter کی بورڈ ایونٹ ہینڈلنگ کو بڑھانے کے لیے دیگر مفید میکانزم فراہم کرتا ہے، جیسے شارٹ کٹس اور اعمال. یہ ویجٹ ویجیٹ کے درخت کو بے ترتیبی کے بغیر اعمال کے لیے مخصوص کلیدی مجموعوں کی نقشہ سازی کے قابل بناتے ہیں۔ یہ خاص طور پر مفید ہے جب ایپلیکیشن کو مختلف اجزاء میں مختلف کلیدوں کا مختلف جواب دینے کی ضرورت ہو۔ ان ویجٹس کا استعمال یقینی بناتا ہے کہ شارٹ کٹ الگ تھلگ ہیں اور کوڈ بیس کے دیگر حصوں کو متاثر کیے بغیر آسانی سے منظم یا اپ ڈیٹ کیا جا سکتا ہے۔

عالمی شارٹ کٹس کو سنبھالتے وقت ایک اور اہم غور کارکردگی کی اصلاح کو یقینی بنانا ہے۔ جب ویجیٹ کا درخت بڑا ہوتا ہے، تو عالمی سطح پر ہر اہم ایونٹ کو سنبھالنا کارکردگی میں معمولی کمی کا سبب بن سکتا ہے۔ پھڑپھڑانے والے ڈویلپر احتیاط سے یہ فیصلہ کر کے اسے کم کر سکتے ہیں کہ کہاں رکھنا ہے۔ فوکس اور شارٹ کٹس غیر ضروری ایونٹ ہینڈلنگ کو کم کرنے کے لیے ویجٹ۔ مثال کے طور پر، پورے درخت کو ایک سنگل میں لپیٹنے کے بجائے فوکس ویجیٹ، چھوٹے، مقامی فوکس ویجٹ کو اہم مقامات پر رکھنا فعالیت اور کارکردگی کے درمیان صحیح توازن قائم کر سکتا ہے۔

پھڑپھڑاہٹ بھی سپورٹ کرتی ہے۔ را کی بورڈ سننے والا نچلے درجے کے کی بورڈ ان پٹ کے لیے، زیادہ دانے دار کنٹرول فراہم کرتا ہے۔ یہ ویجیٹ آپریٹنگ سسٹم کے کی بورڈ ایونٹس تک براہ راست رسائی فراہم کرتا ہے، جو ایسے ایپس کی تعمیر کے وقت کارآمد ثابت ہو سکتا ہے جن کے لیے انتہائی حسب ضرورت رویے کی ضرورت ہوتی ہے، جیسے کہ گیمنگ یا ایکسیسبیلٹی ٹولز۔ ایسی صورتوں میں، RawKeyboardListener کو ایکشن کے ساتھ جوڑنے سے ڈویلپرز کو معیاری اور غیر معیاری دونوں طرح کے کی بورڈ ان پٹ کے جوابات کو حسب ضرورت بنانے کی اجازت دیتا ہے، جس سے ان پٹ مینجمنٹ پر زیادہ سے زیادہ کنٹرول کو یقینی بنایا جا سکتا ہے۔

فلٹر میں کی بورڈ ایونٹ ہینڈلنگ کے بارے میں اکثر پوچھے گئے سوالات

  1. آپ کس طرح استعمال کرتے ہیں Shortcuts اور Actions پھڑپھڑاہٹ میں؟
  2. دی Shortcuts ویجیٹ کلیدی امتزاج کو ارادوں کے لیے نقشہ بناتا ہے، جن پر عمل درآمد ہوتا ہے۔ Actions ویجیٹ یہ مجموعہ پورے ایپ میں کی بورڈ شارٹ کٹس کے ماڈیولر ہینڈلنگ کی اجازت دیتا ہے۔
  3. کا مقصد کیا ہے RawKeyboardListener پھڑپھڑاہٹ میں؟
  4. دی RawKeyboardListener ویجیٹ خام کلیدی واقعات کو پکڑتا ہے، زیادہ حسب ضرورت ان پٹ ہینڈلنگ کے لیے اہم پریس ایونٹس تک کم سطح تک رسائی فراہم کرتا ہے۔
  5. متعدد کر سکتے ہیں۔ Focus ویجٹ ایک ہی ویجیٹ درخت میں موجود ہیں؟
  6. ہاں، متعدد Focus وجیٹس کو حکمت عملی کے ساتھ رکھا جا سکتا ہے تاکہ یہ یقینی بنایا جا سکے کہ ایپ کے کچھ حصے سیاق و سباق کی بنیاد پر اہم واقعات کا مختلف طریقے سے جواب دیتے ہیں۔
  7. اگر نہیں تو کیا ہوگا؟ KeyEventResult.handled ایک ویجیٹ سے واپس کیا جاتا ہے؟
  8. اگر کوئی ویجیٹ لوٹتا ہے۔ KeyEventResult.ignored, واقعہ جاوا اسکرپٹ میں دیکھے گئے بلبلنگ مرحلے کی نقل کرتے ہوئے پروپیگنڈہ جاری رکھے ہوئے ہے۔
  9. کیسے کرتا ہے autofocus شارٹ کٹ ہینڈلنگ کو بہتر بنائیں؟
  10. جب ایک Focus ویجیٹ کو آٹو فوکس پر سیٹ کیا گیا ہے، جب ایپ شروع ہوتی ہے تو یہ فوری توجہ حاصل کرتا ہے، اس بات کو یقینی بناتا ہے کہ اہم واقعات شروع سے ہی کیپچر کیے گئے ہیں۔
  11. استعمال کرنے کا کیا فائدہ ہے۔ FocusScope ایک باقاعدہ سے زیادہ Focus ویجیٹ
  12. FocusScope متعدد کا انتظام کرتا ہے۔ Focus ویجیٹس، بہتر تنظیم اور کنٹرول کی اجازت دیتے ہیں جہاں ویجیٹ گروپ میں فوکس رہتا ہے۔
  13. کیا فلٹر پلیٹ فارم سے متعلق اہم واقعات کو سنبھال سکتا ہے؟
  14. جی ہاں، استعمال کرتے ہوئے RawKeyDownEvent یا RawKeyboardListener، پھڑپھڑانا پلیٹ فارم کے ساتھ مخصوص کلیدی واقعات کو پکڑ سکتا ہے، جیسے خصوصی فنکشن کیز۔
  15. کارکردگی عالمی کی بورڈ شارٹ کٹ ہینڈلنگ کو کیسے متاثر کرتی ہے؟
  16. بہت زیادہ عالمی سامعین رکھنے سے کارکردگی سست ہو سکتی ہے۔ ڈویلپرز کو حکمت عملی کے ساتھ جگہ دینا چاہئے۔ Focus اور Shortcuts غیر ضروری ایونٹ ہینڈلنگ سے بچنے کے لیے ویجٹ۔
  17. Flutter میں کی بورڈ ایونٹس کو جانچنے کے بہترین طریقے کیا ہیں؟
  18. استعمال کریں۔ flutter_test یونٹ ٹیسٹ بنانے کے لیے جو اہم واقعات کی نقالی کرتے ہیں۔ یہ اس بات کو یقینی بناتا ہے کہ ایپلی کیشن کی ایونٹ ہینڈلنگ منطق مختلف منظرناموں میں توقع کے مطابق کام کرتی ہے۔
  19. کیا میں ایک اہم واقعہ کو سنبھالنے کے بعد واقعہ کے پھیلاؤ کو روک سکتا ہوں؟
  20. جی ہاں، واپسی KeyEventResult.handled سے onKey ہینڈلر ایونٹ کے مزید پھیلاؤ کو روکتا ہے۔

فلٹر کی بورڈ ایونٹ ہینڈلنگ پر کلیدی ٹیک ویز

دی فوکس ویجیٹ عالمی سطح پر اعلیٰ ترجیحی واقعات کو کیپچر کرنے کا ایک بہترین طریقہ ہے، اس بات کو یقینی بناتا ہے کہ Escape کلید جیسے شارٹ کٹس کو اوپر کی سطح پر ہینڈل کیا جائے۔ یہ خاص طور پر ان ایپلی کیشنز کے لیے مفید ہے جو فوری رسائی کے حکموں پر انحصار کرتی ہیں یا کسی دوسرے ویجٹ پر ردعمل ظاہر کرنے سے پہلے مخصوص کلیدی ان پٹس کو روکنے کی ضرورت ہوتی ہے۔

دوسری طرف، کم ترجیحی شارٹ کٹس کے لیے، استعمال کرنا فوکس سکوپ یا واقعات کو پھیلانے کی اجازت دینا JavaScript کے بلبلنگ مرحلے کی نقل کرتا ہے۔ یہ اس بات کو یقینی بناتا ہے کہ کی بورڈ ایونٹس پر صرف اس صورت میں کارروائی ہوتی ہے جب کوئی دوسرا ویجیٹ انہیں پہلے استعمال نہ کرے۔ اگرچہ پھڑپھڑ براہ راست واقعات کے مراحل کی حمایت نہیں کرتی ہے، لیکن یہ میکانزم اسی طرح کے رویے کے لیے عملی متبادل پیش کرتے ہیں۔

فلٹر کی بورڈ ایونٹ مینجمنٹ کے ذرائع اور حوالہ جات
  1. پر تفصیلی دستاویزات فوکس اور فوکس سکوپ سرکاری فلٹر فریم ورک سے: فلٹر API دستاویزات
  2. استعمال کرتے ہوئے پھڑپھڑانے میں خام اہم واقعات سے نمٹنے کے بارے میں بصیرت را کی بورڈ سننے والا: فلٹر کک بک
  3. جاوا اسکرپٹ کے ایونٹ کے مراحل اور فلٹر کے ایونٹ ہینڈلنگ کے درمیان موازنہ: MDN ویب دستاویزات
  4. پھڑپھڑانے کی جانچ کے بہترین طریقے، بشمول flutter_test ان پٹ واقعات کی تقلید کے لیے: پھڑپھڑانے کی جانچ کی دستاویزات
  5. جاوا اسکرپٹ کے ایونٹ پروپیگیشن ماڈل کی مثالوں کے ساتھ وضاحت کی گئی: JavaScript.info