From 83f3fbbdcfab63392e663010ad676fa1aebb12fe Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Sat, 31 Aug 2019 22:44:27 +0800 Subject: [PATCH] feat: view image files --- lib/screens/image_view.dart | 20 ++++++++++++++++++++ lib/screens/object.dart | 27 +++++++++++++++++++-------- 2 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 lib/screens/image_view.dart diff --git a/lib/screens/image_view.dart b/lib/screens/image_view.dart new file mode 100644 index 0000000..8b3eba5 --- /dev/null +++ b/lib/screens/image_view.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:git_touch/scaffolds/simple.dart'; + +class ImageView extends StatelessWidget { + final ImageProvider imageProvider; + + ImageView(this.imageProvider); + + @override + Widget build(BuildContext context) { + return SimpleScaffold( + title: Text('Image preview'), + bodyBuilder: () { + return Container( + child: Image(image: imageProvider), + ); + }, + ); + } +} diff --git a/lib/screens/object.dart b/lib/screens/object.dart index 41bf477..f85ccec 100644 --- a/lib/screens/object.dart +++ b/lib/screens/object.dart @@ -1,4 +1,5 @@ import 'package:flutter_highlight/themes/github.dart'; +import 'package:git_touch/screens/image_view.dart'; import 'package:path/path.dart' as path; import 'package:flutter/material.dart'; import 'package:flutter_highlight/flutter_highlight.dart'; @@ -23,7 +24,17 @@ class ObjectScreen extends StatelessWidget { this.type = 'tree', }); - get expression => '$branch:' + paths.join('/'); + String get expression => '$branch:' + paths.join('/'); + String get extname { + if (paths.isEmpty) return ''; + var dotext = path.extension(paths.last); + if (dotext.isEmpty) return ''; + return dotext.substring(1); + } + + String get rawUrl => + 'https://raw.githubusercontent.com/$owner/$name/$branch/' + + paths.join('/'); // TODO: IconData _buildIconData(item) { switch (item['type']) { @@ -63,6 +74,12 @@ class ObjectScreen extends StatelessWidget { children: entries.map((item) { return Link( screenBuilder: (context) { + // TODO: All image types + var ext = path.extension(item['name']); + if (ext.isNotEmpty) ext = ext.substring(1); + if (['png', 'jpg', 'jpeg'].contains(ext)) { + return ImageView(NetworkImage('$rawUrl/' + item['name'])); + } return ObjectScreen( name: name, owner: owner, @@ -94,15 +111,9 @@ class ObjectScreen extends StatelessWidget { Widget _buildBlob(payload) { // FIXME: - var lang = path.extension(paths.last); - if (lang.isEmpty) { - lang = 'plaintext'; - } else { - lang = lang.substring(1); - } return Highlight( payload['text'], - language: lang, + language: extname.isEmpty ? 'plaintext' : extname, theme: githubTheme, padding: EdgeInsets.all(10), );