fix(legacy): add dark mode support for pickers and dialogs
This commit is contained in:
@@ -73,6 +73,7 @@ class _ActivityMeterBody extends ConsumerWidget {
|
|||||||
context: context,
|
context: context,
|
||||||
firstDate: now.subtract(const Duration(days: 365)),
|
firstDate: now.subtract(const Duration(days: 365)),
|
||||||
lastDate: now,
|
lastDate: now,
|
||||||
|
builder: legacyPickerThemeBuilder,
|
||||||
);
|
);
|
||||||
if (picked != null) {
|
if (picked != null) {
|
||||||
notifier.selectCustomRange(picked.start, picked.end);
|
notifier.selectCustomRange(picked.start, picked.end);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:design_system/design_system.dart';
|
|||||||
import 'package:device_management/src/core/domain/entities/app_usage_schedule_entity.dart';
|
import 'package:device_management/src/core/domain/entities/app_usage_schedule_entity.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:legacy_theme/legacy_theme.dart';
|
import 'package:legacy_theme/legacy_theme.dart';
|
||||||
|
import 'package:legacy_ui/legacy_ui.dart';
|
||||||
import 'package:sf_localizations/sf_localizations.dart';
|
import 'package:sf_localizations/sf_localizations.dart';
|
||||||
import 'package:utils/utils.dart';
|
import 'package:utils/utils.dart';
|
||||||
|
|
||||||
@@ -55,6 +56,7 @@ class _EditSchedulePeriodSheetState extends State<_EditSchedulePeriodSheet> {
|
|||||||
final picked = await showTimePicker(
|
final picked = await showTimePicker(
|
||||||
context: context,
|
context: context,
|
||||||
initialTime: isStart ? _start : _end,
|
initialTime: isStart ? _start : _end,
|
||||||
|
builder: legacyPickerThemeBuilder,
|
||||||
);
|
);
|
||||||
if (picked == null) return;
|
if (picked == null) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ class AppsUseScreen extends ConsumerWidget {
|
|||||||
context: context,
|
context: context,
|
||||||
firstDate: now.subtract(const Duration(days: 365)),
|
firstDate: now.subtract(const Duration(days: 365)),
|
||||||
lastDate: now,
|
lastDate: now,
|
||||||
|
builder: legacyPickerThemeBuilder,
|
||||||
);
|
);
|
||||||
if (picked != null) {
|
if (picked != null) {
|
||||||
notifier.selectCustomRange(picked.start, picked.end);
|
notifier.selectCustomRange(picked.start, picked.end);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:design_system/design_system.dart';
|
|||||||
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:legacy_theme/legacy_theme.dart';
|
import 'package:legacy_theme/legacy_theme.dart';
|
||||||
|
import 'package:legacy_ui/legacy_ui.dart';
|
||||||
import 'package:sf_localizations/sf_localizations.dart';
|
import 'package:sf_localizations/sf_localizations.dart';
|
||||||
import 'package:utils/utils.dart';
|
import 'package:utils/utils.dart';
|
||||||
|
|
||||||
@@ -110,6 +111,7 @@ class _EditPeriodSheetState extends ConsumerState<EditPeriodSheet> {
|
|||||||
final picked = await showTimePicker(
|
final picked = await showTimePicker(
|
||||||
context: context,
|
context: context,
|
||||||
initialTime: start,
|
initialTime: start,
|
||||||
|
builder: legacyPickerThemeBuilder,
|
||||||
);
|
);
|
||||||
if (picked != null) _start.value = picked;
|
if (picked != null) _start.value = picked;
|
||||||
},
|
},
|
||||||
@@ -128,6 +130,7 @@ class _EditPeriodSheetState extends ConsumerState<EditPeriodSheet> {
|
|||||||
final picked = await showTimePicker(
|
final picked = await showTimePicker(
|
||||||
context: context,
|
context: context,
|
||||||
initialTime: end,
|
initialTime: end,
|
||||||
|
builder: legacyPickerThemeBuilder,
|
||||||
);
|
);
|
||||||
if (picked != null) _end.value = picked;
|
if (picked != null) _end.value = picked;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ class _HealthScreenState extends ConsumerState<HealthScreen>
|
|||||||
context: context,
|
context: context,
|
||||||
firstDate: now.subtract(const Duration(days: 365)),
|
firstDate: now.subtract(const Duration(days: 365)),
|
||||||
lastDate: now,
|
lastDate: now,
|
||||||
|
builder: legacyPickerThemeBuilder,
|
||||||
);
|
);
|
||||||
if (picked != null) {
|
if (picked != null) {
|
||||||
notifier.selectCustomRange(picked.start, picked.end);
|
notifier.selectCustomRange(picked.start, picked.end);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:design_system/design_system.dart';
|
import 'package:design_system/design_system.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:legacy_ui/legacy_ui.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:legacy_auth/src/features/device_setup/presentation/providers/device_setup_controller.dart';
|
import 'package:legacy_auth/src/features/device_setup/presentation/providers/device_setup_controller.dart';
|
||||||
import 'package:legacy_auth/src/features/device_setup/presentation/providers/device_setup_form_controllers.dart';
|
import 'package:legacy_auth/src/features/device_setup/presentation/providers/device_setup_form_controllers.dart';
|
||||||
@@ -21,6 +22,7 @@ Future<void> _pickBornAt(
|
|||||||
initialDate: safeInitial,
|
initialDate: safeInitial,
|
||||||
firstDate: DateTime(1900, 1, 1),
|
firstDate: DateTime(1900, 1, 1),
|
||||||
lastDate: now,
|
lastDate: now,
|
||||||
|
builder: legacyPickerThemeBuilder,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (picked != null) onPicked(picked);
|
if (picked != null) onPicked(picked);
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
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:legacy_theme/legacy_theme.dart';
|
import 'package:legacy_theme/legacy_theme.dart';
|
||||||
@@ -98,7 +97,7 @@ class _AlarmFormSheet extends ConsumerWidget {
|
|||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: formState.canSave
|
color: formState.canSave
|
||||||
? primaryColor
|
? primaryColor
|
||||||
: Colors.grey,
|
: Theme.of(context).colorScheme.outline,
|
||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.w600,
|
||||||
fontSize:
|
fontSize:
|
||||||
SizeUtils.getByScreen(small: 16, big: 17),
|
SizeUtils.getByScreen(small: 16, big: 17),
|
||||||
@@ -108,20 +107,44 @@ class _AlarmFormSheet extends ConsumerWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(height: SizeUtils.getByScreen(small: 16, big: 18)),
|
SizedBox(height: SizeUtils.getByScreen(small: 16, big: 18)),
|
||||||
Container(
|
GestureDetector(
|
||||||
height: SizeUtils.getByScreen(small: 160, big: 180),
|
onTap: () async {
|
||||||
decoration: BoxDecoration(
|
final picked = await showTimePicker(
|
||||||
borderRadius:
|
context: context,
|
||||||
const BorderRadius.all(Radius.circular(16)),
|
initialTime: TimeOfDay(
|
||||||
color: Colors.grey.shade50,
|
hour: formState.durationMinutes ~/ 60,
|
||||||
),
|
minute: formState.durationMinutes % 60,
|
||||||
child: CupertinoTimerPicker(
|
),
|
||||||
mode: CupertinoTimerPickerMode.hm,
|
builder: legacyPickerThemeBuilder,
|
||||||
initialTimerDuration: Duration(
|
);
|
||||||
minutes: formState.durationMinutes,
|
if (picked != null) {
|
||||||
|
notifier.setDurationMinutes(
|
||||||
|
picked.hour * 60 + picked.minute,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: SizeUtils.getByScreen(small: 24, big: 28),
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius:
|
||||||
|
const BorderRadius.all(Radius.circular(16)),
|
||||||
|
color: Theme.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.surfaceContainerHighest,
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
'${(formState.durationMinutes ~/ 60).toString().padLeft(2, '0')}:${(formState.durationMinutes % 60).toString().padLeft(2, '0')}',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 48,
|
||||||
|
fontWeight: FontWeight.w300,
|
||||||
|
color: primaryColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
onTimerDurationChanged: (duration) =>
|
|
||||||
notifier.setDurationMinutes(duration.inMinutes),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: SizeUtils.getByScreen(small: 20, big: 22)),
|
SizedBox(height: SizeUtils.getByScreen(small: 20, big: 22)),
|
||||||
@@ -197,7 +220,9 @@ class _RadioOption extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
isSelected ? Icons.radio_button_checked : Icons.radio_button_off,
|
isSelected ? Icons.radio_button_checked : Icons.radio_button_off,
|
||||||
color: isSelected ? primaryColor : Colors.grey,
|
color: isSelected
|
||||||
|
? primaryColor
|
||||||
|
: Theme.of(context).colorScheme.outline,
|
||||||
size: SizeUtils.getByScreen(small: 22, big: 24),
|
size: SizeUtils.getByScreen(small: 22, big: 24),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 12),
|
const SizedBox(width: 12),
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ export 'src/widgets/refreshable_error_state.dart';
|
|||||||
export 'src/widgets/week_day_chips.dart';
|
export 'src/widgets/week_day_chips.dart';
|
||||||
export 'src/providers/map_style_provider.dart';
|
export 'src/providers/map_style_provider.dart';
|
||||||
export 'src/transitions/legacy_transitions.dart';
|
export 'src/transitions/legacy_transitions.dart';
|
||||||
|
export 'src/utils/legacy_picker_theme.dart';
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:legacy_theme/legacy_theme.dart';
|
||||||
|
|
||||||
const _duration = Duration(milliseconds: 300);
|
const _duration = Duration(milliseconds: 300);
|
||||||
const _dialogDuration = Duration(milliseconds: 500);
|
const _dialogDuration = Duration(milliseconds: 500);
|
||||||
@@ -8,13 +9,24 @@ Future<T?> showLegacyDialog<T>({
|
|||||||
required WidgetBuilder builder,
|
required WidgetBuilder builder,
|
||||||
bool barrierDismissible = true,
|
bool barrierDismissible = true,
|
||||||
}) {
|
}) {
|
||||||
|
final primaryColor = context.sfColors.legacyPrimary;
|
||||||
|
final brightness = Theme.of(context).brightness;
|
||||||
|
|
||||||
return showGeneralDialog<T>(
|
return showGeneralDialog<T>(
|
||||||
context: context,
|
context: context,
|
||||||
barrierDismissible: barrierDismissible,
|
barrierDismissible: barrierDismissible,
|
||||||
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
|
barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
|
||||||
barrierColor: Colors.black54,
|
barrierColor: Colors.black54,
|
||||||
transitionDuration: _dialogDuration,
|
transitionDuration: _dialogDuration,
|
||||||
pageBuilder: (dialogContext, __, ___) => builder(dialogContext),
|
pageBuilder: (dialogContext, __, ___) {
|
||||||
|
final colorScheme = brightness == Brightness.dark
|
||||||
|
? ColorScheme.dark(primary: primaryColor)
|
||||||
|
: ColorScheme.light(primary: primaryColor);
|
||||||
|
return Theme(
|
||||||
|
data: Theme.of(dialogContext).copyWith(colorScheme: colorScheme),
|
||||||
|
child: builder(dialogContext),
|
||||||
|
);
|
||||||
|
},
|
||||||
transitionBuilder: (_, animation, __, child) {
|
transitionBuilder: (_, animation, __, child) {
|
||||||
final fadeCurved = CurvedAnimation(
|
final fadeCurved = CurvedAnimation(
|
||||||
parent: animation,
|
parent: animation,
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:legacy_theme/legacy_theme.dart';
|
||||||
|
|
||||||
|
Widget legacyPickerThemeBuilder(BuildContext context, Widget? child) {
|
||||||
|
final primaryColor = context.sfColors.legacyPrimary;
|
||||||
|
final brightness = Theme.of(context).brightness;
|
||||||
|
final colorScheme = brightness == Brightness.dark
|
||||||
|
? ColorScheme.dark(primary: primaryColor)
|
||||||
|
: ColorScheme.light(primary: primaryColor);
|
||||||
|
return Theme(
|
||||||
|
data: Theme.of(context).copyWith(colorScheme: colorScheme),
|
||||||
|
child: child!,
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user