{"action":"created","comment":{"url":"https://api.github.com/repos/flutter/flutter/pulls/comments/54180939","id":54180939,"diff_hunk":"@@ -0,0 +1,472 @@\n+part of flutter_markdown;\n+\n+class MarkdownStyle {\n+\n+  MarkdownStyle({\n+    this.a,\n+    this.p,\n+    this.code,\n+    this.h1,\n+    this.h2,\n+    this.h3,\n+    this.h4,\n+    this.h5,\n+    this.h6,\n+    this.em,\n+    this.strong,\n+    this.blockquote,\n+    this.blockSpacing,\n+    this.listIndent,\n+    this.blockquotePadding,\n+    this.blockquoteDecoration,\n+    this.codeblockPadding,\n+    this.codeblockDecoration\n+  }) {\n+    _init();\n+  }\n+\n+  MarkdownStyle.defaultFromTheme(ThemeData theme) :\n+    a = new TextStyle(color: Colors.blue[500]),\n+    p = theme.text.body1,\n+    code = new TextStyle(\n+      color: Colors.grey[700],\n+      fontFamily: \"monospace\",\n+      fontSize: theme.text.body1.fontSize * 0.85\n+    ),\n+    h1 = theme.text.headline,\n+    h2 = theme.text.title,\n+    h3 = theme.text.subhead,\n+    h4 = theme.text.body2,\n+    h5 = theme.text.body2,\n+    h6 = theme.text.body2,\n+    em = new TextStyle(fontStyle: FontStyle.italic),\n+    strong = new TextStyle(fontWeight: FontWeight.bold),\n+    blockquote = theme.text.body1,\n+    blockSpacing = 8.0,\n+    listIndent = 32.0,\n+    blockquotePadding = 8.0,\n+    blockquoteDecoration = new BoxDecoration(\n+      backgroundColor: Colors.blue[100],\n+      borderRadius: 2.0\n+    ),\n+    codeblockPadding = 8.0,\n+    codeblockDecoration = new BoxDecoration(\n+      backgroundColor: Colors.grey[100],\n+      borderRadius: 2.0\n+    ) {\n+    _init();\n+  }\n+\n+  MarkdownStyle.largeFromTheme(ThemeData theme) :\n+    a = new TextStyle(color: Colors.blue[500]),\n+    p = theme.text.body1,\n+    code = new TextStyle(\n+      color: Colors.grey[700],\n+      fontFamily: \"monospace\",\n+      fontSize: theme.text.body1.fontSize * 0.85\n+    ),\n+    h1 = theme.text.display3,\n+    h2 = theme.text.display2,\n+    h3 = theme.text.display1,\n+    h4 = theme.text.headline,\n+    h5 = theme.text.title,\n+    h6 = theme.text.subhead,\n+    em = new TextStyle(fontStyle: FontStyle.italic),\n+    strong = new TextStyle(fontWeight: FontWeight.bold),\n+    blockquote = theme.text.body1,\n+    blockSpacing = 8.0,\n+    listIndent = 32.0,\n+    blockquotePadding = 8.0,\n+    blockquoteDecoration = new BoxDecoration(\n+      backgroundColor: Colors.blue[100],\n+      borderRadius: 2.0\n+    ),\n+    codeblockPadding = 8.0,\n+    codeblockDecoration = new BoxDecoration(\n+      backgroundColor: Colors.grey[100],\n+      borderRadius: 2.0\n+    ) {\n+    _init();\n+  }\n+\n+  MarkdownStyle copyWith({\n+    TextStyle a,\n+    TextStyle p,\n+    TextStyle code,\n+    TextStyle h1,\n+    TextStyle h2,\n+    TextStyle h3,\n+    TextStyle h4,\n+    TextStyle h5,\n+    TextStyle h6,\n+    TextStyle em,\n+    TextStyle strong,\n+    TextStyle blockquote,\n+    double blockSpacing,\n+    double listIndent,\n+    double blockquotePadding,\n+    BoxDecoration blockquoteDecoration,\n+    double codeblockPadding,\n+    BoxDecoration codeblockDecoration\n+  }) {\n+    return new MarkdownStyle(\n+      a: a != null ? a : this.a,\n+      p: p != null ? p : this.p,\n+      code: code != null ? code : this.code,\n+      h1: h1 != null ? h1 : this.h1,\n+      h2: h2 != null ? h2 : this.h2,\n+      h3: h3 != null ? h3 : this.h3,\n+      h4: h4 != null ? h4 : this.h4,\n+      h5: h5 != null ? h5 : this.h5,\n+      h6: h6 != null ? h6 : this.h6,\n+      em: em != null ? em : this.em,\n+      strong: strong != null ? strong : this.strong,\n+      blockquote: blockquote != null ? blockquote : this.blockquote,\n+      blockSpacing: blockSpacing != null ? blockSpacing : this.blockSpacing,\n+      listIndent: listIndent != null ? listIndent : this.listIndent,\n+      blockquotePadding: blockquotePadding != null ? blockquotePadding : this.blockquotePadding,\n+      blockquoteDecoration: blockquoteDecoration != null ? blockquoteDecoration : this.blockquoteDecoration,\n+      codeblockPadding: codeblockPadding != null ? codeblockPadding : this.codeblockPadding,\n+      codeblockDecoration: codeblockDecoration != null ? codeblockDecoration : this.codeblockDecoration\n+    );\n+  }\n+\n+  final TextStyle a;\n+  final TextStyle p;\n+  final TextStyle code;\n+  final TextStyle h1;\n+  final TextStyle h2;\n+  final TextStyle h3;\n+  final TextStyle h4;\n+  final TextStyle h5;\n+  final TextStyle h6;\n+  final TextStyle em;\n+  final TextStyle strong;\n+  final TextStyle blockquote;\n+  final double blockSpacing;\n+  final double listIndent;\n+  final double blockquotePadding;\n+  final BoxDecoration blockquoteDecoration;\n+  final double codeblockPadding;\n+  final BoxDecoration codeblockDecoration;\n+\n+  Map<String, TextStyle> _styles;\n+\n+  void _init() {\n+    _styles = {\n+      'a': a,\n+      'p': p,\n+      'li': p,\n+      'code': code,\n+      'pre': p,\n+      'h1': h1,\n+      'h2': h2,\n+      'h3': h3,\n+      'h4': h4,\n+      'h5': h5,\n+      'h6': h6,\n+      'em': em,\n+      'strong': strong,\n+      'blockquote': blockquote\n+    };\n+  }\n+}\n+\n+class Markdown extends StatefulComponent {\n+  Markdown({\n+    this.data,\n+    this.markdownStyle,\n+    this.syntaxHighlighter\n+  });\n+\n+  final String data;\n+  final MarkdownStyle markdownStyle;\n+  final SyntaxHighlighter syntaxHighlighter;\n+\n+  State<Markdown> createState() => new _MarkdownState();\n+}\n+\n+class _MarkdownState extends State<Markdown> {\n+\n+  void initState() {\n+    super.initState();\n+\n+    MarkdownStyle markdownStyle = config.markdownStyle;\n+    if (markdownStyle == null)\n+      markdownStyle = new MarkdownStyle.defaultFromTheme(Theme.of(context));\n+\n+    SyntaxHighlighter syntaxHighlighter = config.syntaxHighlighter;\n+    if (syntaxHighlighter == null)\n+      syntaxHighlighter = new DartSyntaxHighlighter();\n+\n+    _cachedBlocks = _blocksFromMarkup(config.data, markdownStyle, syntaxHighlighter);\n+  }\n+\n+  List<_Block> _cachedBlocks;\n+\n+  Widget build(BuildContext context) {\n+    List<Widget> blocks = <Widget>[];\n+    for (_Block block in _cachedBlocks) {\n+      blocks.add(block.build(context));\n+    }\n+\n+    return new Column(\n+      alignItems: FlexAlignItems.stretch,\n+      children: blocks\n+    );\n+  }\n+}\n+\n+List<_Block> _blocksFromMarkup(String data, MarkdownStyle markdownStyle, SyntaxHighlighter syntaxHighlighter) {\n+  var lines = data.replaceAll('\\r\\n', '\\n').split('\\n');\n+  md.Document document = new md.Document();\n+\n+  _Renderer renderer = new _Renderer();\n+  return renderer.render(document.parseLines(lines), markdownStyle, syntaxHighlighter);\n+}\n+\n+class _Renderer implements md.NodeVisitor {\n+  List<_Block> render(List<md.Node> nodes, MarkdownStyle markdownStyle, SyntaxHighlighter syntaxHighlighter) {\n+    assert(markdownStyle != null);\n+\n+    _blocks = <_Block>[];\n+    _listIndents = <String>[];\n+    _markdownStyle = markdownStyle;\n+    _syntaxHighlighter = syntaxHighlighter;\n+\n+    for (final md.Node node in nodes) {\n+      node.accept(this);\n+    }\n+\n+    return _blocks;\n+  }\n+\n+  List<_Block> _blocks;\n+  List<String> _listIndents;\n+  MarkdownStyle _markdownStyle;\n+  SyntaxHighlighter _syntaxHighlighter;\n+\n+  void visitText(md.Text text) {\n+    List<dynamic> top = _currentBlock.stack.last;\n+\n+    if (_currentBlock.tag == 'pre')\n+      top.add(_syntaxHighlighter.format(text.text));\n+    else\n+      top.add(text.text);\n+  }\n+\n+  bool visitElementBefore(md.Element element) {\n+    if (_isListTag(element.tag))\n+      _listIndents.add(element.tag);\n+\n+    if (_isBlockTag(element.tag)) {\n+      List<_Block> blockList;\n+      if (_currentBlock == null)\n+        blockList = _blocks;\n+      else\n+        blockList = _currentBlock.subBlocks;\n+\n+      _Block newBlock = new _Block(element.tag, element.attributes, _markdownStyle, new List<String>.from(_listIndents), blockList.length);\n+      blockList.add(newBlock);\n+    } else {\n+      TextStyle style = _markdownStyle._styles[element.tag];\n+      if (style == null)\n+        style = new TextStyle();\n+\n+      List<dynamic> styleElement = <dynamic>[style];\n+      _currentBlock.stack.add(styleElement);\n+    }\n+    return true;\n+  }\n+\n+  void visitElementAfter(md.Element element) {\n+    if (_isListTag(element.tag))\n+      _listIndents.removeLast();\n+\n+    if (_isBlockTag(element.tag)) {\n+      if (_currentBlock.stack.length > 0) {\n+        _currentBlock.stack = _currentBlock.stack.first;\n+        _currentBlock.open = false;\n+      } else {\n+        _currentBlock.stack = <dynamic>[''];","path":"packages/flutter_markdown/lib/src/markdown.dart","position":291,"original_position":291,"commit_id":"fe4c8a8096d3eb0338e54303fc63ea843cf802e0","original_commit_id":"fe4c8a8096d3eb0338e54303fc63ea843cf802e0","user":{"login":"abarth","id":112007,"avatar_url":"https://avatars.githubusercontent.com/u/112007?v=3","gravatar_id":"","url":"https://api.github.com/users/abarth","html_url":"https://github.com/abarth","followers_url":"https://api.github.com/users/abarth/followers","following_url":"https://api.github.com/users/abarth/following{/other_user}","gists_url":"https://api.github.com/users/abarth/gists{/gist_id}","starred_url":"https://api.github.com/users/abarth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abarth/subscriptions","organizations_url":"https://api.github.com/users/abarth/orgs","repos_url":"https://api.github.com/users/abarth/repos","events_url":"https://api.github.com/users/abarth/events{/privacy}","received_events_url":"https://api.github.com/users/abarth/received_events","type":"User","site_admin":false},"body":"Why do we need an empty string here?","created_at":"2016-02-25T23:06:17Z","updated_at":"2016-02-25T23:06:17Z","html_url":"https://github.com/flutter/flutter/pull/2191#discussion_r54180939","pull_request_url":"https://api.github.com/repos/flutter/flutter/pulls/2191","_links":{"self":{"href":"https://api.github.com/repos/flutter/flutter/pulls/comments/54180939"},"html":{"href":"https://github.com/flutter/flutter/pull/2191#discussion_r54180939"},"pull_request":{"href":"https://api.github.com/repos/flutter/flutter/pulls/2191"}}},"pull_request":{"url":"https://api.github.com/repos/flutter/flutter/pulls/2191","id":60761947,"html_url":"https://github.com/flutter/flutter/pull/2191","diff_url":"https://github.com/flutter/flutter/pull/2191.diff","patch_url":"https://github.com/flutter/flutter/pull/2191.patch","issue_url":"https://api.github.com/repos/flutter/flutter/issues/2191","number":2191,"state":"open","locked":false,"title":"Adds initial version of Markdown renderer","user":{"login":"vlidholt","id":1539812,"avatar_url":"https://avatars.githubusercontent.com/u/1539812?v=3","gravatar_id":"","url":"https://api.github.com/users/vlidholt","html_url":"https://github.com/vlidholt","followers_url":"https://api.github.com/users/vlidholt/followers","following_url":"https://api.github.com/users/vlidholt/following{/other_user}","gists_url":"https://api.github.com/users/vlidholt/gists{/gist_id}","starred_url":"https://api.github.com/users/vlidholt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vlidholt/subscriptions","organizations_url":"https://api.github.com/users/vlidholt/orgs","repos_url":"https://api.github.com/users/vlidholt/repos","events_url":"https://api.github.com/users/vlidholt/events{/privacy}","received_events_url":"https://api.github.com/users/vlidholt/received_events","type":"User","site_admin":false},"body":"Initial version of a Markdown renderer and a Dart syntax highlighter. Some stuff left to do:\r\n\r\n- Add support for links\r\n- Better custom loading of images\r\n- Potentially break out the parsed markdown data out of the Markdown widget\r\n- API documentation","created_at":"2016-02-25T22:51:41Z","updated_at":"2016-02-25T23:06:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"48c847aaf47e3e7c7c539c9aa809227abb007d29","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/flutter/flutter/pulls/2191/commits","review_comments_url":"https://api.github.com/repos/flutter/flutter/pulls/2191/comments","review_comment_url":"https://api.github.com/repos/flutter/flutter/pulls/comments{/number}","comments_url":"https://api.github.com/repos/flutter/flutter/issues/2191/comments","statuses_url":"https://api.github.com/repos/flutter/flutter/statuses/fe4c8a8096d3eb0338e54303fc63ea843cf802e0","head":{"label":"vlidholt:master","ref":"master","sha":"fe4c8a8096d3eb0338e54303fc63ea843cf802e0","user":{"login":"vlidholt","id":1539812,"avatar_url":"https://avatars.githubusercontent.com/u/1539812?v=3","gravatar_id":"","url":"https://api.github.com/users/vlidholt","html_url":"https://github.com/vlidholt","followers_url":"https://api.github.com/users/vlidholt/followers","following_url":"https://api.github.com/users/vlidholt/following{/other_user}","gists_url":"https://api.github.com/users/vlidholt/gists{/gist_id}","starred_url":"https://api.github.com/users/vlidholt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vlidholt/subscriptions","organizations_url":"https://api.github.com/users/vlidholt/orgs","repos_url":"https://api.github.com/users/vlidholt/repos","events_url":"https://api.github.com/users/vlidholt/events{/privacy}","received_events_url":"https://api.github.com/users/vlidholt/received_events","type":"User","site_admin":false},"repo":{"id":46521777,"name":"flutter","full_name":"vlidholt/flutter","owner":{"login":"vlidholt","id":1539812,"avatar_url":"https://avatars.githubusercontent.com/u/1539812?v=3","gravatar_id":"","url":"https://api.github.com/users/vlidholt","html_url":"https://github.com/vlidholt","followers_url":"https://api.github.com/users/vlidholt/followers","following_url":"https://api.github.com/users/vlidholt/following{/other_user}","gists_url":"https://api.github.com/users/vlidholt/gists{/gist_id}","starred_url":"https://api.github.com/users/vlidholt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vlidholt/subscriptions","organizations_url":"https://api.github.com/users/vlidholt/orgs","repos_url":"https://api.github.com/users/vlidholt/repos","events_url":"https://api.github.com/users/vlidholt/events{/privacy}","received_events_url":"https://api.github.com/users/vlidholt/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vlidholt/flutter","description":"The Flutter framework","fork":true,"url":"https://api.github.com/repos/vlidholt/flutter","forks_url":"https://api.github.com/repos/vlidholt/flutter/forks","keys_url":"https://api.github.com/repos/vlidholt/flutter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vlidholt/flutter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vlidholt/flutter/teams","hooks_url":"https://api.github.com/repos/vlidholt/flutter/hooks","issue_events_url":"https://api.github.com/repos/vlidholt/flutter/issues/events{/number}","events_url":"https://api.github.com/repos/vlidholt/flutter/events","assignees_url":"https://api.github.com/repos/vlidholt/flutter/assignees{/user}","branches_url":"https://api.github.com/repos/vlidholt/flutter/branches{/branch}","tags_url":"https://api.github.com/repos/vlidholt/flutter/tags","blobs_url":"https://api.github.com/repos/vlidholt/flutter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vlidholt/flutter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vlidholt/flutter/git/refs{/sha}","trees_url":"https://api.github.com/repos/vlidholt/flutter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vlidholt/flutter/statuses/{sha}","languages_url":"https://api.github.com/repos/vlidholt/flutter/languages","stargazers_url":"https://api.github.com/repos/vlidholt/flutter/stargazers","contributors_url":"https://api.github.com/repos/vlidholt/flutter/contributors","subscribers_url":"https://api.github.com/repos/vlidholt/flutter/subscribers","subscription_url":"https://api.github.com/repos/vlidholt/flutter/subscription","commits_url":"https://api.github.com/repos/vlidholt/flutter/commits{/sha}","git_commits_url":"https://api.github.com/repos/vlidholt/flutter/git/commits{/sha}","comments_url":"https://api.github.com/repos/vlidholt/flutter/comments{/number}","issue_comment_url":"https://api.github.com/repos/vlidholt/flutter/issues/comments{/number}","contents_url":"https://api.github.com/repos/vlidholt/flutter/contents/{+path}","compare_url":"https://api.github.com/repos/vlidholt/flutter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vlidholt/flutter/merges","archive_url":"https://api.github.com/repos/vlidholt/flutter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vlidholt/flutter/downloads","issues_url":"https://api.github.com/repos/vlidholt/flutter/issues{/number}","pulls_url":"https://api.github.com/repos/vlidholt/flutter/pulls{/number}","milestones_url":"https://api.github.com/repos/vlidholt/flutter/milestones{/number}","notifications_url":"https://api.github.com/repos/vlidholt/flutter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vlidholt/flutter/labels{/name}","releases_url":"https://api.github.com/repos/vlidholt/flutter/releases{/id}","deployments_url":"https://api.github.com/repos/vlidholt/flutter/deployments","created_at":"2015-11-19T21:35:17Z","updated_at":"2016-01-29T22:35:25Z","pushed_at":"2016-02-25T22:48:30Z","git_url":"git://github.com/vlidholt/flutter.git","ssh_url":"git@github.com:vlidholt/flutter.git","clone_url":"https://github.com/vlidholt/flutter.git","svn_url":"https://github.com/vlidholt/flutter","homepage":"http://flutter.io","size":13465,"stargazers_count":0,"watchers_count":0,"language":"Dart","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"flutter:master","ref":"master","sha":"28c0d4f4a3725c43d349a34c7c57adb7af612ad1","user":{"login":"flutter","id":14101776,"avatar_url":"https://avatars.githubusercontent.com/u/14101776?v=3","gravatar_id":"","url":"https://api.github.com/users/flutter","html_url":"https://github.com/flutter","followers_url":"https://api.github.com/users/flutter/followers","following_url":"https://api.github.com/users/flutter/following{/other_user}","gists_url":"https://api.github.com/users/flutter/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter/subscriptions","organizations_url":"https://api.github.com/users/flutter/orgs","repos_url":"https://api.github.com/users/flutter/repos","events_url":"https://api.github.com/users/flutter/events{/privacy}","received_events_url":"https://api.github.com/users/flutter/received_events","type":"Organization","site_admin":false},"repo":{"id":31792824,"name":"flutter","full_name":"flutter/flutter","owner":{"login":"flutter","id":14101776,"avatar_url":"https://avatars.githubusercontent.com/u/14101776?v=3","gravatar_id":"","url":"https://api.github.com/users/flutter","html_url":"https://github.com/flutter","followers_url":"https://api.github.com/users/flutter/followers","following_url":"https://api.github.com/users/flutter/following{/other_user}","gists_url":"https://api.github.com/users/flutter/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter/subscriptions","organizations_url":"https://api.github.com/users/flutter/orgs","repos_url":"https://api.github.com/users/flutter/repos","events_url":"https://api.github.com/users/flutter/events{/privacy}","received_events_url":"https://api.github.com/users/flutter/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/flutter/flutter","description":"Framework for building high-performance, high-fidelity iOS and Android apps","fork":false,"url":"https://api.github.com/repos/flutter/flutter","forks_url":"https://api.github.com/repos/flutter/flutter/forks","keys_url":"https://api.github.com/repos/flutter/flutter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/flutter/flutter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/flutter/flutter/teams","hooks_url":"https://api.github.com/repos/flutter/flutter/hooks","issue_events_url":"https://api.github.com/repos/flutter/flutter/issues/events{/number}","events_url":"https://api.github.com/repos/flutter/flutter/events","assignees_url":"https://api.github.com/repos/flutter/flutter/assignees{/user}","branches_url":"https://api.github.com/repos/flutter/flutter/branches{/branch}","tags_url":"https://api.github.com/repos/flutter/flutter/tags","blobs_url":"https://api.github.com/repos/flutter/flutter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/flutter/flutter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/flutter/flutter/git/refs{/sha}","trees_url":"https://api.github.com/repos/flutter/flutter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/flutter/flutter/statuses/{sha}","languages_url":"https://api.github.com/repos/flutter/flutter/languages","stargazers_url":"https://api.github.com/repos/flutter/flutter/stargazers","contributors_url":"https://api.github.com/repos/flutter/flutter/contributors","subscribers_url":"https://api.github.com/repos/flutter/flutter/subscribers","subscription_url":"https://api.github.com/repos/flutter/flutter/subscription","commits_url":"https://api.github.com/repos/flutter/flutter/commits{/sha}","git_commits_url":"https://api.github.com/repos/flutter/flutter/git/commits{/sha}","comments_url":"https://api.github.com/repos/flutter/flutter/comments{/number}","issue_comment_url":"https://api.github.com/repos/flutter/flutter/issues/comments{/number}","contents_url":"https://api.github.com/repos/flutter/flutter/contents/{+path}","compare_url":"https://api.github.com/repos/flutter/flutter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/flutter/flutter/merges","archive_url":"https://api.github.com/repos/flutter/flutter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/flutter/flutter/downloads","issues_url":"https://api.github.com/repos/flutter/flutter/issues{/number}","pulls_url":"https://api.github.com/repos/flutter/flutter/pulls{/number}","milestones_url":"https://api.github.com/repos/flutter/flutter/milestones{/number}","notifications_url":"https://api.github.com/repos/flutter/flutter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/flutter/flutter/labels{/name}","releases_url":"https://api.github.com/repos/flutter/flutter/releases{/id}","deployments_url":"https://api.github.com/repos/flutter/flutter/deployments","created_at":"2015-03-06T22:54:58Z","updated_at":"2016-02-25T16:13:56Z","pushed_at":"2016-02-25T22:51:42Z","git_url":"git://github.com/flutter/flutter.git","ssh_url":"git@github.com:flutter/flutter.git","clone_url":"https://github.com/flutter/flutter.git","svn_url":"https://github.com/flutter/flutter","homepage":"http://flutter.io","size":106269,"stargazers_count":2653,"watchers_count":2653,"language":"Dart","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":261,"mirror_url":null,"open_issues_count":646,"forks":261,"open_issues":646,"watchers":2653,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/flutter/flutter/pulls/2191"},"html":{"href":"https://github.com/flutter/flutter/pull/2191"},"issue":{"href":"https://api.github.com/repos/flutter/flutter/issues/2191"},"comments":{"href":"https://api.github.com/repos/flutter/flutter/issues/2191/comments"},"review_comments":{"href":"https://api.github.com/repos/flutter/flutter/pulls/2191/comments"},"review_comment":{"href":"https://api.github.com/repos/flutter/flutter/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/flutter/flutter/pulls/2191/commits"},"statuses":{"href":"https://api.github.com/repos/flutter/flutter/statuses/fe4c8a8096d3eb0338e54303fc63ea843cf802e0"}}}}