@@ -176,6 +176,64 @@ extension _BfInteraction on FlutterMcpServer {
176176 key: args['key' ], text: args['text' ], timeout: timeout);
177177 return {"gone" : gone};
178178
179+ case 'press_key' :
180+ final key = args['key' ] as String ? ?? '' ;
181+ if (key.isEmpty) {
182+ return {"success" : false , "error" : "Missing 'key' argument" };
183+ }
184+ if (client is BridgeDriver ) {
185+ await client.callMethod ('press_key' , {'key' : key});
186+ return {"success" : true , "message" : "Key pressed: $key " };
187+ }
188+ return {"success" : false , "error" : "press_key not supported on this platform. Use CDP mode or a bridge SDK." };
189+
190+ case 'scroll' :
191+ final direction = args['direction' ] as String ? ?? 'down' ;
192+ final amount = (args['amount' ] as num ? )? .toDouble () ?? 300 ;
193+ if (client is BridgeDriver ) {
194+ await client.callMethod ('scroll' , {
195+ 'direction' : direction,
196+ 'amount' : amount,
197+ });
198+ return {"success" : true , "message" : "Scrolled $direction by $amount " };
199+ }
200+ // Flutter: use scrollTo with key/text if provided
201+ if (args['key' ] != null || args['text' ] != null ) {
202+ final fc = _asFlutterClient (client! , 'scroll' );
203+ await fc.scrollTo (key: args['key' ] as String ? , text: args['text' ] as String ? );
204+ return {"success" : true , "message" : "Scrolled to element" };
205+ }
206+ return {"success" : false , "error" : "scroll on Flutter requires 'key' or 'text' argument" };
207+
208+ case 'find_element' :
209+ final text = args['text' ] as String ? ;
210+ final key = args['key' ] as String ? ;
211+ if (text == null && key == null ) {
212+ return {"success" : false , "error" : "Provide 'text' or 'key'" };
213+ }
214+ if (client is BridgeDriver ) {
215+ final result = await client.callMethod ('find_element' , {
216+ if (text != null ) 'text' : text,
217+ if (key != null ) 'key' : key,
218+ });
219+ return result;
220+ }
221+ final fc2 = _asFlutterClient (client! , 'find_element' );
222+ final elements = await fc2.findByType (text ?? key ?? '' );
223+ return {"found" : elements.isNotEmpty, "count" : elements.length};
224+
225+ case 'get_text' :
226+ if (client is BridgeDriver ) {
227+ final result = await client.callMethod ('get_text' , {
228+ if (args['ref' ] != null ) 'ref' : args['ref' ],
229+ if (args['key' ] != null ) 'key' : args['key' ],
230+ });
231+ return result;
232+ }
233+ final fc3 = _asFlutterClient (client! , 'get_text' );
234+ final textContent = await fc3.getTextContent ();
235+ return {"text" : textContent};
236+
179237 // Screenshot
180238 default :
181239 return null ;
0 commit comments