refactor: extract all avatar to one widget

This commit is contained in:
Rongjian Zhang 2019-03-09 17:03:33 +08:00
parent 549ef0fa15
commit 3de4ead6b2
6 changed files with 29 additions and 33 deletions

View File

@ -6,7 +6,8 @@ import '../utils/constants.dart';
import '../widgets/link.dart'; import '../widgets/link.dart';
import '../widgets/loading.dart'; import '../widgets/loading.dart';
import '../models/account.dart'; import '../models/account.dart';
import 'login_gitlab.dart'; import '../widgets/avatar.dart';
// import 'login_gitlab.dart';
class LoginScreen extends StatefulWidget { class LoginScreen extends StatefulWidget {
@override @override
@ -29,11 +30,7 @@ class _LoginScreenState extends State<LoginScreen> {
border: Border(bottom: BorderSide(color: Colors.black12)), border: Border(bottom: BorderSide(color: Colors.black12)),
), ),
child: Row(children: <Widget>[ child: Row(children: <Widget>[
CircleAvatar( Avatar(url: account.avatarUrl, size: 24),
backgroundColor: Colors.transparent,
backgroundImage: NetworkImage(account.avatarUrl),
radius: 24,
),
Padding(padding: EdgeInsets.only(left: 10)), Padding(padding: EdgeInsets.only(left: 10)),
Expanded( Expanded(
child: Column( child: Column(

View File

@ -209,11 +209,7 @@ class _UserScreenState extends State<UserScreen> {
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Avatar( Avatar(url: payload['avatarUrl'], size: 28),
login: widget.login,
url: payload['avatarUrl'],
size: 28,
),
Padding(padding: EdgeInsets.only(left: 10)), Padding(padding: EdgeInsets.only(left: 10)),
Expanded( Expanded(
child: Column( child: Column(

View File

@ -4,6 +4,7 @@ import '../providers/settings.dart';
import '../utils/utils.dart'; import '../utils/utils.dart';
import '../widgets/link.dart'; import '../widgets/link.dart';
import '../screens/user.dart'; import '../screens/user.dart';
import '../widgets/avatar.dart';
class UsersScreen extends StatefulWidget { class UsersScreen extends StatefulWidget {
final String login; final String login;
@ -54,11 +55,7 @@ class _UsersScreenState extends State<UsersScreen> {
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
CircleAvatar( Avatar(url: payload['avatarUrl']),
backgroundColor: Colors.transparent,
backgroundImage: NetworkImage(payload['avatarUrl']),
radius: 18,
),
Padding(padding: EdgeInsets.only(left: 10)), Padding(padding: EdgeInsets.only(left: 10)),
Text(payload['login'], style: TextStyle(fontSize: 18)) Text(payload['login'], style: TextStyle(fontSize: 18))
], ],

View File

@ -4,32 +4,38 @@ import '../screens/user.dart';
import 'link.dart'; import 'link.dart';
class Avatar extends StatelessWidget { class Avatar extends StatelessWidget {
final String login;
final String url; final String url;
final String login;
final double size; final double size;
Avatar({ Avatar({
@required this.login,
@required this.url, @required this.url,
this.size = 18, this.size = 18,
this.login,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Link( var avatar = ClipRRect(
screenBuilder: (_) => UserScreen(login), borderRadius: BorderRadius.circular(size),
child: ClipRRect( child: FadeInImage.assetNetwork(
borderRadius: BorderRadius.circular(size), placeholder: 'images/octoface.png',
child: FadeInImage.assetNetwork( image: url,
placeholder: 'images/octoface.png', width: 2 * size,
image: url, height: 2 * size,
width: 2 * size, fadeInDuration: Duration(milliseconds: 200),
height: 2 * size, fadeOutDuration: Duration(milliseconds: 100),
fadeInDuration: Duration(milliseconds: 200),
fadeOutDuration: Duration(milliseconds: 100),
),
), ),
material: false,
); );
if (login == null) {
return avatar;
} else {
return Link(
screenBuilder: (_) => UserScreen(login),
child: avatar,
material: false,
);
}
} }
} }

View File

@ -14,9 +14,9 @@ class CommentItem extends StatelessWidget {
return Column(children: <Widget>[ return Column(children: <Widget>[
Row(children: <Widget>[ Row(children: <Widget>[
Avatar( Avatar(
login: payload['author']['login'],
url: payload['author']['avatarUrl'], url: payload['author']['avatarUrl'],
size: 16, size: 16,
login: payload['author']['login'],
), ),
Padding(padding: EdgeInsets.only(left: 6)), Padding(padding: EdgeInsets.only(left: 6)),
Expanded( Expanded(

View File

@ -66,7 +66,7 @@ class EventItem extends StatelessWidget {
children: <Widget>[ children: <Widget>[
Row( Row(
children: <Widget>[ children: <Widget>[
Avatar(login: event.actorLogin, url: event.actorAvatarUrl), Avatar(url: event.actorAvatarUrl, login: event.actorLogin),
Padding(padding: EdgeInsets.only(left: 10)), Padding(padding: EdgeInsets.only(left: 10)),
Expanded( Expanded(
child: RichText( child: RichText(