From 4b8ad1bde96242b7a0e4cd7b6aa4d33877c63176 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Tue, 19 Jan 2021 21:40:46 +0100 Subject: [PATCH] chore: Change startpage design --- lib/l10n/intl_en.arb | 4 +- lib/utils/platform_infos.dart | 4 + lib/views/homeserver_picker.dart | 142 ++++++++++++++++++------------- 3 files changed, 88 insertions(+), 62 deletions(-) diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index ae0691c0..f01001be 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -142,8 +142,8 @@ "type": "text", "placeholders": {} }, - "byDefaultYouWillBeConnectedTo": "By default you will be connected to {homeserver}", - "@byDefaultYouWillBeConnectedTo": { + "youWillBeConnectedTo": "You will be connected to {homeserver}", + "@youWillBeConnectedTo": { "type": "text", "placeholders": { "homeserver": {} diff --git a/lib/utils/platform_infos.dart b/lib/utils/platform_infos.dart index f960d4bd..b274df3b 100644 --- a/lib/utils/platform_infos.dart +++ b/lib/utils/platform_infos.dart @@ -39,6 +39,10 @@ abstract class PlatformInfos { context: context, children: [ Text('Version: $version'), + RaisedButton( + child: Text(L10n.of(context).privacy), + onPressed: () => launch(AppConfig.privacyUrl), + ), RaisedButton( child: Text(L10n.of(context).sourceCode), onPressed: () => launch(AppConfig.sourceCodeUrl), diff --git a/lib/views/homeserver_picker.dart b/lib/views/homeserver_picker.dart index 0762923a..480c4c6a 100644 --- a/lib/views/homeserver_picker.dart +++ b/lib/views/homeserver_picker.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:adaptive_page_layout/adaptive_page_layout.dart'; import 'package:famedlysdk/famedlysdk.dart'; import 'package:fluffychat/components/matrix.dart'; @@ -9,7 +10,6 @@ import 'package:fluffychat/utils/platform_infos.dart'; import 'package:flushbar/flushbar_helper.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter/material.dart'; -import 'package:url_launcher/url_launcher.dart'; import '../utils/localized_exception_extension.dart'; class HomeserverPicker extends StatefulWidget { @@ -18,13 +18,11 @@ class HomeserverPicker extends StatefulWidget { } class _HomeserverPickerState extends State { - final TextEditingController _controller = - TextEditingController(text: AppConfig.defaultHomeserver); - bool _isLoading = false; + String _domain = AppConfig.defaultHomeserver; void _checkHomeserverAction(BuildContext context) async { - var homeserver = _controller.text; + var homeserver = _domain; if (!homeserver.startsWith('https://')) { homeserver = 'https://$homeserver'; @@ -70,40 +68,29 @@ class _HomeserverPickerState extends State { } } + void _changeHomeserverAction(BuildContext context) async { + final input = await showTextInputDialog( + context: context, + title: L10n.of(context).changeTheHomeserver, + textFields: [ + DialogTextField( + keyboardType: TextInputType.url, + prefixText: 'https://', + hintText: AppConfig.defaultHomeserver, + ), + ], + ); + if (input?.single?.isNotEmpty ?? false) { + setState(() => _domain = input.single); + } + } + @override Widget build(BuildContext context) { final padding = EdgeInsets.symmetric( horizontal: max((MediaQuery.of(context).size.width - 600) / 2, 0), ); return Scaffold( - appBar: AppBar( - title: Container( - height: 40, - padding: padding, - child: Material( - color: Theme.of(context).secondaryHeaderColor, - borderRadius: BorderRadius.circular(32), - child: TextField( - controller: _controller, - autocorrect: false, - readOnly: !AppConfig.allowOtherHomeservers, - decoration: InputDecoration( - prefixText: 'https://', - suffix: Icon(Icons.domain_outlined), - contentPadding: EdgeInsets.only( - left: 24, - right: 16, - ), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(32), - ), - labelText: L10n.of(context).changeTheHomeserver, - hintText: AppConfig.defaultHomeserver, - ), - ), - ), - ), - ), body: SafeArea( child: Padding( padding: padding, @@ -125,41 +112,45 @@ class _HomeserverPickerState extends State { ), ), SizedBox(height: 16), - Hero( - tag: 'loginButton', - child: Container( - width: double.infinity, - height: 50, - padding: EdgeInsets.symmetric(horizontal: 12), - child: RaisedButton( - elevation: 7, - color: Theme.of(context).primaryColor, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(6), - ), - child: _isLoading - ? LinearProgressIndicator() - : Text( - L10n.of(context).connect.toUpperCase(), - style: TextStyle(color: Colors.white, fontSize: 16), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Material( + borderRadius: BorderRadius.circular(16), + elevation: 2, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox(height: 8), + Text( + L10n.of(context).youWillBeConnectedTo(_domain), + style: TextStyle(fontSize: 16), + ), + FlatButton( + padding: EdgeInsets.all(8), + child: Text( + L10n.of(context).changeTheHomeserver, + style: TextStyle( + decoration: TextDecoration.underline, + fontSize: 16, + color: Colors.blue, ), - onPressed: _isLoading - ? null - : () => _checkHomeserverAction(context), + ), + onPressed: () => _changeHomeserverAction(context), + ), + ], ), ), ), - SentrySwitchListTile(), Wrap( alignment: WrapAlignment.center, children: [ FlatButton( padding: EdgeInsets.all(8), child: Text( - L10n.of(context).about, + L10n.of(context).privacy, style: TextStyle( decoration: TextDecoration.underline, - fontSize: 16, + color: Colors.blueGrey, ), ), onPressed: () => PlatformInfos.showDialog(context), @@ -167,21 +158,52 @@ class _HomeserverPickerState extends State { FlatButton( padding: EdgeInsets.all(8), child: Text( - L10n.of(context).privacy, + L10n.of(context).about, style: TextStyle( decoration: TextDecoration.underline, - fontSize: 16, + color: Colors.blueGrey, ), ), - onPressed: () => launch(AppConfig.privacyUrl), + onPressed: () => PlatformInfos.showDialog(context), ), ], ), - SizedBox(height: 16), ], ), ), ), + bottomNavigationBar: Padding( + padding: padding, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Hero( + tag: 'loginButton', + child: Container( + width: double.infinity, + height: 50, + padding: EdgeInsets.symmetric(horizontal: 12), + child: RaisedButton( + elevation: 7, + color: Theme.of(context).primaryColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(6), + ), + child: _isLoading + ? LinearProgressIndicator() + : Text( + L10n.of(context).connect.toUpperCase(), + style: TextStyle(color: Colors.white, fontSize: 16), + ), + onPressed: + _isLoading ? null : () => _checkHomeserverAction(context), + ), + ), + ), + SentrySwitchListTile(), + ], + ), + ), ); } }