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:future_loading_dialog/future_loading_dialog.dart'; import 'package:fluffychat/components/matrix.dart'; import 'package:fluffychat/app_config.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/utils/sentry_controller.dart'; import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; class HomeserverPicker extends StatelessWidget { Future _setHomeserverAction(BuildContext context) async { const prefix = 'https://'; final homeserver = await showTextInputDialog( title: L10n.of(context).enterYourHomeserver, context: context, textFields: [ DialogTextField( hintText: AppConfig.defaultHomeserver, prefixText: prefix, keyboardType: TextInputType.url, ) ], ); if (homeserver?.single?.isEmpty ?? true) return; _checkHomeserverAction(prefix + homeserver.single, context); } void _checkHomeserverAction(String homeserver, BuildContext context) async { if (await SentryController.getSentryStatus() == null || true) { await SentryController.toggleSentryAction(context); } if (!homeserver.startsWith('https://')) { homeserver = 'https://$homeserver'; } final success = await showFutureLoadingDialog( context: context, future: () => checkHomeserver(homeserver, Matrix.of(context).client)); if (success.result == true) { await AdaptivePageLayout.of(context) .pushNamed(AppConfig.enableRegistration ? '/signup' : '/login'); } } Future checkHomeserver(dynamic homeserver, Client client) async { await client.checkHomeserver(homeserver); return true; } @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: Padding( padding: EdgeInsets.symmetric( horizontal: max((MediaQuery.of(context).size.width - 600) / 2, 0)), child: Column( children: [ Expanded( child: ListView( children: [ Hero( tag: 'loginBanner', child: InkWell( onTap: () => showAboutDialog( context: context, children: [ RaisedButton( child: Text(L10n.of(context).privacy), onPressed: () => launch(AppConfig.privacyUrl), ) ], applicationIcon: Image.asset('assets/logo.png', width: 100, height: 100), applicationName: AppConfig.applicationName, ), child: Image.asset('assets/banner.png'), ), ), Padding( padding: const EdgeInsets.all(16.0), child: Text( AppConfig.applicationWelcomeMessage ?? L10n.of(context).welcomeText, textAlign: TextAlign.center, style: TextStyle( fontSize: 22, ), ), ), ], ), ), 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: Text( L10n.of(context).connect.toUpperCase(), style: TextStyle(color: Colors.white, fontSize: 16), ), onPressed: () => _checkHomeserverAction( AppConfig.defaultHomeserver, context), ), ), ), Padding( padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 16.0), child: Text( L10n.of(context).byDefaultYouWillBeConnectedTo( AppConfig.defaultHomeserver), textAlign: TextAlign.center, style: TextStyle( fontSize: 16, ), ), ), Wrap( children: [ if (AppConfig.allowOtherHomeservers) FlatButton( padding: EdgeInsets.all(8), child: Text( L10n.of(context).changeTheHomeserver, style: TextStyle( decoration: TextDecoration.underline, color: Theme.of(context).primaryColor, fontSize: 16, ), ), onPressed: () => _setHomeserverAction(context), ), FlatButton( padding: EdgeInsets.all(8), child: Text( L10n.of(context).privacy, style: TextStyle( decoration: TextDecoration.underline, fontSize: 16, ), ), onPressed: () => launch(AppConfig.privacyUrl), ), ], ), SizedBox(height: 16), ], ), ), ), ); } }