<!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.17.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>test_package package</h5>


    <ol>
      <li class="section-title"><a href="index.html#libraries">Libraries</a></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 href="css/css-library.html">css</a></li>
      <li><a href="ex/ex-library.html">ex</a></li>
      <li><a href="fake/fake-library.html">fake</a></li>
      <li><a class="deprecated" href="is_deprecated/is_deprecated-library.html">is_deprecated</a></li>
      <li><a href="reexport_one/reexport_one-library.html">reexport_one</a></li>
      <li><a href="reexport_two/reexport_two-library.html">reexport_two</a></li>
      <li><a href="test_package_imported.main/test_package_imported.main-library.html">test_package_imported.main</a></li>
      <li><a href="two_exports/two_exports-library.html">two_exports</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" id="libraries">
        <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="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>
            <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>
            <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>
            <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>
            <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>
            <dt id="two_exports">
              <span class="name"><a href="two_exports/two_exports-library.html">two_exports</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://code.jquery.com/jquery-3.2.1.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>
