


# AsyncBinding&lt;T> class









<p>Listens for messages and dispatches them to an implementation of <code>T</code>.</p>




## Constructors

[AsyncBinding](../package-fidl_fidl/AsyncBinding/AsyncBinding.md) (String $interfaceName)

Creates a binding object in an unbound state.   


## Properties

##### [$interfaceName](../package-fidl_fidl/AsyncBinding/$interfaceName.md) &#8594; String



The name of the interface <code>T</code> as a string.  
_<span class="feature">final</span>_



##### [hashCode](../package-fidl_fidl/AsyncBinding/hashCode.md) &#8594; int



The hash code for this object.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [impl](../package-fidl_fidl/AsyncBinding/impl.md) &#8594; T



The implementation of <code>T</code> bound using this object.  
_<span class="feature">read-only</span>_



##### [isBound](../package-fidl_fidl/AsyncBinding/isBound.md) &#8594; bool



Is this interface bound?  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [isClosed](../package-fidl_fidl/AsyncBinding/isClosed.md) &#8594; bool



Is this interface closed?  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [isUnbound](../package-fidl_fidl/AsyncBinding/isUnbound.md) &#8594; bool



Is this interface unbound?  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [runtimeType](../package-fidl_fidl/AsyncBinding/runtimeType.md) &#8594; Type



A representation of the runtime type of the object.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [state](../package-fidl_fidl/AsyncBinding/state.md) &#8596; [InterfaceState](../package-fidl_fidl/InterfaceState.md)



Gets the current state.  
_<span class="feature">read / write</span><span class="feature">inherited</span>_



##### [stateChanges](../package-fidl_fidl/AsyncBinding/stateChanges.md) &#8594; Stream&lt;[InterfaceState](../package-fidl_fidl/InterfaceState.md)>



A stream of state changes.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [whenBound](../package-fidl_fidl/AsyncBinding/whenBound.md) &#8594; Future&lt;void>



A future that completes when the interface becomes bound.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [whenClosed](../package-fidl_fidl/AsyncBinding/whenClosed.md) &#8594; Future&lt;void>



A future that completes when the interface is closed.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_





## Methods

##### [bind](../package-fidl_fidl/AsyncBinding/bind.md)(T impl, [InterfaceRequest](../package-fidl_fidl/InterfaceRequest-class.md) interfaceRequest) void



Binds the given implementation to the given interface request.  




##### [close](../package-fidl_fidl/AsyncBinding/close.md)([int statusCode]) void



Close the bound channel.  




##### [handleMessage](../package-fidl_fidl/AsyncBinding/handleMessage.md)([IncomingMessage](../package-fidl_fidl/IncomingMessage-class.md) message, [OutgoingMessageSink](../package-fidl_fidl/OutgoingMessageSink.md) respond) void



Decodes the given message and dispatches the decoded message to <a href="../package-fidl_fidl/AsyncBinding/impl.md">impl</a>.  




##### [noSuchMethod](../package-fidl_fidl/AsyncBinding/noSuchMethod.md)(Invocation invocation) dynamic



Invoked when a non-existent method or property is accessed.  
_<span class="feature">inherited</span>_



##### [sendMessage](../package-fidl_fidl/AsyncBinding/sendMessage.md)([OutgoingMessage](../package-fidl_fidl/OutgoingMessage-class.md) response) void



Sends the given message over the bound channel.  




##### [toString](../package-fidl_fidl/AsyncBinding/toString.md)() String



A string representation of this object.  
_<span class="feature">inherited</span>_



##### [unbind](../package-fidl_fidl/AsyncBinding/unbind.md)() [InterfaceRequest](../package-fidl_fidl/InterfaceRequest-class.md)&lt;T>



Unbinds <a href="../package-fidl_fidl/AsyncBinding/impl.md">impl</a> and returns the unbound channel as an interface request.  




##### [wrap](../package-fidl_fidl/AsyncBinding/wrap.md)(T impl) [InterfaceHandle](../package-fidl_fidl/InterfaceHandle-class.md)&lt;T>



Returns an interface handle whose peer is bound to the given object.  






## Operators

##### [operator ==](../package-fidl_fidl/AsyncBinding/operator_equals.md)(Object other) bool



The equality operator.  
_<span class="feature">inherited</span>_















