diff options
author | Orangerot <purple@orangerot.dev> | 2025-01-13 18:03:02 +0100 |
---|---|---|
committer | Orangerot <purple@orangerot.dev> | 2025-01-13 18:03:02 +0100 |
commit | 4fb6af0135c4e3c67b3ddadaa0e60e2bae45d73c (patch) | |
tree | d8c29027af99588e2f7274998189e9da7c0c52a5 /lib/widgets/level_list_entry.dart | |
parent | d9403d9e985d5301e2cbd105a83048d010264791 (diff) |
feat: when selecting level show ESenseNotConnectedDialog if not connected to esense
Diffstat (limited to 'lib/widgets/level_list_entry.dart')
-rw-r--r-- | lib/widgets/level_list_entry.dart | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/widgets/level_list_entry.dart b/lib/widgets/level_list_entry.dart new file mode 100644 index 0000000..a47a9c2 --- /dev/null +++ b/lib/widgets/level_list_entry.dart @@ -0,0 +1,68 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:sense_the_rhythm/utils/esense_input.dart'; +import 'package:sense_the_rhythm/utils/simfile.dart'; +import 'package:sense_the_rhythm/screens/level.dart'; +import 'package:sense_the_rhythm/widgets/esense_connect_dialog.dart'; +import 'package:sense_the_rhythm/widgets/esense_not_connected_dialog.dart'; + +class LevelListEntry extends StatelessWidget { + const LevelListEntry({ + super.key, + required this.simfile, + }); + + final Simfile simfile; + + void navigateToLevel(BuildContext context) { + Navigator.push(context, + MaterialPageRoute(builder: (BuildContext context) => Level(simfile))); + } + + void openESenseConnectDialog(context) { + showDialog( + context: context, + builder: (BuildContext context) { + return ESenseConnectDialog( + deviceStatus: ESenseInput.instance.deviceStatus, + connect: (String name) { + ESenseInput.instance.connectToESense(name); + }); + }, + ); + } + + void tapHandler(BuildContext context) { + if (ESenseInput.instance.connected) { + navigateToLevel(context); + } else { + showDialog( + context: context, + builder: (BuildContext context) { + return ESenseNotConnectedDialog( + onCancel: () { + openESenseConnectDialog(context); + }, + onContinue: () { + navigateToLevel(context); + }, + ); + }, + ); + } + } + + @override + Widget build(BuildContext context) { + return ListTile( + leading: Image.file(File(simfile.bannerPath!)), + trailing: Icon(Icons.play_arrow), + title: Text(simfile.tags["TITLE"]!), + subtitle: Text('3:45'), + onTap: () { + tapHandler(context); + }, + ); + } +} |