mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-09 22:57:21 +00:00
WebAppBar ResponsiveLayout
This commit is contained in:
@ -1,18 +1,37 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ResponsiveLayout extends StatelessWidget {
|
||||
final Widget desktopBody;
|
||||
final Widget mobileBody;
|
||||
const ResponsiveLayout(
|
||||
{super.key, required this.desktopBody, required this.mobileBody});
|
||||
final Widget? tablet;
|
||||
final Widget desktopBody;
|
||||
|
||||
const ResponsiveLayout({
|
||||
super.key,
|
||||
required this.mobileBody,
|
||||
this.tablet,
|
||||
required this.desktopBody,
|
||||
});
|
||||
|
||||
static bool isMobile(BuildContext context) =>
|
||||
MediaQuery.of(context).size.width < 650;
|
||||
|
||||
static bool isTablet(BuildContext context) =>
|
||||
MediaQuery.of(context).size.width < 1100 &&
|
||||
MediaQuery.of(context).size.width >= 650;
|
||||
|
||||
static bool isDesktop(BuildContext context) =>
|
||||
MediaQuery.of(context).size.width >= 1100;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
if (constraints.maxWidth < 600) {
|
||||
return mobileBody;
|
||||
} else {
|
||||
if (constraints.maxWidth >= 1100) {
|
||||
return desktopBody;
|
||||
} else if (constraints.maxWidth >= 650) {
|
||||
return tablet!;
|
||||
} else {
|
||||
return mobileBody;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
30
lib/utils/theme/responsive_text_theme.dart
Normal file
30
lib/utils/theme/responsive_text_theme.dart
Normal file
@ -0,0 +1,30 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_web/utils/color_manager.dart';
|
||||
import 'package:syncrow_web/utils/responsive_layout.dart';
|
||||
|
||||
class ResponsiveTextTheme extends ThemeExtension<ResponsiveTextTheme> {
|
||||
final TextStyle deviceManagementTitle;
|
||||
|
||||
ResponsiveTextTheme({
|
||||
required this.deviceManagementTitle,
|
||||
});
|
||||
|
||||
@override
|
||||
ThemeExtension<ResponsiveTextTheme> copyWith() => this;
|
||||
|
||||
@override
|
||||
ThemeExtension<ResponsiveTextTheme> lerp(
|
||||
ThemeExtension<ResponsiveTextTheme>? other, double t) =>
|
||||
this;
|
||||
|
||||
static ResponsiveTextTheme of(BuildContext context) {
|
||||
final isMobile = ResponsiveLayout.isMobile(context);
|
||||
return Theme.of(context).extension<ResponsiveTextTheme>() ??
|
||||
ResponsiveTextTheme(
|
||||
deviceManagementTitle: TextStyle(
|
||||
fontSize: isMobile ? 20 : 30,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: ColorsManager.whiteColors),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user