diff --git a/lib/main.dart b/lib/main.dart index 936dac7..9634dfa 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -24,10 +24,8 @@ void main() { class MyApp extends StatelessWidget { @override - Widget build(BuildContext context) { - return Observer( - builder: (ctx) { - return MaterialApp( + Widget build(BuildContext context) => Observer( + builder: (ctx) => MaterialApp( title: 'Flutter Demo', themeMode: ctx.watch().theme, darkTheme: ThemeData.dark(), @@ -37,10 +35,8 @@ class MyApp extends StatelessWidget { ), home: UserProfileTab(User.fromJson(jsonDecode( '''{"id":13917,"name":"shilangyu","preferred_username":null,"password_encrypted":"","email":"xmarcinmarcin@gmail.com","avatar":null,"admin":false,"banned":false,"published":"2020-08-23T07:13:23.229279","updated":"2020-08-29T21:11:11.508707","show_nsfw":true,"theme":"minty","default_sort_type":0,"default_listing_type":1,"lang":"browser","show_avatars":true,"send_notifications_to_email":false,"matrix_user_id":null,"actor_id":"https://dev.lemmy.ml/u/shilangyu","bio":null,"local":true,"private_key":null,"public_key":null,"last_refreshed_at":"2020-08-23T07:13:23.229279","banner":null}'''))), - ); - }, - ); - } + ), + ); } class MyHomePage extends StatefulWidget { diff --git a/lib/widgets/post.dart b/lib/widgets/post.dart index 2001b26..dd78bf1 100644 --- a/lib/widgets/post.dart +++ b/lib/widgets/post.dart @@ -43,155 +43,152 @@ class PostWidget extends StatelessWidget { ); } - Widget _info() { - return Column(children: [ - Padding( - padding: const EdgeInsets.all(10), - child: Row(children: [ - Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (post.communityIcon != null) - Padding( - padding: const EdgeInsets.only(right: 10), - child: InkWell( - onTap: () => print('GO TO COMMUNITY'), - child: SizedBox( - height: 40, - width: 40, - child: CachedNetworkImage( - imageBuilder: (context, imageProvider) => Container( - decoration: BoxDecoration( - shape: BoxShape.circle, - image: DecorationImage( - fit: BoxFit.cover, - image: imageProvider, + Widget _info() => Column(children: [ + Padding( + padding: const EdgeInsets.all(10), + child: Row(children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (post.communityIcon != null) + Padding( + padding: const EdgeInsets.only(right: 10), + child: InkWell( + onTap: () => print('GO TO COMMUNITY'), + child: SizedBox( + height: 40, + width: 40, + child: CachedNetworkImage( + imageBuilder: (context, imageProvider) => Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + image: DecorationImage( + fit: BoxFit.cover, + image: imageProvider, + ), ), ), + imageUrl: post.communityIcon, + errorWidget: (context, url, error) => + Text(error.toString()), ), - imageUrl: post.communityIcon, - errorWidget: (context, url, error) => - Text(error.toString()), ), ), ), - ), - ], - ), - Column( - children: [ - Row(children: [ - RichText( - overflow: TextOverflow.ellipsis, // @TODO: fix overflowing - text: TextSpan( - style: TextStyle( - fontSize: 15, color: _theme.textTheme.bodyText1.color), - children: [ - TextSpan( - text: '!', - style: TextStyle(fontWeight: FontWeight.w300)), - TextSpan( - text: post.communityName, - style: TextStyle(fontWeight: FontWeight.w600), - recognizer: TapGestureRecognizer() - ..onTap = () => print('GO TO COMMUNITY')), - TextSpan( - text: '@', - style: TextStyle(fontWeight: FontWeight.w300)), - TextSpan( - text: hostUrl, - style: TextStyle(fontWeight: FontWeight.w600), - recognizer: TapGestureRecognizer() - ..onTap = () => print('GO TO INSTANCE')), - ], - ), - ) - ]), - Row(children: [ - RichText( - overflow: TextOverflow.ellipsis, + ], + ), + Column( + children: [ + Row(children: [ + RichText( + overflow: TextOverflow.ellipsis, // @TODO: fix overflowing text: TextSpan( style: TextStyle( - fontSize: 13, + fontSize: 15, color: _theme.textTheme.bodyText1.color), children: [ TextSpan( - text: 'by', + text: '!', style: TextStyle(fontWeight: FontWeight.w300)), TextSpan( - text: - ''' ${post.creatorPreferredUsername ?? post.creatorName}''', - style: TextStyle(fontWeight: FontWeight.w600), - recognizer: TapGestureRecognizer() - ..onTap = () => print('GO TO USER'), - ), + text: post.communityName, + style: TextStyle(fontWeight: FontWeight.w600), + recognizer: TapGestureRecognizer() + ..onTap = () => print('GO TO COMMUNITY')), TextSpan( - text: - ''' 路 ${timeago.format(post.published, locale: 'en_short')}'''), - if (linkPostDomain != null) - TextSpan(text: ' 路 $linkPostDomain'), - if (post.locked) TextSpan(text: ' 路 馃敀'), + text: '@', + style: TextStyle(fontWeight: FontWeight.w300)), + TextSpan( + text: hostUrl, + style: TextStyle(fontWeight: FontWeight.w600), + recognizer: TapGestureRecognizer() + ..onTap = () => print('GO TO INSTANCE')), ], - )) - ]), - ], - crossAxisAlignment: CrossAxisAlignment.start, - ), - Spacer(), - Column( - children: [ - IconButton( - onPressed: () => print('POPUP MENU'), - icon: Icon(Icons.more_vert), - ) - ], - ) - ]), - ), - ]); - } - - Widget _title() { - return Padding( - padding: const EdgeInsets.only(left: 10, right: 10, bottom: 10), - child: Row( - children: [ - Flexible( - child: Text( - '${post.name}', - textAlign: TextAlign.left, - softWrap: true, - style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600), + ), + ) + ]), + Row(children: [ + RichText( + overflow: TextOverflow.ellipsis, + text: TextSpan( + style: TextStyle( + fontSize: 13, + color: _theme.textTheme.bodyText1.color), + children: [ + TextSpan( + text: 'by', + style: TextStyle(fontWeight: FontWeight.w300)), + TextSpan( + text: + ''' ${post.creatorPreferredUsername ?? post.creatorName}''', + style: TextStyle(fontWeight: FontWeight.w600), + recognizer: TapGestureRecognizer() + ..onTap = () => print('GO TO USER'), + ), + TextSpan( + text: + ''' 路 ${timeago.format(post.published, locale: 'en_short')}'''), + if (linkPostDomain != null) + TextSpan(text: ' 路 $linkPostDomain'), + if (post.locked) TextSpan(text: ' 路 馃敀'), + ], + )) + ]), + ], + crossAxisAlignment: CrossAxisAlignment.start, ), - ), - if (post.thumbnailUrl != null) - InkWell( - onTap: () => print('OPEN LINK'), - child: Stack(children: [ - ClipRRect( - borderRadius: BorderRadius.circular(20), - child: CachedNetworkImage( - imageUrl: post.thumbnailUrl, - width: 70, - height: 70, - fit: BoxFit.cover, - errorWidget: (context, url, error) => - Text(error.toString()), - )), - Positioned( - top: 8, - right: 8, - child: Icon( - Icons.launch, - size: 20, - ), + Spacer(), + Column( + children: [ + IconButton( + onPressed: () => print('POPUP MENU'), + icon: Icon(Icons.more_vert), ) - ]), + ], ) - ], - ), - ); - } + ]), + ), + ]); + + Widget _title() => Padding( + padding: const EdgeInsets.only(left: 10, right: 10, bottom: 10), + child: Row( + children: [ + Flexible( + child: Text( + '${post.name}', + textAlign: TextAlign.left, + softWrap: true, + style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600), + ), + ), + if (post.thumbnailUrl != null) + InkWell( + onTap: () => print('OPEN LINK'), + child: Stack(children: [ + ClipRRect( + borderRadius: BorderRadius.circular(20), + child: CachedNetworkImage( + imageUrl: post.thumbnailUrl, + width: 70, + height: 70, + fit: BoxFit.cover, + errorWidget: (context, url, error) => + Text(error.toString()), + )), + Positioned( + top: 8, + right: 8, + child: Icon( + Icons.launch, + size: 20, + ), + ) + ]), + ) + ], + ), + ); Widget _content() { if (post.url == null) return Container(); @@ -252,33 +249,32 @@ class PostWidget extends StatelessWidget { ); } - Widget _actions() { - return Padding( - padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), - child: Row( - children: [ - Icon(Icons.comment), - post.numberOfComments == 1 - ? Text(' 1 comment') - : Text(' ${post.numberOfComments} comments'), - Spacer(), - IconButton( - icon: Icon(Icons.share), - onPressed: () => Share.text('Share post url', post.apId, - 'text/plain')), // @TODO: find a way to mark it as url - IconButton( - icon: post.saved == true - ? Icon(Icons.bookmark) - : Icon(Icons.bookmark_border), - onPressed: () => print('SAVE')), - IconButton( - icon: Icon(Icons.arrow_upward), onPressed: () => print('UPVOTE')), - Text(post.score.toString()), - IconButton( - icon: Icon(Icons.arrow_downward), - onPressed: () => print('DOWNVOTE')), - ], - ), - ); - } + Widget _actions() => Padding( + padding: const EdgeInsets.fromLTRB(10, 5, 10, 5), + child: Row( + children: [ + Icon(Icons.comment), + post.numberOfComments == 1 + ? Text(' 1 comment') + : Text(' ${post.numberOfComments} comments'), + Spacer(), + IconButton( + icon: Icon(Icons.share), + onPressed: () => Share.text('Share post url', post.apId, + 'text/plain')), // @TODO: find a way to mark it as url + IconButton( + icon: post.saved == true + ? Icon(Icons.bookmark) + : Icon(Icons.bookmark_border), + onPressed: () => print('SAVE')), + IconButton( + icon: Icon(Icons.arrow_upward), + onPressed: () => print('UPVOTE')), + Text(post.score.toString()), + IconButton( + icon: Icon(Icons.arrow_downward), + onPressed: () => print('DOWNVOTE')), + ], + ), + ); }