// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import 'package:flutter_driver/driver_extension.dart'; typedef DriverHandler = Future<String> Function(); /// Wraps a flutter driver [DataHandler] with one that waits until a delegate is set. /// /// This allows the driver test to call [FlutterDriver.requestData] before the handler was /// set by the app in which case the requestData call will only complete once the app is ready /// for it. class FutureDataHandler { final Map<String, Completer<DriverHandler>> _handlers = <String, Completer<DriverHandler>>{}; /// Registers a lazy handler that will be invoked on the next message from the driver. Completer<DriverHandler> registerHandler(String key) { _handlers[key] = Completer<DriverHandler>(); return _handlers[key]; } Future<String> handleMessage(String message) async { if (_handlers[message] == null) { return 'Unsupported driver message: $message.\n' 'Supported messages are: ${_handlers.keys}.'; } final DriverHandler handler = await _handlers[message].future; return handler(); } } FutureDataHandler driverDataHandler = FutureDataHandler();