# πŸ“Š БистСма отобраТСния событий Flutter WebView Bridge ## βœ… Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ΠΎΠ±Π° прилоТСния ### 🎯 ЦСль ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всСх ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… payload'ΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для дСмонстрации bridge ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. --- ## πŸ“± Host App (Flutter Mobile) ### πŸ”§ Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: #### 1. **Бписок событий** ```dart final List> _events = []; static const int _maxEvents = 10; ``` #### 2. **Callback для входящих payload'ΠΎΠ²** ```dart _bridgeController.onPayloadReceived = (payload) { _addEvent('Received', payload.runtimeType.toString(), payload.toString()); }; ``` #### 3. **ΠœΠ΅Ρ‚ΠΎΠ΄ добавлСния событий** ```dart void _addEvent(String type, String payloadType, String details) { setState(() { _events.insert(0, { 'timestamp': DateTime.now(), 'type': type, 'payloadType': payloadType, 'details': details, }); if (_events.length > _maxEvents) { _events.removeRange(_maxEvents, _events.length); } }); } ``` #### 4. **UI панСль событий** - ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π°Ρ панСль высотой 120px - ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΈΠΏΠ° ΠΈ названия payload - ЦвСтовая индикация: Π·Π΅Π»Π΅Π½Ρ‹ΠΉ (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ) / синий (ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ) - Кнопка "Clear" для очистки списка --- ## 🌐 Web App (Flutter Web) ### πŸ”§ Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: #### 1. **Бписок событий** ```dart final List> _events = []; static const int _maxEvents = 10; ``` #### 2. **Callback для входящих payload'ΠΎΠ²** ```dart _webBridge.onPayloadReceived = (payload) { _addEvent('Received', payload.runtimeType.toString(), payload.toString()); }; ``` #### 3. **ΠœΠ΅Ρ‚ΠΎΠ΄ добавлСния событий** ```dart void _addEvent(String type, String payloadType, String details) { setState(() { _events.insert(0, { 'timestamp': DateTime.now(), 'type': type, 'payloadType': payloadType, 'details': details, }); if (_events.length > _maxEvents) { _events.removeRange(_maxEvents, _events.length); } }); } ``` #### 4. **UI панСль событий** - Card с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ "Recent Events" - Бписок высотой 100px - ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΈΠΏΠ° ΠΈ названия payload - ЦвСтовая индикация: Π·Π΅Π»Π΅Π½Ρ‹ΠΉ (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ) / синий (ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ) - Кнопка "Clear" для очистки списка --- ## πŸ”„ ΠžΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Bridge ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ### πŸ“± BridgeWebViewController (Host) ```dart // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ callback Function(BridgePayload)? onPayloadReceived; // ОбновлСн ΠΌΠ΅Ρ‚ΠΎΠ΄ handleWebMessage onPayloadReceived?.call(payload); ``` ### 🌐 WebBridge (Web) ```dart // Π”ΠΎΠ±Π°Π²Π»Π΅Π½ callback Function(BridgePayload)? onPayloadReceived; // ОбновлСн ΠΌΠ΅Ρ‚ΠΎΠ΄ _handleHostMessage onPayloadReceived?.call(payload); ``` --- ## 🎯 ДСмонстрируСмыС возмоТности ### βœ… ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ события (Sent): - **Host β†’ Web**: PingPayload, ShowNativeDialogPayload, SecretAdminCommandPayload - **Web β†’ Host**: PingPayload, GetUserInfoPayload, LoginRequestPayload, SubmitQuizPayload ### βœ… ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ события (Received): - **Host ← Web**: ВсС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΎΡ‚ web прилоТСния - **Web ← Host**: ВсС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΎΡ‚ host прилоТСния ### βœ… Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹: - 🟒 **Π—Π΅Π»Π΅Π½Ρ‹ΠΉ**: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ payload'Ρ‹ (ΠΈΠΊΠΎΠ½ΠΊΠ° download) - πŸ”΅ **Π‘ΠΈΠ½ΠΈΠΉ**: ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ payload'Ρ‹ (ΠΈΠΊΠΎΠ½ΠΊΠ° upload) - ⏰ **ВрСмя**: Π’ΠΎΡ‡Π½ΠΎΠ΅ врСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ/получСния - πŸ“ **Π’ΠΈΠΏ**: НазваниС класса payload'Π° --- ## πŸš€ Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ### 1. **ЗапуститС ΠΎΠ±Π° прилоТСния** - Host app Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ - Web app Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ ### 2. **ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ payload'Ρ‹** - НаТмитС ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² host app (Send Ping, Show Dialog, Admin Command) - НаТмитС ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² web app (Send Ping, Request User Info, Login, Quiz) ### 3. **ΠΠ°Π±Π»ΡŽΠ΄Π°ΠΉΡ‚Π΅ события** - Π’ host app: панСль событий ΠΏΠΎΠ΄ панСлью управлСния - Π’ web app: ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° событий ΠΏΠ΅Ρ€Π΅Π΄ footer ### 4. **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡŽ** - Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ события ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΠΎΠ±ΠΎΠΈΡ… прилоТСниях - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² payload'ΠΎΠ² - Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² коррСктности Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ --- ## πŸŽ‰ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ **Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ping'ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ payload'Ρ‹ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ!** - βœ… ΠŸΠΎΠ»Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΈΠ΄ΠΈΠΌ - βœ… Π’ΠΈΠΏΡ‹ payload'ΠΎΠ² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ - βœ… ВрСмя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ/получСния фиксируСтся - βœ… Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ payload'ΠΎΠ² дСмонстрируСтся - βœ… Bridge систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