Skip to content

Commit 88e38ce

Browse files
committed
Tablet layout
1 parent affddcd commit 88e38ce

6 files changed

Lines changed: 55 additions & 6 deletions

File tree

lib/creation/widget/creation_list.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:slidemix/creation/creation_bloc.dart';
44
import 'package:slidemix/creation/widget/creation_card.dart';
55
import 'package:slidemix/creation/data/media.dart';
6+
import 'package:slidemix/extensions/device.dart';
67

78
class CreationList extends StatelessWidget {
89
final List<Media> media;
@@ -19,10 +20,10 @@ class CreationList extends StatelessWidget {
1920
@override
2021
Widget build(BuildContext context) {
2122
const padding = 16.0;
22-
const spanCount = 2;
23+
final spanCount = context.deviceType.isMobile ? 2 : 3;
2324

2425
return GridView.builder(
25-
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
26+
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
2627
crossAxisCount: spanCount,
2728
mainAxisSpacing: padding,
2829
crossAxisSpacing: padding,

lib/extensions/device.dart

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:sizer/sizer.dart';
3+
import 'package:sizer/sizer.dart' as sizer;
4+
5+
extension BuildContextX on BuildContext {
6+
DeviceType get deviceType => SizerUtil.deviceType == sizer.DeviceType.mobile
7+
? DeviceType.mobile
8+
: DeviceType.tablet;
9+
10+
Orientation get deviceOrientation => SizerUtil.orientation;
11+
}
12+
13+
extension DeviceTypeX on DeviceType {
14+
bool get isMobile => this == DeviceType.mobile;
15+
16+
bool get isTablet => this == DeviceType.tablet;
17+
}
18+
19+
extension OrientationX on Orientation {
20+
bool get isPortrait => this == Orientation.portrait;
21+
22+
bool get isLandscape => this == Orientation.landscape;
23+
}
24+
25+
enum DeviceType {
26+
mobile,
27+
tablet,
28+
}
29+
30+
class DeviceTypeContainer extends StatelessWidget {
31+
final Widget child;
32+
33+
const DeviceTypeContainer({
34+
Key? key,
35+
required this.child,
36+
}) : super(key: key);
37+
38+
@override
39+
Widget build(BuildContext context) {
40+
return Sizer(builder: (_, __, ___) => child);
41+
}
42+
}

lib/localizations.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_gen/gen_l10n/app_localizations.dart' as intl;
33
import 'package:slidemix/main.dart';
44

5+
// flutter gen-l10n
56
class AppLocalizations {
67
static intl.AppLocalizations of(BuildContext context) =>
78
intl.AppLocalizations.of(context)!;

lib/main.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:google_fonts/google_fonts.dart';
33
import 'package:shared_preferences/shared_preferences.dart';
44
import 'package:slidemix/colors.dart';
55
import 'package:slidemix/database.dart';
6+
import 'package:slidemix/extensions/device.dart';
67
import 'package:slidemix/file_manager.dart';
78
import 'package:slidemix/localizations.dart';
89
import 'package:slidemix/logger.dart';
@@ -67,7 +68,7 @@ class SlideMixApp extends StatelessWidget {
6768
localizationsDelegates: AppLocalizations.localizationsDelegates,
6869
supportedLocales: AppLocalizations.supportedLocales,
6970
onGenerateTitle: (context) => AppLocalizations.of(context).appName,
70-
home: const WelcomeScreen(),
71+
home: const DeviceTypeContainer(child: WelcomeScreen()),
7172
),
7273
);
7374
}

lib/movies/widget/movies_list.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:slidemix/extensions/device.dart';
23
import 'package:slidemix/movies/data/movie.dart';
34
import 'package:slidemix/movies/widget/movie_card.dart';
45

@@ -19,11 +20,11 @@ class MoviesList extends StatelessWidget {
1920
@override
2021
Widget build(BuildContext context) {
2122
const padding = 16.0;
22-
const spanCount = 2;
23+
final spanCount = context.deviceType.isMobile ? 2 : 3;
2324
const itemRatio = 150.0 / 175.0;
2425

2526
return GridView.builder(
26-
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
27+
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
2728
crossAxisCount: spanCount,
2829
mainAxisSpacing: padding,
2930
crossAxisSpacing: padding,

pubspec.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
1717
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
1818
# In Windows, build-name is used as the major, minor, and patch parts
1919
# of the product and file versions while build-number is used as the build suffix.
20-
version: 1.1.4+10104
20+
version: 1.1.5+10105
2121

2222
environment:
2323
sdk: '>=3.0.0 <4.0.0'
@@ -83,6 +83,9 @@ dependencies:
8383
# https://pub.dev/packages/shared_preferences
8484
shared_preferences: 2.1.1
8585

86+
# https://pub.dev/packages/sizer
87+
sizer: 2.0.15
88+
8689
# https://pub.dev/packages/sqflite
8790
sqflite: 2.2.8+4
8891

0 commit comments

Comments
 (0)