我想做一个响应的小部件。我想让它在使用不同的设备时改变为另一种风格的屏幕。
我看过很多像this这样的问题,但仍然找不到答案。答案基本上是通过屏幕宽度来检查设备是移动的设备、平板电脑还是台式机。如果我这样做,当我旋转移动设备时,即使我使用的是移动设备,它也会显示平板电脑风格的屏幕。
但是,我看到一个使用包的answer,而不是方式。但是,我在使用包时得到以下错误:
════════ Exception caught by widgets library ═══════════════════════════════════
LateInitializationError: Field 'deviceType' has not been initialized.
The relevant error-causing widget was
LayoutBuilder
lib/…/responsive.dart:18
════════════════════════════════════════════════════════════════════════════════
我的代码:
import 'package:flutter/material.dart';
import 'package:sizer/sizer.dart';
class Responsive extends StatelessWidget {
const Responsive({required this.mobile, required this.tablet, required this.desktop, super.key});
final Widget mobile;
final Widget tablet;
final Widget desktop;
static bool isMobile(BuildContext context) => MediaQuery.of(context).size.width < 600.0 && SizerUtil.deviceType == DeviceType.mobile;
static bool isTablet(BuildContext context) => MediaQuery.of(context).size.width < 1100.0 && MediaQuery.of(context).size.width >= 600.0 && SizerUtil.deviceType == DeviceType.tablet;
static bool isDesktop(BuildContext context) => MediaQuery.of(context).size.width >= 1100.0 && SizerUtil.deviceType != DeviceType.mobile && SizerUtil.deviceType == DeviceType.tablet;
@override
Widget build(BuildContext context) => LayoutBuilder(
builder: (context, constraints) => constraints.maxWidth >= 1100.0 && SizerUtil.deviceType != DeviceType.mobile && SizerUtil.deviceType != DeviceType.tablet
? desktop
: constraints.maxWidth < 1100.0 && constraints.maxWidth >= 600.0 && SizerUtil.deviceType == DeviceType.tablet
? tablet
: mobile,
);
}
如果您需要更多信息,请随时发表评论。
如何做一个响应的小工具?我将感谢任何帮助。提前感谢你!
4条答案
按热度按时间hfyxw5xn1#
尝试做它喜欢包官方示例. https://github.com/TechnoUrmish/Sizer/blob/master/example/lib/main.dart
oiopk7p52#
如果你不想使用任何第三方库,那么你可以使用
LayoutBuilder
。或者你可以使用Sizer
库。Link
qc6wkl3g3#
使用MaterialApp顶部的
Sizer
小部件对其进行初始化。我会跟着
yv5phkfx4#
要使用
SizerUtil.deviceType
,您必须使用Sizer
小部件 Package 应用的父小部件。要使您的应用具有响应性,您可以使用sizer软件包提供的w
、h
和sp
扩展函数。这些函数允许您创建与屏幕大小成比例的小部件和字体。例如:在上面的例子中,如果设备是平板电脑,Container占小部件的100%(
100.w
)和高度的50%(50.h
)。.sp
扩展的工作原理与此类似,只是它是用于字体的。