<!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="generator" content="made with love by dartdoc 0.20.1">
  <meta name="description" content="test_package API docs, for the Dart programming language.">
  <title>test_package - Dart API docs</title>

  <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">
  <ol class="breadcrumbs gt-separated dark hidden-xs">
    <li><a href="http://github.com/dart-lang">test_package package</a></li>
  </ol>
  <div class="self-name">test_package</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">
    <h5><span class="package-name">test_package</span> <span class="package-kind">package</span></h5>
    <ol>
          <li class="section-title">Libraries</li>
          <li><a href="anonymous_library/anonymous_library-library.html">anonymous_library</a></li>
          <li><a href="another_anonymous_lib/another_anonymous_lib-library.html">another_anonymous_lib</a></li>
          <li><a href="code_in_comments/code_in_comments-library.html">code_in_comments</a></li>
          <li><a class="deprecated" href="is_deprecated/is_deprecated-library.html">is_deprecated</a></li>
          <li class="section-subtitle">Real Libraries</li>
            <li class="section-subitem"><a href="ex/ex-library.html">ex</a></li>
            <li class="section-subitem"><a href="fake/fake-library.html">fake</a></li>
          <li class="section-subtitle">Unreal</li>
            <li class="section-subitem"><a href="reexport_one/reexport_one-library.html">reexport_one</a></li>
            <li class="section-subitem"><a href="reexport_two/reexport_two-library.html">reexport_two</a></li>
          <li class="section-subtitle">Misc</li>
            <li class="section-subitem"><a href="two_exports/two_exports-library.html">two_exports</a></li>
          <li class="section-subtitle">Other</li>
            <li class="section-subitem"><a href="css/css-library.html">css</a></li>
          <li class="section-title">test_package_imported</li>
          <li><a href="test_package_imported.main/test_package_imported.main-library.html">test_package_imported.main</a></li>
    </ol>
  </div>

  <div class="col-xs-12 col-sm-9 col-md-8 main-content">
      <section class="desc markdown">
        <h1>Best Package</h1>
<p>This is an amazing package.</p>
<p>For example, it:</p><ul><li>Is very fast</li><li>Has zero bugs</li><li>Is free</li></ul>
<p>It also has some awesome code</p>
<pre class="language-dart"><code class="language-dart">void main() {
  // in Dart!
}

/*
80-characters: to ensure default styles accommodate Dart line length convention.
01234567890123456789012345678901234567890123456789012345678901234567890123456789
*/
</code></pre>
<pre class="language-yaml"><code class="language-yaml">and_yaml:
  - value
  - "value"
  - 3.14
</code></pre>
<pre class="language-css"><code class="language-css">/* issue 1484 regression */
#id {
  background: green;
}

.class {
  background: red;
}

div {
  background: green;
}
</code></pre>
<pre class="language-html"><code class="language-html">&lt;div&gt;
  &lt;strong&gt;Hello!&lt;/strong&gt;
  &lt;h1&gt;World!&lt;/h1&gt;
&lt;/div&gt;
</code></pre>
<pre class="language-js"><code class="language-js">var f = function(a, b) {
  return a + b;  
};
</code></pre>
<p>It sometimes generates warnings in commentRefs like this: <code>unknownThingy.FromSomewhere</code></p>
<p>Be sure to check out other awesome packages on <a href="https://pub.dartlang.org">pub</a>.</p>
      </section>
      
        <section class="summary">
            <h2>Libraries</h2>
          <dl>
            <dt id="anonymous_library">
              <span class="name"><a href="anonymous_library/anonymous_library-library.html">anonymous_library</a></span>
            </dt>
            <dd>
              
            </dd>            <dt id="another_anonymous_lib">
              <span class="name"><a href="another_anonymous_lib/another_anonymous_lib-library.html">another_anonymous_lib</a></span>
            </dt>
            <dd>
              
            </dd>            <dt id="code_in_comments">
              <span class="name"><a href="code_in_comments/code_in_comments-library.html">code_in_comments</a></span>
            </dt>
            <dd>
              <code class="language-dart">void main() {
  // in Dart!
}
</code> <a href="code_in_comments/code_in_comments-library.html">[...]</a>
            </dd>            <dt id="is_deprecated">
              <span class="name"><a class="deprecated" href="is_deprecated/is_deprecated-library.html">is_deprecated</a></span>
            </dt>
            <dd>
              This lib is deprecated. It never had a chance
            </dd>            <h3>Real Libraries</h3>
              <dt id="ex">
                <span class="name"><a href="ex/ex-library.html">ex</a></span>
              </dt>
              <dd>
                a library. testing string escaping: <code>var s = 'a string'</code> <cool></cool>
              </dd>              <dt id="fake">
                <span class="name"><a href="fake/fake-library.html">fake</a></span>
              </dt>
              <dd>
                WOW FAKE PACKAGE IS <strong>BEST</strong> <a href="http://example.org">PACKAGE</a> <a href="fake/fake-library.html">[...]</a>
              </dd>            <h3>Unreal</h3>
              <dt id="reexport_one">
                <span class="name"><a href="reexport_one/reexport_one-library.html">reexport_one</a></span>
              </dt>
              <dd>
                
              </dd>              <dt id="reexport_two">
                <span class="name"><a href="reexport_two/reexport_two-library.html">reexport_two</a></span>
              </dt>
              <dd>
                
              </dd>            <h3>Misc</h3>
              <dt id="two_exports">
                <span class="name"><a href="two_exports/two_exports-library.html">two_exports</a></span>
              </dt>
              <dd>
                
              </dd>            <h3>Other</h3>
              <dt id="css">
                <span class="name"><a href="css/css-library.html">css</a></span>
              </dt>
              <dd>
                Testing that a library name doesn't conflict
with directories created by dartdoc.
              </dd>          </dl>
        </section>
        <section class="summary">
            <h2>test_package_imported</h2>
          <dl>
            <dt id="test_package_imported.main">
              <span class="name"><a href="test_package_imported.main/test_package_imported.main-library.html">test_package_imported.main</a></span>
            </dt>
            <dd>
              
            </dd>          </dl>
        </section>

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

</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>
