mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 13:33:32 +00:00
Make focus mode duration completely configurable up to 24 hours
This commit is contained in:
parent
9b79e19bac
commit
1dbab57edd
3 changed files with 88 additions and 15 deletions
|
@ -1,19 +1,12 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:relatica/globals.dart';
|
import 'package:wheel_chooser/wheel_chooser.dart';
|
||||||
|
|
||||||
import '../models/focus_mode_data.dart';
|
import '../models/focus_mode_data.dart';
|
||||||
import '../riverpod_controllers/focus_mode.dart';
|
import '../riverpod_controllers/focus_mode.dart';
|
||||||
import '../routes.dart';
|
import '../routes.dart';
|
||||||
|
import 'padding.dart';
|
||||||
final _options = {
|
|
||||||
'1 hour': const Duration(hours: 1),
|
|
||||||
'30 minutes': const Duration(minutes: 30),
|
|
||||||
'15 minutes': const Duration(minutes: 15),
|
|
||||||
'5 minutes': const Duration(minutes: 5),
|
|
||||||
'1 minute': const Duration(minutes: 1),
|
|
||||||
};
|
|
||||||
|
|
||||||
class FocusModeMenuItem extends ConsumerWidget {
|
class FocusModeMenuItem extends ConsumerWidget {
|
||||||
const FocusModeMenuItem({super.key});
|
const FocusModeMenuItem({super.key});
|
||||||
|
@ -32,19 +25,90 @@ class FocusModeMenuItem extends ConsumerWidget {
|
||||||
context.pop();
|
context.pop();
|
||||||
context.push(ScreenPaths.focusModeDisable);
|
context.push(ScreenPaths.focusModeDisable);
|
||||||
} else {
|
} else {
|
||||||
final result = await showChooseOptions(context,
|
final duration = await _chooseDuration(context);
|
||||||
'How long would you like to focus?', _options.keys.toList());
|
if (duration == null) {
|
||||||
if (result == null) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final disableTime = DateTime.now().add(_options[result]!);
|
final disableTime = DateTime.now().add(duration);
|
||||||
final update = FocusModeData(true, disableTime: disableTime);
|
final update = FocusModeData(true, disableTime: disableTime);
|
||||||
ref.read(focusModeProvider.notifier).setMode(update);
|
ref.read(focusModeProvider.notifier).setMode(update);
|
||||||
context.pop();
|
if (context.mounted) {
|
||||||
context.go(ScreenPaths.timelines);
|
context.pop();
|
||||||
|
context.go(ScreenPaths.timelines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Duration?> _chooseDuration(
|
||||||
|
BuildContext context,
|
||||||
|
) {
|
||||||
|
var hours = 0;
|
||||||
|
var minutes = 30;
|
||||||
|
|
||||||
|
return showDialog<Duration?>(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
content: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Choose Focus Duration',
|
||||||
|
style: Theme.of(context)
|
||||||
|
.textTheme
|
||||||
|
.bodyLarge!
|
||||||
|
.copyWith(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
const VerticalPadding(),
|
||||||
|
SizedBox(
|
||||||
|
height: 100,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: [
|
||||||
|
Flexible(
|
||||||
|
child: WheelChooser.integer(
|
||||||
|
initValue: hours,
|
||||||
|
onValueChanged: (v) => hours = v,
|
||||||
|
maxValue: 24,
|
||||||
|
minValue: 0,
|
||||||
|
unSelectTextStyle: const TextStyle(color: Colors.grey),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Text('hours'),
|
||||||
|
Flexible(
|
||||||
|
child: WheelChooser.integer(
|
||||||
|
initValue: minutes,
|
||||||
|
onValueChanged: (v) => minutes = v,
|
||||||
|
maxValue: 59,
|
||||||
|
minValue: 0,
|
||||||
|
unSelectTextStyle: const TextStyle(color: Colors.grey),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Text('minutes'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
ElevatedButton(
|
||||||
|
child: const Text('Select'),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(
|
||||||
|
context,
|
||||||
|
Duration(
|
||||||
|
hours: hours,
|
||||||
|
minutes: minutes,
|
||||||
|
),
|
||||||
|
); // showDialog() returns true
|
||||||
|
},
|
||||||
|
)
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
|
@ -1685,6 +1685,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.0"
|
||||||
|
wheel_chooser:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: wheel_chooser
|
||||||
|
sha256: "3fee36f081f321c58a0b7b4afcdd92599f2ca520b3a1420084774e6b19cca1d8"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.2"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -58,6 +58,7 @@ dependencies:
|
||||||
url_launcher: ^6.3.0
|
url_launcher: ^6.3.0
|
||||||
uuid: ^4.4.2
|
uuid: ^4.4.2
|
||||||
video_player: ^2.9.1
|
video_player: ^2.9.1
|
||||||
|
wheel_chooser: ^1.1.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
Loading…
Reference in a new issue