From f3b547668c84586484b1db20d8fdd5b638891f01 Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Tue, 3 Sep 2019 21:39:00 +0800 Subject: [PATCH] feat: add more information for users screen --- lib/screens/users.dart | 58 ++++++++++++++++++++++++++++++++++++++++-- lib/utils/utils.dart | 32 +++++++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/lib/screens/users.dart b/lib/screens/users.dart index fe1c823..29b2d52 100644 --- a/lib/screens/users.dart +++ b/lib/screens/users.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:primer/primer.dart'; import '../scaffolds/list.dart'; import '../providers/settings.dart'; import '../utils/utils.dart'; @@ -46,8 +47,12 @@ class _UsersScreenState extends State { endCursor } nodes { + name login avatarUrl + bio + company + location } } } @@ -68,10 +73,59 @@ class _UsersScreenState extends State { child: Container( padding: EdgeInsets.all(10), child: Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Avatar(url: payload['avatarUrl']), - Padding(padding: EdgeInsets.only(left: 10)), - Text(payload['login'], style: TextStyle(fontSize: 18)) + SizedBox(width: 10), + DefaultTextStyle( + style: TextStyle(color: PrimerColors.gray600, fontSize: 13), + child: Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: join(SizedBox(height: 8), [ + Row( + children: join(SizedBox(width: 10), [ + ifNotNull( + payload['name'] as String, + (String name) => Text( + name, + style: TextStyle( + fontSize: 16, color: PrimerColors.gray900), + ), + ), + Text(payload['login'], style: TextStyle(fontSize: 14)), + ]), + ), + (payload['bio'] == null || + (payload['bio'] as String).trim().isEmpty) + ? null + : Text(payload['bio']), + Row( + children: join(SizedBox(width: 10), [ + ifNotNull( + payload['company'] as String, + (String company) => Row(children: [ + Icon(Octicons.organization, + size: 14, color: PrimerColors.gray600), + SizedBox(width: 2), + Text(company) + ]), + ), + ifNotNull( + payload['location'] as String, + (String location) => Row(children: [ + Icon(Octicons.location, + size: 14, color: PrimerColors.gray600), + SizedBox(width: 2), + Text(location) + ]), + ), + ]), + ), + ]), + ), + ), + ) ], ), ), diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 46dc355..278e584 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -86,3 +86,35 @@ primaryLanguage { name } '''; + +List join(T seperator, List xs) { + List result = []; + xs.asMap().forEach((index, x) { + if (x == null) return; + + result.add(x); + if (index < xs.length - 1) { + result.add(seperator); + } + }); + + return result; +} + +List joinAll(T seperator, List> xss) { + List result = []; + xss.asMap().forEach((index, x) { + if (x == null || x.isEmpty) return; + + result.addAll(x); + if (index < xss.length - 1) { + result.add(seperator); + } + }); + + return result; +} + +K ifNotNull(T value, K Function(T v) builder) { + return value == null ? null : builder(value); +}