Skip to content

Commit 28b2140

Browse files
committed
Timetable week view [material]
1 parent d425d99 commit 28b2140

File tree

4 files changed

+110
-68
lines changed

4 files changed

+110
-68
lines changed

assets/resources/strings/pl.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1884,7 +1884,7 @@
18841884
},
18851885
{
18861886
"id": "3A9D76DA-A971-48BB-B6F6-24D6A749D1F9",
1887-
"translation": "Dzisiaj nie ma lekcji!"
1887+
"translation": "Dzisiaj bez lekcji!"
18881888
},
18891889
{
18901890
"id": "F2A3AB37-ED80-478A-AF17-76BF541CE3D2",

lib/interface/components/material/data_page.dart

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// ignore_for_file: prefer_const_constructors, prefer_const_literals_to_create_immutables
2+
import 'package:autoscale_tabbarview/autoscale_tabbarview.dart';
23
import 'package:darq/darq.dart';
34
import 'package:dynamic_color/dynamic_color.dart';
45
import 'package:enum_flag/enum_flag.dart';
@@ -203,7 +204,26 @@ class DataPageState extends State<DataPage> with TickerProviderStateMixin {
203204
tabAlignment:
204205
(widget.segmentController?.scrollable ?? false) ? TabAlignment.center : TabAlignment.fill,
205206
labelPadding: EdgeInsets.symmetric(horizontal: 20),
206-
tabs: widget.segments!.values.select((x, _) => Tab(text: x)).toList(),
207+
tabs: widget.segments!.values
208+
.select((x, index) => Tab(
209+
text: (!Share.settings.appSettings.useCupertino &&
210+
isHorizontalPhoneMode(context) &&
211+
widget.pageBuilder != null)
212+
? null
213+
: x,
214+
child: (!Share.settings.appSettings.useCupertino &&
215+
isHorizontalPhoneMode(context) &&
216+
widget.pageBuilder != null)
217+
? Text(x,
218+
style: TextStyle(
219+
color: tabController.index == index
220+
? Theme.of(context).colorScheme.primary
221+
: ((tabController.index - index).abs() < 4
222+
? Theme.of(context).colorScheme.secondary
223+
: Theme.of(context).colorScheme.onSurfaceVariant)))
224+
: null,
225+
))
226+
.toList(),
207227
controller: tabController,
208228
)
209229
: null,
@@ -214,23 +234,27 @@ class DataPageState extends State<DataPage> with TickerProviderStateMixin {
214234
),
215235
if (widget.pageFlags.hasFlag(DataPageType.segmented) && widget.pageBuilder != null)
216236
SliverFillRemaining(
217-
child: TabBarView(
218-
controller: tabController,
219-
viewportFraction: MediaQuery.of(context).size.width >= 640 ? (1 / 3) : 1.0,
220-
children: List.generate(widget.segments!.length,
221-
(index) => widget.pageBuilder!(context, widget.segments!.keys.elementAt(index))),
222-
),
223-
// hasScrollBody: false,
224-
// child: Column(
225-
// children: [
226-
// AutoScaleTabBarView(
227-
// controller: tabController,
228-
// // viewportFraction: MediaQuery.of(context).size.width >= 640 ? (1 / 3) : 1.0,
229-
// children: List.generate(widget.segments!.length,
230-
// (index) => widget.pageBuilder!(context, widget.segments!.keys.elementAt(index))),
231-
// ),
232-
// ],
233-
// ),
237+
hasScrollBody: false,
238+
child: isHorizontalPhoneMode(context)
239+
? SizedBox(
240+
height: 2000,
241+
child: TabBarView(
242+
controller: tabController,
243+
viewportFraction: isHorizontalPhoneMode(context) ? (1 / 7) : 1.0,
244+
children: List.generate(widget.segments!.length,
245+
(index) => widget.pageBuilder!(context, widget.segments!.keys.elementAt(index))),
246+
),
247+
)
248+
: Column(
249+
children: [
250+
AutoScaleTabBarView(
251+
controller: tabController,
252+
// viewportFraction: MediaQuery.of(context).size.width >= 640 ? (1 / 3) : 1.0,
253+
children: List.generate(widget.segments!.length,
254+
(index) => widget.pageBuilder!(context, widget.segments!.keys.elementAt(index))),
255+
),
256+
],
257+
),
234258
),
235259
],
236260
);
@@ -263,3 +287,7 @@ class DataPageState extends State<DataPage> with TickerProviderStateMixin {
263287
});
264288
}
265289
}
290+
291+
bool isHorizontalPhoneMode(BuildContext context) {
292+
return MediaQuery.of(context).size.width >= 640 && MediaQuery.of(context).size.height < MediaQuery.of(context).size.width;
293+
}

