blob: 612bd110ba48aafcf7f104790ed07ba365753b34 [file] [log] [blame]
// 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();