1
0
mirror of https://github.com/git-touch/git-touch synced 2025-02-23 23:07:53 +01:00

feat: markdown view base path

This commit is contained in:
Rongjian Zhang 2019-11-06 21:56:52 +08:00
parent 716924d27d
commit 003263d955
3 changed files with 31 additions and 3 deletions

View File

@ -114,7 +114,8 @@ class ObjectScreen extends StatelessWidget {
case 'markdown':
return Padding(
padding: CommonStyle.padding,
child: MarkdownView(payload['text']),
child: MarkdownView(payload['text'],
basePaths: [owner, name, branch, ...paths]),
);
case 'svg':
return SvgPicture.network(rawUrl);

View File

@ -334,7 +334,10 @@ class RepositoryScreen extends StatelessWidget {
Container(
padding: CommonStyle.padding,
color: Colors.white,
child: MarkdownView(readme),
child: MarkdownView(
readme,
basePaths: [owner, name, branch ?? 'master'], // TODO:
),
),
CommonStyle.verticalGap,
],

View File

@ -2,17 +2,20 @@ import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:git_touch/models/theme.dart';
import 'package:git_touch/screens/issue.dart';
import 'package:git_touch/screens/object.dart';
import 'package:git_touch/screens/repository.dart';
import 'package:git_touch/screens/user.dart';
import 'package:git_touch/utils/utils.dart';
import 'package:primer/primer.dart';
import 'package:provider/provider.dart';
import 'package:uri/uri.dart';
import 'package:path/path.dart' as path;
class MarkdownView extends StatelessWidget {
final String text;
final List<String> basePaths;
MarkdownView(this.text);
MarkdownView(this.text, {this.basePaths});
static const _basicStyle =
TextStyle(fontSize: 16, color: PrimerColors.gray900, height: 1.5);
@ -29,6 +32,27 @@ class MarkdownView extends StatelessWidget {
Widget build(BuildContext context) {
return MarkdownBody(
onTapLink: (url) {
if (basePaths != null &&
!url.startsWith('https://') &&
!url.startsWith('http://')) {
// Treat as relative path
final x = basePaths.sublist(3).join('/');
var y = path.join(x, url);
if (y.startsWith('/')) y = y.substring(1);
final paths = path.split(y);
return Provider.of<ThemeModel>(context).pushRoute(
context,
(_) => ObjectScreen(
basePaths[0],
basePaths[1],
basePaths[2],
paths: paths,
),
);
}
// TODO: Relative paths
if (url.startsWith('https://github.com')) {
Map<String, String> m;