liuyuqi-dellpc 1 year ago
parent
commit
aa70fac45b
1 changed files with 39 additions and 0 deletions
  1. 39 0
      lib/utils/responsive.dart

+ 39 - 0
lib/utils/responsive.dart

@@ -0,0 +1,39 @@
+import 'package:flutter/material.dart';
+
+/// Description: 响应式布局,根据屏幕宽度:小于850为手机,大于等于850小于1100为平板,大于等于1100为桌面
+/// Time       : 04/30/2023 Sunday
+/// Author     : liuyuqi.gov@msn.cn
+class Responsive extends StatelessWidget {
+  final Widget mobile;
+  final Widget tablet;
+  final Widget desktop;
+
+  const Responsive({
+    super.key,
+    required this.mobile,
+    required this.tablet,
+    required this.desktop,
+  });
+
+  // This size work fine on my design, maybe you need some customization depends on your design
+  static bool isMobile(BuildContext context) =>
+      MediaQuery.of(context).size.width < 850;
+
+  static bool isTablet(BuildContext context) =>
+      MediaQuery.of(context).size.width >= 850 &&
+      MediaQuery.of(context).size.width < 1100;
+
+  static bool isDesktop(BuildContext context) =>
+      MediaQuery.of(context).size.width >= 1100;
+
+  @override
+  Widget build(BuildContext context) {
+    return LayoutBuilder(
+      builder: (context, constraints) => isDesktop(context)
+          ? desktop
+          : isTablet(context)
+              ? tablet
+              : mobile,
+    );
+  }
+}