refactor: extract link widget

This commit is contained in:
Rongjian Zhang 2019-01-31 14:37:25 +08:00
parent cde5b21dcd
commit 15f86d99b1
14 changed files with 148 additions and 129 deletions

View File

@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart';
import 'dart:async';
import 'package:rxdart/subjects.dart';
import 'package:rxdart/rxdart.dart';
import 'package:git_touch/utils/utils.dart';
import '../utils/utils.dart';
Future search(String keyword, String type) async {
var data = await query('''

View File

@ -2,7 +2,7 @@ import 'dart:async';
import 'package:flutter/widgets.dart';
import 'package:rxdart/subjects.dart';
import 'package:rxdart/rxdart.dart';
import 'package:git_touch/utils/utils.dart';
import '../utils/utils.dart';
Future queryUser(String login) async {
var data = await query('''

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/utils/utils.dart';
import 'package:git_touch/widgets/widgets.dart';
import '../utils/utils.dart';
import '../widgets/widgets.dart';
Future queryIssue(int id, String owner, String name) async {
var data = await query('''

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/utils/utils.dart';
import 'package:git_touch/widgets/widgets.dart';
import '../utils/utils.dart';
import '../widgets/widgets.dart';
Future queryPullRequest(int id, String owner, String name) async {
var data = await query('''

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/utils/utils.dart';
import '../utils/utils.dart';
Future queryUser(String login) async {
var data = await query('''

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import '../screens/screens.dart';
import 'link.dart';
class Avatar extends StatelessWidget {
final String login;
@ -10,19 +11,16 @@ class Avatar extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Material(
child: InkWell(
splashColor: Colors.transparent,
onTap: () {
Navigator.of(context).push(
CupertinoPageRoute(builder: (_) => UserScreen(login)),
);
},
child: CircleAvatar(
backgroundColor: Colors.transparent,
backgroundImage: NetworkImage(url),
radius: 18,
),
return Link(
onTap: () {
Navigator.of(context).push(
CupertinoPageRoute(builder: (_) => UserScreen(login)),
);
},
child: CircleAvatar(
backgroundColor: Colors.transparent,
backgroundImage: NetworkImage(url),
radius: 18,
),
);
}

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:git_touch/widgets/widgets.dart';
import 'package:git_touch/utils/utils.dart';
import '../widgets/widgets.dart';
import '../utils/utils.dart';
class CommentItem extends StatelessWidget {
final Map<String, dynamic> item;

View File

@ -4,6 +4,7 @@ import 'package:flutter/gestures.dart';
import '../screens/screens.dart';
import '../utils/utils.dart';
import '../widgets/widgets.dart';
import '../widgets/link.dart';
/// Events types:
///
@ -159,46 +160,44 @@ class EventItem extends StatelessWidget {
@override
build(context) {
return Material(
child: InkWell(
onTap: () {},
child: Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border(
bottom:
BorderSide(color: CupertinoColors.lightBackgroundGray))),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
Avatar(event.actor.login, event.actor.avatarUrl),
Padding(padding: EdgeInsets.only(left: 10)),
Expanded(
child: RichText(
text: TextSpan(
style: TextStyle(color: Color(0xff24292e), height: 1.2),
children: <TextSpan>[
_buildLink(context, event.actor.login,
() => UserScreen(event.actor.login)),
_buildEvent(context),
],
),
return Link(
onTap: () {},
child: Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border(
bottom:
BorderSide(color: CupertinoColors.lightBackgroundGray))),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
Avatar(event.actor.login, event.actor.avatarUrl),
Padding(padding: EdgeInsets.only(left: 10)),
Expanded(
child: RichText(
text: TextSpan(
style: TextStyle(color: Color(0xff24292e), height: 1.2),
children: <TextSpan>[
_buildLink(context, event.actor.login,
() => UserScreen(event.actor.login)),
_buildEvent(context),
],
),
),
Padding(padding: EdgeInsets.only(left: 10)),
Icon(_buildIconData(context),
color: CupertinoColors.inactiveGray),
],
),
Container(
padding: EdgeInsets.only(left: 42, top: 8),
child: Text(_buildComment(),
overflow: TextOverflow.ellipsis,
style: TextStyle(color: Color(0xffaaaaaa))))
],
),
),
Padding(padding: EdgeInsets.only(left: 10)),
Icon(_buildIconData(context),
color: CupertinoColors.inactiveGray),
],
),
Container(
padding: EdgeInsets.only(left: 42, top: 8),
child: Text(_buildComment(),
overflow: TextOverflow.ellipsis,
style: TextStyle(color: Color(0xffaaaaaa))))
],
),
),
);

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/widgets/widgets.dart';
import '../widgets/widgets.dart';
// Widget of issue screen and pull request screen
class IssuePullRequestScreen extends StatefulWidget {

26
lib/widgets/link.dart Normal file
View File

@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
import '../providers/settings.dart';
class Link extends StatelessWidget {
final Widget child;
final GestureTapCallback onTap;
Link({@required this.child, @required this.onTap});
@override
Widget build(BuildContext context) {
return Material(
child: Ink(
color: Colors.white,
child: InkWell(
splashColor:
SettingsProvider.of(context).layout == LayoutMap.cupertino
? Colors.transparent
: null,
onTap: onTap,
child: child,
),
),
);
}
}

View File

@ -1,5 +1,5 @@
import 'package:flutter/cupertino.dart';
import 'package:git_touch/utils/utils.dart';
import '../utils/utils.dart';
typedef Future<void> Refresh();
typedef Widget BuildWithContent(

View File

@ -1,7 +1,8 @@
import 'dart:core';
import 'package:flutter/material.dart' hide Notification;
import 'package:flutter/cupertino.dart' hide Notification;
import 'package:git_touch/utils/utils.dart';
import '../utils/utils.dart';
import 'link.dart';
class NotificationItem extends StatelessWidget {
const NotificationItem({
@ -38,61 +39,58 @@ class NotificationItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Material(
child: InkWell(
// splashColor: Colors.transparent,
onTap: () {
Navigator.of(context).push(
CupertinoPageRoute(builder: (context) => _buildRoute(item)),
);
},
child: Container(
child: Row(
children: <Widget>[
Container(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Icon(
_buildIconData(item.subject.type),
// color: CupertinoColors.inactiveGray,
),
return Link(
onTap: () {
Navigator.of(context).push(
CupertinoPageRoute(builder: (context) => _buildRoute(item)),
);
},
child: Container(
child: Row(
children: <Widget>[
Container(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Icon(
_buildIconData(item.subject.type),
// color: CupertinoColors.inactiveGray,
),
Expanded(
child: Container(
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
// color: Colors.grey,
))),
child: Row(
children: <Widget>[
Expanded(
child: Container(
padding: EdgeInsets.symmetric(vertical: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(item.subject.title,
style: TextStyle(height: 1)),
Padding(padding: EdgeInsets.only(top: 4)),
Text(TimeAgo.format(item.updatedAt),
style: TextStyle(fontSize: 12))
],
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
// color: Colors.grey,
))),
child: Row(
children: <Widget>[
Expanded(
child: Container(
padding: EdgeInsets.symmetric(vertical: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(item.subject.title,
style: TextStyle(height: 1)),
Padding(padding: EdgeInsets.only(top: 4)),
Text(TimeAgo.format(item.updatedAt),
style: TextStyle(fontSize: 12))
],
),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Icon(
Octicons.check,
// color: CupertinoColors.inactiveGray,
),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Icon(
Octicons.check,
// color: CupertinoColors.inactiveGray,
),
],
),
),
],
),
),
],
),
),
],
),
),
);

View File

@ -1,8 +1,8 @@
import 'dart:core';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/utils/utils.dart';
import 'package:git_touch/widgets/widgets.dart';
import '../utils/utils.dart';
import '../widgets/widgets.dart';
class TimelineItem extends StatelessWidget {
final Map<String, dynamic> item;

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:git_touch/screens/screens.dart';
import '../screens/screens.dart';
import 'link.dart';
final style = TextStyle(fontWeight: FontWeight.w600);
@ -15,21 +16,18 @@ class UserName extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Material(
child: InkWell(
splashColor: Colors.transparent,
onTap: () {
Navigator.of(context).push(
CupertinoPageRoute(builder: (_) => UserScreen(login)),
);
},
child: Container(
padding: EdgeInsets.all(2),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(4)),
),
child: Text(login, style: style),
return Link(
onTap: () {
Navigator.of(context).push(
CupertinoPageRoute(builder: (_) => UserScreen(login)),
);
},
child: Container(
padding: EdgeInsets.all(2),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(4)),
),
child: Text(login, style: style),
),
);
}