<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="API docs for the withAnimationInline method from the Dog class, for the Dart programming language.">
  <title>withAnimationInline method - Dog class - ex library - Dart API</title>
  <!-- required because all the links are pseudo-absolute -->
  <base href="../..">

  <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500,400i,400,300|Source+Sans+Pro:400,300,700" rel="stylesheet">
  <link rel="stylesheet" href="static-assets/github.css">
  <link rel="stylesheet" href="static-assets/styles.css">
  <link rel="icon" href="static-assets/favicon.png">

</head>

<body>

<div id="overlay-under-drawer"></div>

<header id="title">
  <button id="sidenav-left-toggle" type="button">&nbsp;</button>
  <ol class="breadcrumbs gt-separated dark hidden-xs">
    <li><a href="index.html">test_package</a></li>
    <li><a href="ex/ex-library.html">ex</a></li>
    <li><a href="ex/Dog-class.html">Dog</a></li>
    <li class="self-crumb">withAnimationInline method</li>
  </ol>
  <div class="self-name">withAnimationInline</div>
  <form class="search navbar-right" role="search">
    <input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
  </form>
</header>

<main>

  <div class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left">
    <header id="header-search-sidebar" class="hidden-l">
      <form class="search-sidebar" role="search">
        <input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
      </form>
    </header>
    
    <ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
      <li><a href="index.html">test_package</a></li>
      <li><a href="ex/ex-library.html">ex</a></li>
      <li><a href="ex/Dog-class.html">Dog</a></li>
      <li class="self-crumb">withAnimationInline method</li>
    </ol>
    
    <h5>Dog class</h5>
    <ol>
      <li class="section-title"><a href="ex/Dog-class.html#constructors">Constructors</a></li>
      <li><a href="ex/Dog/Dog.html">Dog</a></li>
      <li><a class="deprecated" href="ex/Dog/Dog.deprecatedCreate.html">deprecatedCreate</a></li>
    
      <li class="section-title">
        <a href="ex/Dog-class.html#instance-properties">Properties</a>
      </li>
      <li><a href="ex/Dog/aFinalField.html">aFinalField</a></li>
      <li><a href="ex/Dog/aGetterReturningRandomThings.html">aGetterReturningRandomThings</a></li>
      <li><a href="ex/Dog/aProtectedFinalField.html">aProtectedFinalField</a></li>
      <li><a class="deprecated" href="ex/Dog/deprecatedField.html">deprecatedField</a></li>
      <li><a class="deprecated" href="ex/Dog/deprecatedGetter.html">deprecatedGetter</a></li>
      <li><a class="deprecated" href="ex/Dog/deprecatedSetter.html">deprecatedSetter</a></li>
      <li><a href="ex/Dog/isImplemented.html">isImplemented</a></li>
      <li><a href="ex/Dog/name.html">name</a></li>
      <li class="inherited"><a href="ex/E/hashCode.html">hashCode</a></li>
      <li class="inherited"><a href="ex/E/runtimeType.html">runtimeType</a></li>
    
      <li class="section-title"><a href="ex/Dog-class.html#instance-methods">Methods</a></li>
      <li><a href="ex/Dog/abstractMethod.html">abstractMethod</a></li>
      <li><a href="ex/Dog/foo.html">foo</a></li>
      <li><a class="deprecated" href="ex/Dog/getAnotherClassD.html">getAnotherClassD</a></li>
      <li><a class="deprecated" href="ex/Dog/getClassA.html">getClassA</a></li>
      <li><a href="ex/Dog/testGeneric.html">testGeneric</a></li>
      <li><a href="ex/Dog/testGenericMethod.html">testGenericMethod</a></li>
      <li><a href="ex/Dog/testMethod.html">testMethod</a></li>
      <li><a href="ex/Dog/withAnimation.html">withAnimation</a></li>
      <li><a href="ex/Dog/withAnimationInline.html">withAnimationInline</a></li>
      <li><a href="ex/Dog/withAnimationInOneLineDoc.html">withAnimationInOneLineDoc</a></li>
      <li><a href="ex/Dog/withAnimationOutOfOrder.html">withAnimationOutOfOrder</a></li>
      <li><a href="ex/Dog/withDeprecatedAnimation.html">withDeprecatedAnimation</a></li>
      <li><a href="ex/Dog/withMacro.html">withMacro</a></li>
      <li><a href="ex/Dog/withMacro2.html">withMacro2</a></li>
      <li><a href="ex/Dog/withNamedAnimation.html">withNamedAnimation</a></li>
      <li><a href="ex/Dog/withPrivateMacro.html">withPrivateMacro</a></li>
      <li><a href="ex/Dog/withQuotedNamedAnimation.html">withQuotedNamedAnimation</a></li>
      <li><a href="ex/Dog/withUndefinedMacro.html">withUndefinedMacro</a></li>
      <li class="inherited"><a href="ex/E/noSuchMethod.html">noSuchMethod</a></li>
      <li class="inherited"><a href="ex/E/toString.html">toString</a></li>
    
      <li class="section-title"><a href="ex/Dog-class.html#operators">Operators</a></li>
      <li><a href="ex/Dog/operator_equals.html">operator ==</a></li>
    
      <li class="section-title"><a href="ex/Dog-class.html#static-properties">Static properties</a></li>
      <li><a href="ex/Dog/somethingTasty.html">somethingTasty</a></li>
      <li><a href="ex/Dog/staticGetterSetter.html">staticGetterSetter</a></li>
    
      <li class="section-title"><a href="ex/Dog-class.html#static-methods">Static methods</a></li>
      <li><a class="deprecated" href="ex/Dog/createDog.html">createDog</a></li>
    
      <li class="section-title"><a href="ex/Dog-class.html#constants">Constants</a></li>
      <li><a href="ex/Dog/aName-constant.html">aName</a></li>
      <li><a href="ex/Dog/aStaticConstField-constant.html">aStaticConstField</a></li>
    </ol>
  </div><!--/.sidebar-offcanvas-->

  <div class="col-xs-12 col-sm-9 col-md-8 main-content">
    <h1>withAnimationInline method</h1>

    <section class="multi-line-signature">
      <span class="returntype">void</span>
      <span class="name ">withAnimationInline</span>
(<wbr>)
      
    </section>
    <section class="desc markdown">
      <p>Animation inline in text.</p>
<p>Tests to see that an inline </p><div style="position: relative;">
  <div id="animation_1_play_button_" onclick="if (animation_1.paused) {
                  animation_1.play();
                  this.style.display = 'none';
                } else {
                  animation_1.pause();
                  this.style.display = 'block';
                }" style="position:absolute;
              width:100px;
              height:100px;
              z-index:100000;
              background-position: center;
              background-repeat: no-repeat;
              background-image: url(static-assets/play_button.svg);">
  </div>
  <video id="animation_1" style="width:100px; height:100px;" onclick="if (this.paused) {
                    this.play();
                    animation_1_play_button_.style.display = 'none';
                  } else {
                    this.pause();
                    animation_1_play_button_.style.display = 'block';
                  }" loop="">
    <source src="http://host/path/to/video.mp4" type="video/mp4">
  </video>
</div>
<p> works as expected.</p>
    </section>
    
    

  </div> <!-- /.main-content -->

  <div class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right">
  </div><!--/.sidebar-offcanvas-->

</main>

<footer>
  <span class="no-break">
    test_package 0.0.1
  </span>

</footer>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="static-assets/typeahead.bundle.min.js"></script>
<script src="static-assets/highlight.pack.js"></script>
<script src="static-assets/URI.js"></script>
<script src="static-assets/script.js"></script>


</body>

</html>
