Skip to content

Commit

Permalink
feat: YaruDateTimeEntry, YaruSegmentedEntry, YaruEdgeFocusInterceptor (
Browse files Browse the repository at this point in the history
  • Loading branch information
Jupi007 authored Jul 9, 2024
1 parent cdaec73 commit c2abfd3
Show file tree
Hide file tree
Showing 11 changed files with 2,449 additions and 0 deletions.
12 changes: 12 additions & 0 deletions example/lib/example_page_items.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'pages/checkbox_page.dart';
import 'pages/choice_chip_bar_page.dart';
import 'pages/clip_page.dart';
import 'pages/color_disk_page.dart';
import 'pages/date_time_entry_page.dart';
import 'pages/dialog_page.dart';
import 'pages/draggable_page.dart';
import 'pages/expandable_page.dart';
Expand Down Expand Up @@ -130,6 +131,17 @@ final examplePageItems = <PageItem>[
pageBuilder: (context) => const ColorDiskPage(),
iconBuilder: (context, selected) => const Icon(YaruIcons.color_select),
),
PageItem(
title: 'YaruDateTimeEntry',
floatingActionButtonBuilder: (_) => const CodeSnippedButton(
snippetUrl:
'https://raw.githubusercontent.com/ubuntu/yaru_widgets.dart/main/example/lib/pages/date_time_entry_page.dart',
),
pageBuilder: (context) => const DateTimePage(),
iconBuilder: (context, selected) => selected
? const Icon(YaruIcons.calendar_month_filled)
: const Icon(YaruIcons.calendar_month),
),
PageItem(
title: 'YaruDraggable',
floatingActionButtonBuilder: (_) => const CodeSnippedButton(
Expand Down
76 changes: 76 additions & 0 deletions example/lib/pages/date_time_entry_page.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import 'package:flutter/material.dart';
import 'package:yaru/yaru.dart';

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

@override
State<DateTimePage> createState() => _DateTimePageState();
}

class _DateTimePageState extends State<DateTimePage> {
final _dateController = YaruDateTimeEntryController.now();
final _dateTimeController = YaruDateTimeEntryController.now();
final _timeController = YaruTimeEntryController.now();

final _formKey = GlobalKey<FormState>();

@override
Widget build(BuildContext context) {
return Center(
child: SizedBox(
width: 275,
child: Form(
key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
YaruDateTimeEntry(
controller: _dateController,
includeTime: false,
firstDateTime: DateTime(1900),
lastDateTime: DateTime(2050),
onChanged: (dateTime) {
setState(() {
_formKey.currentState?.validate();
});
},
),
Text(_dateController.dateTime.toString()),
YaruTimeEntry(
controller: _timeController,
onChanged: (time) {
setState(() {
_formKey.currentState?.validate();
});
},
),
Text(_timeController.timeOfDay.toString()),
YaruDateTimeEntry(
controller: _dateTimeController,
includeTime: true,
firstDateTime: DateTime(1900),
lastDateTime: DateTime(2050),
onChanged: (dateTime) {
setState(() {
_formKey.currentState?.validate();
});
},
),
Text(_dateTimeController.dateTime.toString()),
].withSpacing(25),
),
),
),
);
}
}

extension _ListSpacing on List<Widget> {
List<Widget> withSpacing(double spacing) {
return expand((item) sync* {
yield SizedBox(height: spacing);
yield item;
}).skip(1).toList();
}
}
1 change: 1 addition & 0 deletions lib/foundation.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export 'src/foundation/yaru_border_radius.dart';
export 'src/foundation/yaru_clip.dart';
export 'src/foundation/yaru_entry_segment.dart';
export 'src/foundation/yaru_page_controller.dart';
export 'src/foundation/yaru_window.dart';
Loading

0 comments on commit c2abfd3

Please sign in to comment.