Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在Flatter中,如何在较大屏幕上修复PopupMenuItem小部件中截断的文本?_Flutter_Dart - Fatal编程技术网

Flutter 在Flatter中,如何在较大屏幕上修复PopupMenuItem小部件中截断的文本?

Flutter 在Flatter中,如何在较大屏幕上修复PopupMenuItem小部件中截断的文本?,flutter,dart,Flutter,Dart,在下面的屏幕截图中,出现了一个UI崩溃,其中PopupMenuItem文本因较大的屏幕尺寸而被截断,但在较窄的屏幕上完全可见 解决此错误的最佳方法是什么 运行下面的代码,至少我会期望与屏幕截图显示的相反 据我所知,我没有指定任何宽度限制 代码设置唯一的颜色背景,以指示哪个小部件占用的空间 导入“包装:颤振/材料.省道”; main(){ runApp(Main2DemoApp()); } 类Main2DemoApp扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回材料PP( 主页:

在下面的屏幕截图中,出现了一个UI崩溃,其中PopupMenuItem文本因较大的屏幕尺寸而被截断,但在较窄的屏幕上完全可见

解决此错误的最佳方法是什么

运行下面的代码,至少我会期望与屏幕截图显示的相反

据我所知,我没有指定任何宽度限制

代码设置唯一的颜色背景,以指示哪个小部件占用的空间

导入“包装:颤振/材料.省道”;
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,
      )
...