responsive.dart 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import 'package:flutter/material.dart';
  2. /// Description: 响应式布局,根据屏幕宽度:小于850为手机,大于等于850小于1100为平板,大于等于1100为桌面
  3. /// Time : 04/30/2023 Sunday
  4. /// Author : liuyuqi.gov@msn.cn
  5. class Responsive extends StatelessWidget {
  6. final Widget mobile;
  7. final Widget tablet;
  8. final Widget desktop;
  9. const Responsive({
  10. super.key,
  11. required this.mobile,
  12. required this.tablet,
  13. required this.desktop,
  14. });
  15. // This size work fine on my design, maybe you need some customization depends on your design
  16. static bool isMobile(BuildContext context) =>
  17. MediaQuery.of(context).size.width < 850;
  18. static bool isTablet(BuildContext context) =>
  19. MediaQuery.of(context).size.width >= 850 &&
  20. MediaQuery.of(context).size.width < 1100;
  21. static bool isDesktop(BuildContext context) =>
  22. MediaQuery.of(context).size.width >= 1100;
  23. @override
  24. Widget build(BuildContext context) {
  25. return LayoutBuilder(
  26. builder: (context, constraints) => isDesktop(context)
  27. ? desktop
  28. : isTablet(context)
  29. ? tablet
  30. : mobile,
  31. );
  32. }
  33. }