generated from dellevin/template
适配平板
This commit is contained in:
31
lib/utils/responsive.dart
Normal file
31
lib/utils/responsive.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
/// 响应式布局断点工具
|
||||
class Breakpoint {
|
||||
/// ≥600dp: 平板布局(常驻侧边栏 + NavigationRail)
|
||||
static const double tablet = 600.0;
|
||||
|
||||
/// ≥900dp: 宽屏内容区(列表-详情并排显示)
|
||||
static const double wideContent = 900.0;
|
||||
|
||||
static bool isTablet(BuildContext context) =>
|
||||
MediaQuery.sizeOf(context).width >= tablet;
|
||||
|
||||
static bool isPhone(BuildContext context) =>
|
||||
MediaQuery.sizeOf(context).width < tablet;
|
||||
|
||||
/// 是否使用宽屏内容布局(列表+详情并排)
|
||||
static bool isWideContent(BuildContext context) =>
|
||||
MediaQuery.sizeOf(context).width >= wideContent;
|
||||
}
|
||||
|
||||
/// 根据可用宽度动态计算网格列数
|
||||
int responsiveCrossAxisCount(
|
||||
double availableWidth, {
|
||||
double minItemWidth = 160,
|
||||
int minCount = 2,
|
||||
int maxCount = 6,
|
||||
}) {
|
||||
final count = (availableWidth / minItemWidth).floor();
|
||||
return count.clamp(minCount, maxCount);
|
||||
}
|
||||
Reference in New Issue
Block a user