Flutter 在Flatter中,如何在较大屏幕上修复PopupMenuItem小部件中截断的文本?
在下面的屏幕截图中,出现了一个UI崩溃,其中PopupMenuItem文本因较大的屏幕尺寸而被截断,但在较窄的屏幕上完全可见 解决此错误的最佳方法是什么 运行下面的代码,至少我会期望与屏幕截图显示的相反 据我所知,我没有指定任何宽度限制 代码设置唯一的颜色背景,以指示哪个小部件占用的空间Flutter 在Flatter中,如何在较大屏幕上修复PopupMenuItem小部件中截断的文本?,flutter,dart,Flutter,Dart,在下面的屏幕截图中,出现了一个UI崩溃,其中PopupMenuItem文本因较大的屏幕尺寸而被截断,但在较窄的屏幕上完全可见 解决此错误的最佳方法是什么 运行下面的代码,至少我会期望与屏幕截图显示的相反 据我所知,我没有指定任何宽度限制 代码设置唯一的颜色背景,以指示哪个小部件占用的空间 导入“包装:颤振/材料.省道”; main(){ runApp(Main2DemoApp()); } 类Main2DemoApp扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回材料PP( 主页:
导入“包装:颤振/材料.省道”;
main(){
runApp(Main2DemoApp());
}
类Main2DemoApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:Main2DemoScreen(),
);
}
}
类Main2DemoScreen扩展StatefulWidget{
@凌驾
_Main2DemoState createState()=>\u Main2DemoState();
}
类_Main2DemoState扩展状态{
电子邮件会话的静态常数=11;
应用标度(AppScale);;
@凌驾
小部件构建(构建上下文){
_scale=AppScale(上下文);
Widget fullHeaderRow=行(
儿童:[
容器(
颜色:颜色。紫色[200],
子项:getPopupMenuButton(),
),
],
);
fullHeaderRow=容器(
颜色:颜色。琥珀色[200],
孩子:fullHeaderRow,
);
返回脚手架(
appBar:appBar(标题:Text('PopupMenuButton Demo'),
主体:fullHeaderRow,
);
}
小部件getPopupMenuButton(){
Widget emailPopUpItem=PopupMenuItem(
textStyle:textStyle(
颜色:颜色,白色,
fontSize:_scale.popupMenuItem,
),
孩子:排(
儿童:[
填充物(
填充:仅限边缘设置(右:10),
子:图标(
Icons.email,
颜色:颜色,白色,
大小:_scale.popupMenuItem,
)),
Text('立即发送电子邮件')
],
),
价值:电子邮件和对话,
);
列表menuWidgets=[emailPopUpItem];
双图标对齐=_scale.popupMenuButton;
PopupMenuButton PopupMenuButton=PopupMenuButton(
填充:边缘集。全部(0),
颜色:颜色。浅绿色[700],
偏移量:偏移量(40,20),
形状:RoundedRectangleBorder(borderRadius:新的borderRadius.circular(5)),
图标:图标(
图标。更多信息,
颜色:颜色,白色,
尺寸:iconSize,
),
onSelected:(新值){
打印('newValue:$newValue');
},
itemBuilder:(上下文)=>menuWidgets,
);
返回弹出菜单按钮;
}
}
类AppScale{
BuildContext;
AppScale(本文件);
double get popupMenuButton=>scaledWidth(.08);
double get popupMenuItem=>scaledHeight(.025);
双刻度宽度(双刻度宽度){
返回MediaQuery.of(_ctxt).size.width*widthScale;
}
双刻度高度(双刻度高度){
返回MediaQuery.of(_ctxt).size.height*heightScale;
}
}
我认为第行中的图标和文本超过了弹出菜单按钮的最大宽度。
您可以将文本小部件与扩展的小部件包装在一起。如果是,则不会发生错误
Row(
children: [
Padding(
padding: EdgeInsets.only(right: 10),
child: Icon(
Icons.email,
color: Colors.white,
size: _scale.popupMenuItem,
)
),
// Wrap with Expanded Widget
Expanded(
child: Text('Send Email Message Now')
)
],
),
这里定义了弹出菜单的最大和最小宽度限制:似乎无法配置
const double _kMenuMaxWidth = 5.0 * _kMenuWidthStep;
const double _kMenuMinWidth = 2.0 * _kMenuWidthStep;
...
const double _kMenuWidthStep = 56.0;
...
class _PopupMenu<T> extends StatelessWidget {
...
final Widget child = ConstrainedBox(
constraints: const BoxConstraints(
minWidth: _kMenuMinWidth,
maxWidth: _kMenuMaxWidth,
)
...
const double\u kMenuMaxWidth=5.0*\u kMenuWidthStep;
常数double _kMenuMinWidth=2.0*_kMenuWidthStep;
...
常数双步长=56.0;
...
类PopupMenu扩展了无状态小部件{
...
最终小部件子项=约束框(
约束:const-BoxConstraints(
minWidth:_kMenuMinWidth,
maxWidth:_kMenuMaxWidth,
)
...
由于\u弹出菜单
类的最大宽度和高度是固定的,您可以通过灵活
或扩展
小部件包装小部件
否则,您可以通过扩展\u PopupMenu
创建自己的类,并设置自己的配置
您没有检查设备的方向。例如,如果设备位于横向,则宽度大于高度,反之亦然。
const double _kMenuMaxWidth = 5.0 * _kMenuWidthStep;
const double _kMenuMinWidth = 2.0 * _kMenuWidthStep;
...
const double _kMenuWidthStep = 56.0;
...
class _PopupMenu<T> extends StatelessWidget {
...
final Widget child = ConstrainedBox(
constraints: const BoxConstraints(
minWidth: _kMenuMinWidth,
maxWidth: _kMenuMaxWidth,
)
...