import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix_homeserver_recommendations/matrix_homeserver_recommendations.dart'; import 'package:url_launcher/link.dart'; class HomeserverTile extends StatelessWidget { final HomeserverBenchmarkResult benchmark; final VoidCallback onSelect; const HomeserverTile( {Key? key, required this.benchmark, required this.onSelect}) : super(key: key); @override Widget build(BuildContext context) { return ExpansionTile( title: Text(benchmark.homeserver.baseUrl.host), subtitle: benchmark.homeserver.description != null ? Text(benchmark.homeserver.description!) : null, children: [ benchmark.homeserver.antiFeatures != null && benchmark.homeserver.antiFeatures!.isNotEmpty ? ListTile( leading: const Icon(Icons.thumb_down), title: Text(benchmark.homeserver.antiFeatures!), subtitle: Text(L10n.of(context)!.antiFeatures), ) : ListTile( leading: const Icon(Icons.recommend), title: Text(L10n.of(context)!.noAntiFeaturesRecorded), ), if (benchmark.homeserver.jurisdiction != null) ListTile( leading: const Icon(Icons.public), title: Text(benchmark.homeserver.jurisdiction!), subtitle: Text(L10n.of(context)!.jurisdiction), ), ListTile( leading: const Icon(Icons.speed), title: Text("${benchmark.responseTime!.inMilliseconds} ms"), subtitle: Text(L10n.of(context)!.responseTime), ), ButtonBar( /* spacing: 8, runSpacing: 8, alignment: WrapAlignment.end, runAlignment: WrapAlignment.center, crossAxisAlignment: WrapCrossAlignment.center, */ children: [ if (benchmark.homeserver.privacyPolicy != null) Link( uri: benchmark.homeserver.privacyPolicy!, target: LinkTarget.blank, builder: (context, callback) => TextButton( onPressed: callback, child: Text(L10n.of(context)!.privacy), ), ), if (benchmark.homeserver.rules != null) Link( uri: benchmark.homeserver.rules!, target: LinkTarget.blank, builder: (context, callback) => TextButton( onPressed: callback, child: Text(L10n.of(context)!.serverRules), ), ), OutlinedButton( onPressed: onSelect.call, child: Text(L10n.of(context)!.selectServer), ), ], ), ], ); } } class JoinMatrixAttributionTile extends StatelessWidget { final parser = JoinmatrixOrgParser(); JoinMatrixAttributionTile({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return ListTile( title: Text(L10n.of(context)!.serverListJoinMatrix), subtitle: ButtonBar(children: [ Link( uri: parser.externalUri, target: LinkTarget.blank, builder: (context, callback) => TextButton( onPressed: callback, child: Text(L10n.of(context)!.openServerList), ), ), Link( uri: parser.errorReportUrl, target: LinkTarget.blank, builder: (context, callback) => TextButton( onPressed: callback, child: Text(L10n.of(context)!.reportServerListProblem), ), ), ]), ); } }