lib/interface/components/material/elements/event.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:format/format.dart';
66
import 'package:intl/intl.dart';
77
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
88
import 'package:oshi/interface/components/cupertino/application.dart';
9+
import 'package:oshi/interface/components/material/data_page.dart';
910
import 'package:oshi/interface/shared/containers.dart';
1011
import 'package:oshi/interface/shared/input.dart';
1112
import 'package:oshi/interface/shared/pages/home.dart';
@@ -373,7 +374,9 @@ extension EventWidgetExtension on Event {
373374
timeTo != null && timeTo?.hour != 0))
374375
]))
375376
.toList()))),
376-
margin: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 20),
377+
margin: !Share.settings.appSettings.useCupertino && isHorizontalPhoneMode(context)
378+
? EdgeInsets.only(left: 5, right: 5)
379+
: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 20),
377380
child: ConstrainedBox(
378381
constraints: BoxConstraints(
379382
maxHeight: (animation?.value ?? 0) < CupertinoContextMenu.animationOpensAt ? double.infinity : 100,
@@ -418,7 +421,10 @@ extension EventWidgetExtension on Event {
418421
flex: 2,
419422
child: Text(
420423
titleString,
421-
maxLines: 1,
424+
maxLines:
425+
!Share.settings.appSettings.useCupertino && isHorizontalPhoneMode(context)
426+
? 3
427+
: 1,
422428
overflow: TextOverflow.ellipsis,
423429
style: TextStyle(
424430
fontSize: 17,
@@ -740,7 +746,9 @@ extension LessonWidgetExtension on TimetableLesson {
740746
isCanceled && !isMovedLesson))
741747
]),
742748
true)))),
743-
margin: EdgeInsets.only(left: 15, top: 3, bottom: 3, right: 20),
749+
margin: !Share.settings.appSettings.useCupertino && isHorizontalPhoneMode(context)
750+
? EdgeInsets.only(left: 5, right: 5)
751+
: EdgeInsets.only(left: 15, top: 3, bottom: 3, right: 20),
744752
child: Opacity(
745753
opacity: (isCanceled ||
746754
(date == DateTime.now().asDate() &&

lib/interface/shared/pages/timetable.dart

Lines changed: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
99
import 'package:format/format.dart';
1010
import 'package:intl/intl.dart';
1111
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
12+
import 'package:oshi/interface/components/material/data_page.dart';
1213
import 'package:oshi/interface/components/shim/elements/event.dart';
1314
import 'package:oshi/interface/components/shim/page_routes.dart';
1415
import 'package:oshi/interface/shared/containers.dart';
@@ -167,52 +168,57 @@ class _TimetablePageState extends VisibilityAwareState<TimetablePage> {
167168
.toList(),
168169
);
169170

170-
return Column(
171-
mainAxisAlignment: MainAxisAlignment.start,
172-
crossAxisAlignment: CrossAxisAlignment.center,
173-
mainAxisSize: MainAxisSize.max,
174-
children: [
175-
(searchController.text.isEmpty ? lessonsWidget : Container()),
176-
if (!Share.settings.appSettings.useCupertino &&
177-
(homeworksToday.isNotEmpty || eventsToday.isNotEmpty || teachersAbsentToday.isNotEmpty))
178-
Padding(
179-
padding: const EdgeInsets.only(bottom: 10),
180-
child: Divider(indent: 23, endIndent: 23),
181-
),
182-
// Homeworks for today
183-
Visibility(
184-
visible: homeworksToday.isNotEmpty,
185-
child: Container(
186-
margin: EdgeInsets.only(top: Share.settings.appSettings.useCupertino ? 20 : 0),
187-
child: CardContainer(
188-
filled: false,
189-
regularOverride: true,
190-
additionalDividerMargin: 5,
191-
children: homeworksToday.isNotEmpty ? homeworksToday : [Text('')],
192-
))),
193-
// Events for today
194-
Visibility(
195-
visible: eventsToday.isNotEmpty,
196-
child: Container(
197-
margin: EdgeInsets.only(top: Share.settings.appSettings.useCupertino ? 20 : 0),
198-
child: CardContainer(
199-
filled: false,
200-
regularOverride: true,
201-
additionalDividerMargin: 5,
202-
children: eventsToday.isNotEmpty ? eventsToday : [Text('')],
203-
))),
204-
// Teachers absent today
205-
Visibility(
206-
visible: teachersAbsentToday.isNotEmpty,
207-
child: Container(
208-
margin: EdgeInsets.only(top: Share.settings.appSettings.useCupertino ? 20 : 0),
209-
child: CardContainer(
210-
filled: false,
211-
regularOverride: true,
212-
additionalDividerMargin: 5,
213-
children: teachersAbsentToday.isNotEmpty ? teachersAbsentToday : [Text('')],
214-
))),
215-
],
171+
return MediaQuery(
172+
data: MediaQuery.of(context).copyWith(
173+
textScaler:
174+
TextScaler.linear(!Share.settings.appSettings.useCupertino && isHorizontalPhoneMode(context) ? 0.7 : 1.0)),
175+
child: Column(
176+
mainAxisAlignment: MainAxisAlignment.start,
177+
crossAxisAlignment: CrossAxisAlignment.center,
178+
mainAxisSize: MainAxisSize.max,
179+
children: [
180+
(searchController.text.isEmpty ? lessonsWidget : Container()),
181+
if (!Share.settings.appSettings.useCupertino &&
182+
(homeworksToday.isNotEmpty || eventsToday.isNotEmpty || teachersAbsentToday.isNotEmpty))
183+
Padding(
184+
padding: const EdgeInsets.only(bottom: 10),
185+
child: Divider(indent: 23, endIndent: 23),
186+
),
187+
// Homeworks for today
188+
Visibility(
189+
visible: homeworksToday.isNotEmpty,
190+
child: Container(
191+
margin: EdgeInsets.only(top: Share.settings.appSettings.useCupertino ? 20 : 0),
192+
child: CardContainer(
193+
filled: false,
194+
regularOverride: true,
195+
additionalDividerMargin: 5,
196+
children: homeworksToday.isNotEmpty ? homeworksToday : [Text('')],
197+
))),
198+
// Events for today
199+
Visibility(
200+
visible: eventsToday.isNotEmpty,
201+
child: Container(
202+
margin: EdgeInsets.only(top: Share.settings.appSettings.useCupertino ? 20 : 0),
203+
child: CardContainer(
204+
filled: false,
205+
regularOverride: true,
206+
additionalDividerMargin: 5,
207+
children: eventsToday.isNotEmpty ? eventsToday : [Text('')],
208+
))),
209+
// Teachers absent today
210+
Visibility(
211+
visible: teachersAbsentToday.isNotEmpty,
212+
child: Container(
213+
margin: EdgeInsets.only(top: Share.settings.appSettings.useCupertino ? 20 : 0),
214+
child: CardContainer(
215+
filled: false,
216+
regularOverride: true,
217+
additionalDividerMargin: 5,
218+
children: teachersAbsentToday.isNotEmpty ? teachersAbsentToday : [Text('')],
219+
))),
220+
],
221+
),
216222
);
217223
}
218224

0 commit comments

Comments
 (0)