mirror of
https://github.com/git-touch/git-touch
synced 2025-02-20 21:40:44 +01:00
feat: style tweaks
This commit is contained in:
parent
2c6a3d097c
commit
9fe6639f66
@ -48,20 +48,10 @@ class _HomeState extends State<Home> {
|
||||
children: <Widget>[
|
||||
Icon(Icons.notifications_none),
|
||||
Positioned(
|
||||
right: 0,
|
||||
child: Container(
|
||||
width: 8,
|
||||
height: 8,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(4)),
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [PrimerColors.red400, PrimerColors.red600],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
right: 0,
|
||||
top: 0,
|
||||
child: Icon(Octicons.primitive_dot,
|
||||
color: PrimerColors.red500, size: 12))
|
||||
],
|
||||
);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'package:flutter_highlight/themes/github.dart';
|
||||
import 'package:git_touch/screens/image_view.dart';
|
||||
import 'package:git_touch/widgets/app_bar_title.dart';
|
||||
import 'package:git_touch/widgets/markdown_view.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_highlight/flutter_highlight.dart';
|
||||
@ -132,15 +133,24 @@ class ObjectScreen extends StatelessWidget {
|
||||
}
|
||||
|
||||
Widget _buildBlob(payload) {
|
||||
return SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: HighlightView(
|
||||
payload['text'],
|
||||
language: extname.isEmpty ? 'plaintext' : extname,
|
||||
theme: githubTheme,
|
||||
padding: EdgeInsets.all(10),
|
||||
),
|
||||
);
|
||||
switch (extname) {
|
||||
case 'md':
|
||||
case 'markdown':
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(12),
|
||||
child: MarkdownView(payload['text']),
|
||||
);
|
||||
default:
|
||||
return SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: HighlightView(
|
||||
payload['text'],
|
||||
language: extname.isEmpty ? 'plaintext' : extname,
|
||||
theme: githubTheme,
|
||||
padding: EdgeInsets.all(10),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -222,14 +222,8 @@ class RepoScreen extends StatelessWidget {
|
||||
),
|
||||
TableView(items: [
|
||||
TableViewItem(
|
||||
leftWidget: Icon(Octicons.code,
|
||||
size: 20,
|
||||
color: convertColor(payload['primaryLanguage'] == null
|
||||
? null
|
||||
: payload['primaryLanguage']['color'])),
|
||||
text: Text(payload['primaryLanguage'] == null
|
||||
? 'Unknown'
|
||||
: payload['primaryLanguage']['name']),
|
||||
leftWidget: Icon(Octicons.code, size: 20),
|
||||
text: Text('Code'),
|
||||
rightWidget: Row(
|
||||
children: <Widget>[
|
||||
Text(filesize(payload['languages']['totalSize'] as int)),
|
||||
@ -281,14 +275,6 @@ class RepoScreen extends StatelessWidget {
|
||||
]),
|
||||
BorderView(height: 10),
|
||||
TableView(items: [
|
||||
TableViewItem(
|
||||
leftWidget: Icon(Octicons.law, size: 20),
|
||||
text: Text('License'),
|
||||
rightWidget: Text(payload['licenseInfo'] == null
|
||||
? 'Unknown'
|
||||
: (payload['licenseInfo']['spdxId'] ??
|
||||
payload['licenseInfo']['name'])),
|
||||
),
|
||||
TableViewItem(
|
||||
leftWidget: Icon(Octicons.history, size: 20),
|
||||
text: Text('Commits'),
|
||||
@ -305,6 +291,14 @@ class RepoScreen extends StatelessWidget {
|
||||
),
|
||||
screenBuilder: (_) => CommitsScreen(owner, name),
|
||||
),
|
||||
TableViewItem(
|
||||
leftWidget: Icon(Octicons.law, size: 20),
|
||||
text: Text('License'),
|
||||
rightWidget: Text(payload['licenseInfo'] == null
|
||||
? 'Unknown'
|
||||
: (payload['licenseInfo']['spdxId'] ??
|
||||
payload['licenseInfo']['name'])),
|
||||
),
|
||||
]),
|
||||
BorderView(height: 10),
|
||||
if (payload['object'] != null)
|
||||
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:git_touch/widgets/app_bar_title.dart';
|
||||
import 'package:git_touch/widgets/table_view.dart';
|
||||
import 'package:git_touch/widgets/user_item.dart';
|
||||
import 'package:primer/primer.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'package:share/share.dart';
|
||||
@ -92,20 +93,16 @@ class UserScreen extends StatelessWidget {
|
||||
}
|
||||
|
||||
TableViewItem _buildTableViewItem({
|
||||
String placeholder,
|
||||
IconData iconData,
|
||||
String text,
|
||||
Function onTap,
|
||||
}) {
|
||||
if (text == null || text.isEmpty) return null;
|
||||
var leftWidget = Icon(iconData, size: 20, color: PrimerColors.blue500);
|
||||
var usePlaceholder = text == null || text.isEmpty;
|
||||
var itemText = usePlaceholder
|
||||
? Text(placeholder, style: TextStyle(color: PrimerColors.gray300))
|
||||
: Text(text);
|
||||
|
||||
return TableViewItem(
|
||||
leftWidget: leftWidget,
|
||||
text: itemText,
|
||||
text: Text(text),
|
||||
rightWidget: onTap == null
|
||||
? null
|
||||
: Icon(CupertinoIcons.right_chevron,
|
||||
@ -216,49 +213,11 @@ class UserScreen extends StatelessWidget {
|
||||
children: <Widget>[
|
||||
Container(
|
||||
padding: EdgeInsets.all(12),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Avatar(url: payload['avatarUrl'], size: 30),
|
||||
SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
payload['name'] ?? login,
|
||||
style: TextStyle(
|
||||
color: PrimerColors.blue500,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 8),
|
||||
Text(
|
||||
login,
|
||||
style: TextStyle(
|
||||
color: PrimerColors.gray700, fontSize: 16),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 6),
|
||||
Text(
|
||||
payload['bio'] == null ||
|
||||
(payload['bio'] as String).isEmpty
|
||||
? 'No bio'
|
||||
: payload['bio'],
|
||||
style: TextStyle(
|
||||
color: PrimerColors.gray700,
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
child: UserItem(
|
||||
login,
|
||||
name: payload['name'],
|
||||
avatarUrl: payload['avatarUrl'],
|
||||
bio: payload['bio'],
|
||||
),
|
||||
),
|
||||
BorderView(),
|
||||
@ -293,12 +252,10 @@ class UserScreen extends StatelessWidget {
|
||||
TableView(items: [
|
||||
_buildTableViewItem(
|
||||
iconData: Octicons.organization,
|
||||
placeholder: 'Company',
|
||||
text: payload['company'],
|
||||
),
|
||||
_buildTableViewItem(
|
||||
iconData: Octicons.location,
|
||||
placeholder: 'Location',
|
||||
text: payload['location'],
|
||||
onTap: payload['location'] == null
|
||||
? null
|
||||
@ -309,7 +266,6 @@ class UserScreen extends StatelessWidget {
|
||||
}),
|
||||
_buildTableViewItem(
|
||||
iconData: Octicons.mail,
|
||||
placeholder: 'Email',
|
||||
text: payload['email'],
|
||||
onTap: (payload['email'] as String).isEmpty
|
||||
? null
|
||||
@ -319,7 +275,6 @@ class UserScreen extends StatelessWidget {
|
||||
),
|
||||
_buildTableViewItem(
|
||||
iconData: Octicons.link,
|
||||
placeholder: 'Website',
|
||||
text: payload['websiteUrl'],
|
||||
onTap: payload['websiteUrl'] == null
|
||||
? null
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:git_touch/widgets/app_bar_title.dart';
|
||||
import 'package:git_touch/widgets/user_item.dart';
|
||||
import 'package:primer/primer.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
import '../scaffolds/list.dart';
|
||||
@ -65,7 +66,7 @@ class UsersScreen extends StatelessWidget {
|
||||
name
|
||||
login
|
||||
avatarUrl
|
||||
url
|
||||
bio
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -85,30 +86,11 @@ class UsersScreen extends StatelessWidget {
|
||||
screenBuilder: (_) => UserScreen(payload['login']),
|
||||
child: Container(
|
||||
padding: EdgeInsets.all(10),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Avatar(url: payload['avatarUrl'], size: 24),
|
||||
SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: join(SizedBox(height: 6), [
|
||||
Text(
|
||||
payload['name'] ?? payload['login'],
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: PrimerColors.blue500,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
payload['login'],
|
||||
style: TextStyle(fontSize: 14, color: PrimerColors.gray700),
|
||||
)
|
||||
]),
|
||||
),
|
||||
)
|
||||
],
|
||||
child: UserItem(
|
||||
payload['login'],
|
||||
name: payload['name'],
|
||||
avatarUrl: payload['avatarUrl'],
|
||||
bio: payload['bio'],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -1,3 +1,5 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
@ -7,6 +9,8 @@ import 'package:primer/primer.dart';
|
||||
import '../screens/repo.dart';
|
||||
export 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
||||
|
||||
final monospaceFont = Platform.isIOS ? 'Menlo' : 'monospace'; // FIXME:
|
||||
|
||||
class StorageKeys {
|
||||
static const account = 'account';
|
||||
static const github = 'github';
|
||||
|
@ -299,7 +299,7 @@ class EventItem extends StatelessWidget {
|
||||
color: PrimerColors.blue500,
|
||||
fontSize: 14,
|
||||
backgroundColor: Color(0xffeaf5ff),
|
||||
fontFamily: 'Menlo', // FIXME:
|
||||
fontFamily: monospaceFont,
|
||||
),
|
||||
),
|
||||
TextSpan(text: ' at '),
|
||||
@ -315,8 +315,7 @@ class EventItem extends StatelessWidget {
|
||||
style: TextStyle(
|
||||
color: PrimerColors.blue500,
|
||||
fontSize: 13,
|
||||
fontFamily: 'Menlo',
|
||||
fontFamilyFallback: ['Menlo', 'Roboto Mono'],
|
||||
fontFamily: monospaceFont,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 6),
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
import 'package:git_touch/utils/utils.dart';
|
||||
import 'package:primer/primer.dart';
|
||||
|
||||
class MarkdownView extends StatelessWidget {
|
||||
@ -23,7 +24,7 @@ class MarkdownView extends StatelessWidget {
|
||||
code: _basicStyle.copyWith(
|
||||
fontSize: 16 * 0.85,
|
||||
height: 1.45,
|
||||
fontFamily: 'monospace', // FIXME:
|
||||
fontFamily: monospaceFont,
|
||||
),
|
||||
h1: _hStyle.copyWith(fontSize: 32),
|
||||
h2: _hStyle.copyWith(fontSize: 24),
|
||||
|
@ -106,14 +106,14 @@ class RepoItem extends StatelessWidget {
|
||||
),
|
||||
],
|
||||
),
|
||||
payload['description'] == null ||
|
||||
(payload['description'] as String).isEmpty
|
||||
? null
|
||||
: Text(
|
||||
payload['description'],
|
||||
style: TextStyle(
|
||||
color: PrimerColors.gray700, fontSize: 14),
|
||||
),
|
||||
if (payload['description'] != null &&
|
||||
(payload['description'] as String).isNotEmpty)
|
||||
Text(
|
||||
payload['description'],
|
||||
style: TextStyle(
|
||||
color: PrimerColors.gray700,
|
||||
fontSize: inRepoScreen ? 15 : 14),
|
||||
),
|
||||
if (!inRepoScreen) _buildStatus(),
|
||||
]),
|
||||
),
|
||||
|
@ -40,6 +40,8 @@ class TableView extends StatelessWidget {
|
||||
static final _seperator = BorderView();
|
||||
|
||||
Widget _buildItem(TableViewItem item) {
|
||||
if (item == null) return null;
|
||||
|
||||
var widget = Container(
|
||||
height: 44,
|
||||
child: Row(children: [
|
||||
|
54
lib/widgets/user_item.dart
Normal file
54
lib/widgets/user_item.dart
Normal file
@ -0,0 +1,54 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:git_touch/widgets/avatar.dart';
|
||||
import 'package:primer/primer.dart';
|
||||
|
||||
class UserItem extends StatelessWidget {
|
||||
final String login;
|
||||
final String name;
|
||||
final String avatarUrl;
|
||||
final String bio;
|
||||
|
||||
UserItem(this.login, {this.name, this.avatarUrl, this.bio});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Avatar(url: avatarUrl, size: 24),
|
||||
SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
name ?? login,
|
||||
style: TextStyle(
|
||||
color: PrimerColors.blue500,
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 8),
|
||||
Text(
|
||||
login,
|
||||
style: TextStyle(color: PrimerColors.gray700, fontSize: 16),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 6),
|
||||
if (bio != null && bio.isNotEmpty)
|
||||
Text(
|
||||
bio,
|
||||
style: TextStyle(color: PrimerColors.gray700, fontSize: 15),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user