Skip to content

Commit

Permalink
Add connect page
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed May 29, 2024
1 parent 4428e84 commit 0e53a64
Show file tree
Hide file tree
Showing 5 changed files with 255 additions and 139 deletions.
7 changes: 6 additions & 1 deletion app/lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,10 @@
"systemLocale": "System locale",
"packs": "Packs",
"checkForUpdatesWarning": "Performing a check for updates will connect to the Butterfly website to get the information.",
"comingSoon": "Coming soon"
"comingSoon": "Coming soon",
"templates": "Templates",
"custom": "Custom",
"installed": "Installed",
"details": "Details",
"play": "Play"
}
105 changes: 105 additions & 0 deletions app/lib/pages/home/connect.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:material_leap/material_leap.dart';
import 'package:phosphor_flutter/phosphor_flutter.dart';

class ConnectDialog extends StatefulWidget {
const ConnectDialog({super.key});

@override
State<ConnectDialog> createState() => _ConnectDialogState();
}

class _ConnectDialogState extends State<ConnectDialog> {
int _selectedIndex = 0;
bool _isMobileOpen = false;

@override
Widget build(BuildContext context) {
final isMobile = MediaQuery.sizeOf(context).width < LeapBreakpoints.medium;
final servers = List.generate(10, (index) => 'Server ${index + 1}');
final currentIndex = _selectedIndex;
final detailsChildren = [
const Text(
'''Labore commodo amet nisi ad ad aliquip minim. Do minim eiusmod sunt pariatur ullamco mollit nulla consequat enim Lorem deserunt amet. Velit cupidatat officia elit consectetur cillum culpa sunt pariatur magna cupidatat culpa. Occaecat ad mollit qui laboris do nostrud.
Ad id adipisicing sunt laboris mollit deserunt id adipisicing culpa. Consequat amet ea velit culpa quis nostrud ullamco ipsum aliquip nostrud labore ipsum irure. Proident aliquip nulla labore aliquip tempor minim velit excepteur ipsum incididunt. Dolore tempor officia voluptate ipsum. Et occaecat deserunt sint id incididunt nisi duis commodo elit pariatur magna voluptate. Id incididunt minim consequat irure laboris culpa laborum ipsum. Dolor fugiat laborum dolor sint adipisicing fugiat.
Lorem ullamco laboris do proident occaecat mollit aliquip minim. Do irure consectetur ut do laborum deserunt aliquip dolore consectetur eu. Cupidatat consequat ea occaecat reprehenderit minim voluptate fugiat cillum do labore in. Ullamco eiusmod occaecat eu voluptate elit cupidatat non proident. Reprehenderit Lorem elit est commodo in duis Lorem sunt esse.
Nisi sunt irure consectetur officia occaecat. Elit do consequat sit laboris laboris sunt est ex. Amet laboris aliqua nisi anim incididunt pariatur ex. Duis eiusmod Lorem aliqua minim eiusmod laborum sit nulla. Officia eu cupidatat veniam ad mollit sint consectetur laboris elit ipsum. Laborum officia non in aute ut voluptate Lorem culpa id labore qui ea minim ex.''',
),
];
final playButton = SizedBox(
height: 48,
child: FilledButton.icon(
icon: const Icon(PhosphorIconsLight.play),
label: Text(AppLocalizations.of(context).play),
onPressed: () => Navigator.of(context).pop(),
),
);
final listView = ListView.builder(
itemCount: servers.length,
itemBuilder: (context, index) => ListTile(
title: Text(servers[index]),
onTap: () {
setState(() {
_selectedIndex = index;
_isMobileOpen = isMobile;
});
if (isMobile) {
showLeapBottomSheet(
context: context,
title: servers[_selectedIndex],
childrenBuilder: (context) => [
...detailsChildren,
const SizedBox(height: 16),
playButton,
],
).then((_) {
if (mounted) setState(() => _isMobileOpen = false);
});
}
},
selected: currentIndex == index && (!isMobile || _isMobileOpen),
),
);
final details = Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
servers[currentIndex],
style: Theme.of(context).textTheme.titleLarge,
),
const SizedBox(height: 16),
Expanded(
child: ListView(
children: detailsChildren,
),
),
const SizedBox(height: 16),
playButton,
],
);
return ResponsiveAlertDialog(
title: Text(AppLocalizations.of(context).connect),
leading: IconButton.outlined(
icon: const Icon(PhosphorIconsLight.x),
onPressed: () => Navigator.of(context).pop(),
),
constraints: const BoxConstraints(
maxWidth: LeapBreakpoints.expanded,
maxHeight: 700,
),
content: Row(
children: [
Expanded(child: listView),
if (!isMobile) ...[
const VerticalDivider(),
Expanded(child: details),
],
],
),
);
}
}
Loading

0 comments on commit 0e53a64

Please sign in to comment.