From 4e441d886116f1d9fea61b77cb2675d864130e26 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Sat, 6 Feb 2021 20:35:52 +0100 Subject: [PATCH] change: Minor design improvements --- .../default_app_bar_search_field.dart | 3 ++ lib/l10n/intl_en.arb | 5 +++ lib/views/archive.dart | 17 -------- lib/views/home_view_parts/chat_list.dart | 18 ++++---- lib/views/home_view_parts/contact_list.dart | 43 ++++++++++++++++--- lib/views/home_view_parts/discover.dart | 25 ++++++++--- lib/views/home_view_parts/settings.dart | 5 +++ lib/views/homeserver_picker.dart | 1 + 8 files changed, 80 insertions(+), 37 deletions(-) diff --git a/lib/components/default_app_bar_search_field.dart b/lib/components/default_app_bar_search_field.dart index 1212f64e..b6234c7f 100644 --- a/lib/components/default_app_bar_search_field.dart +++ b/lib/components/default_app_bar_search_field.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; class DefaultAppBarSearchField extends StatefulWidget { final TextEditingController searchController; final void Function(String) onChanged; + final void Function(String) onSubmit; final Widget suffix; final bool autofocus; final String prefixText; @@ -15,6 +16,7 @@ class DefaultAppBarSearchField extends StatefulWidget { Key key, this.searchController, this.onChanged, + this.onSubmit, this.suffix, this.autofocus = false, this.prefixText, @@ -75,6 +77,7 @@ class DefaultAppBarSearchFieldState extends State { onChanged: widget.onChanged, focusNode: _focusNode, readOnly: widget.readOnly, + onSubmitted: widget.onSubmit, decoration: InputDecoration( prefixText: widget.prefixText, enabledBorder: OutlineInputBorder( diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 86b9222b..0232c4f5 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -87,6 +87,11 @@ "type": "text", "placeholders": {} }, + "noPublicRoomsFound": "No public rooms found...", + "@noPublicRoomsFound": { + "type": "text", + "placeholders": {} + }, "areYouSureYouWantToLogout": "Are you sure you want to log out?", "@areYouSureYouWantToLogout": { "type": "text", diff --git a/lib/views/archive.dart b/lib/views/archive.dart index ba7e7ecf..7b41b1e0 100644 --- a/lib/views/archive.dart +++ b/lib/views/archive.dart @@ -17,28 +17,12 @@ class _ArchiveState extends State { return await Matrix.of(context).client.archive; } - final ScrollController _scrollController = ScrollController(); - bool _scrolledToTop = true; - - @override - void initState() { - _scrollController.addListener(() async { - if (_scrollController.position.pixels > 0 && _scrolledToTop) { - setState(() => _scrolledToTop = false); - } else if (_scrollController.position.pixels == 0 && !_scrolledToTop) { - setState(() => _scrolledToTop = true); - } - }); - super.initState(); - } - @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( leading: BackButton(), title: Text(L10n.of(context).archive), - elevation: _scrolledToTop ? 0 : null, ), body: FutureBuilder>( future: getArchive(context), @@ -48,7 +32,6 @@ class _ArchiveState extends State { } else { archive = snapshot.data; return ListView.builder( - controller: _scrollController, itemCount: archive.length, itemBuilder: (BuildContext context, int i) => ChatListItem( archive[i], diff --git a/lib/views/home_view_parts/chat_list.dart b/lib/views/home_view_parts/chat_list.dart index d55cd265..71233a21 100644 --- a/lib/views/home_view_parts/chat_list.dart +++ b/lib/views/home_view_parts/chat_list.dart @@ -213,14 +213,16 @@ class _ChatListState extends State { size: 80, color: Colors.grey, ), - Text( - searchMode - ? L10n.of(context).noRoomsFound - : L10n.of(context).startYourFirstChat, - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.grey, - fontSize: 16, + Center( + child: Text( + searchMode + ? L10n.of(context).noRoomsFound + : L10n.of(context).startYourFirstChat, + textAlign: TextAlign.start, + style: TextStyle( + color: Colors.grey, + fontSize: 16, + ), ), ), ], diff --git a/lib/views/home_view_parts/contact_list.dart b/lib/views/home_view_parts/contact_list.dart index d606f361..58cf3483 100644 --- a/lib/views/home_view_parts/contact_list.dart +++ b/lib/views/home_view_parts/contact_list.dart @@ -5,6 +5,7 @@ import 'package:fluffychat/components/avatar.dart'; import 'package:fluffychat/components/default_app_bar_search_field.dart'; import 'package:fluffychat/components/list_items/contact_list_tile.dart'; import 'package:fluffychat/components/matrix.dart'; +import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:flutter/material.dart'; import '../../utils/client_presence_extension.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -83,13 +84,41 @@ class _ContactListState extends State { .contains(_searchQuery.toLowerCase())) .toList(); if (contactList.isEmpty) { - return Container( - padding: EdgeInsets.all(16), - alignment: Alignment.center, - child: Text( - 'No contacts found...', - textAlign: TextAlign.center, - ), + return Column( + children: [ + SizedBox(height: 32), + Icon( + Icons.people_outlined, + size: 80, + color: Colors.grey, + ), + RaisedButton( + elevation: 7, + color: Theme.of(context).primaryColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.share_outlined, color: Colors.white), + SizedBox(width: 16), + Text( + L10n.of(context).inviteContact, + style: TextStyle( + color: Colors.white, + fontSize: 16, + ), + ), + ], + ), + onPressed: () => FluffyShare.share( + L10n.of(context).inviteText( + Matrix.of(context).client.userID, + 'https://matrix.to/#/${Matrix.of(context).client.userID}'), + context), + ), + ], ); } return ListView.builder( diff --git a/lib/views/home_view_parts/discover.dart b/lib/views/home_view_parts/discover.dart index 47cffe5f..850356a6 100644 --- a/lib/views/home_view_parts/discover.dart +++ b/lib/views/home_view_parts/discover.dart @@ -173,11 +173,26 @@ class _DiscoverState extends State { } final publicRoomsResponse = snapshot.data; if (publicRoomsResponse.chunk.isEmpty) { - return Center( - child: Text( - 'No public groups found...', - textAlign: TextAlign.center, - ), + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox(height: 32), + Icon( + Icons.search_outlined, + size: 80, + color: Colors.grey, + ), + Center( + child: Text( + L10n.of(context).noPublicRoomsFound, + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.grey, + fontSize: 16, + ), + ), + ), + ], ); } return GridView.builder( diff --git a/lib/views/home_view_parts/settings.dart b/lib/views/home_view_parts/settings.dart index 9c3c11f7..56d49cc9 100644 --- a/lib/views/home_view_parts/settings.dart +++ b/lib/views/home_view_parts/settings.dart @@ -405,6 +405,11 @@ class _SettingsState extends State { AdaptivePageLayout.of(context).pushNamed('/settings/emotes'), trailing: Icon(Icons.insert_emoticon_outlined), ), + ListTile( + title: Text(L10n.of(context).archive), + onTap: () => AdaptivePageLayout.of(context).pushNamed('/archive'), + trailing: Icon(Icons.archive_outlined), + ), Divider(thickness: 1), ListTile( title: Text( diff --git a/lib/views/homeserver_picker.dart b/lib/views/homeserver_picker.dart index 583d0716..e6a855c0 100644 --- a/lib/views/homeserver_picker.dart +++ b/lib/views/homeserver_picker.dart @@ -129,6 +129,7 @@ class _HomeserverPickerState extends State { padding: padding, onChanged: (s) => _domain = s, readOnly: !AppConfig.allowOtherHomeservers, + onSubmit: (_) => _checkHomeserverAction(context), ), elevation: 0, ),