Flutter 如何限制“Scaffold”的宽度和高度(适用于Web和桌面)

Flutter 如何限制“Scaffold”的宽度和高度(适用于Web和桌面),flutter,flutter-layout,Flutter,Flutter Layout,下面的屏幕截图是桌面上的Scaffold(在浏览器上应该类似): 是否可以将脚手架约束为最小尺寸(宽度和高度) 如果屏幕宽度小于最小宽度,则水平滚动条会左右移动 如果屏幕高度小于最小高度,垂直滚动条会上下移动 例如,我们项目中的设计师希望浏览器上的最小宽度为960px。下面是一个示例main.dart,它使用LayoutBuilder将脚手架(主体和appBar)约束为最小480dp,如果宽度约束小于此值,使用滚动条将脚手架包装在水平滚动视图中。如果约束高度小于480dp,它将在垂直滚动中包裹

下面的屏幕截图是桌面上的
Scaffold
(在浏览器上应该类似):

是否可以将脚手架约束为最小尺寸(宽度和高度)

如果屏幕宽度小于最小宽度,则水平滚动条会左右移动

如果屏幕高度小于最小高度,垂直滚动条会上下移动


例如,我们项目中的设计师希望浏览器上的最小宽度为960px。

下面是一个示例main.dart,它使用
LayoutBuilder
将脚手架(主体和appBar)约束为最小480dp,如果宽度约束小于此值,使用
滚动条
将脚手架包装在水平
滚动视图
中。如果约束高度小于480dp,它将在垂直滚动中包裹脚手架(可能已包裹或未包裹)

如果宽度和高度都小于480dp,则可以看到2个滚动条。在这种情况下,小部件树必须是
ScrollBar>ScrollBar>ScrollView>ScrollView
。如果小部件树是
ScrollBar>ScrollView>ScrollBar>ScrollView
,则嵌套的滚动条仅在父滚动条滚动到边缘侧时可见

导入“包装:颤振/材料.省道”;
main(){
runApp(材料应用程序)(
//设置默认值为isAlwaysShown,所以不需要为单个滚动条设置。
主题:主题数据(scrollbarTheme:ScrollbarThemeData(isAlwaysShown:true)),
主页:App(),
));
}
类应用程序扩展StatefulWidget{
@凌驾
AppState createState()=>AppState();
}
类AppState扩展了状态{
最终最小宽度=480.0;
最终最小高度=480.0;
ScrollController_horizontalController=ScrollController();
ScrollController_verticalController=ScrollController();
@凌驾
无效处置(){
_horizontalController.dispose();
_verticalController.dispose();
super.dispose();
}
小部件_buildScaffold(){
返回脚手架(
appBar:appBar(标题:文本('2D滚动条')),
主体:容器(颜色:颜色:琥珀色),
底部导航栏:底部导航栏(
项目:[
BottomNavigationBarItem(图标:icon(Icons.home),标签:“home”),
BottomNavigationBarItem(图标:图标(Icons.school),标签:“school”),
],
),
);
}
@凌驾
小部件构建(构建上下文){
最终脚手架=_buildScaffold();
返回布局生成器(
生成器:(上下文、约束){
final horizontalScrollbarEnabled=约束。最小宽度<最小宽度;
final verticalScrollbarEnabled=约束。最小高度<最小高度;
if(水平滚动禁用和垂直滚动禁用){
返回滚动条(
控制器:_水平控制器,
子:滚动条(
//重要提示:此滚动条仅处理垂直滚动视图的通知。
//第一个滚动视图(深度=0)是水平视图。
//第二个滚动视图(深度=1)是垂直视图。
//如果notification.depth!=1,则通知将冒泡到水平滚动条。
notificationPredicate:(通知)=>notification.depth==1,
控制器:_垂直控制器,
子:SingleChildScrollView(
控制器:_水平控制器,
滚动方向:轴水平,
子:SingleChildScrollView(
控制器:_垂直控制器,
子:容器(
宽度:最小宽度,
高度:最小高度,
孩子:脚手架,
),
),
),
),
);
}else if(水平滚动可启用){
返回滚动条(
控制器:_水平控制器,
子:SingleChildScrollView(
控制器:_水平控制器,
滚动方向:轴水平,
子:容器(
宽度:最小宽度,
孩子:脚手架,
),
),
);
}else if(垂直滚动可启用){
返回滚动条(
控制器:_垂直控制器,
子:SingleChildScrollView(
控制器:_垂直控制器,
子:容器(
高度:最小高度,
孩子:脚手架,
),
),
);
}
返回脚手架;
},
);
}
}

您可以使用layout builder,并拥有一个定制的响应类,该类根据您给出的约束呈现不同的小部件。您能给我一个代码片段草稿吗?谢谢@benjamin lee!它适用于水平约束。我试图使它也适用于垂直约束。@XuanDaiNguyen,我编辑了我的答案,所以它同时使用水平和垂直滚动。我现在把这两个问题留在那里。我认为更好的解决方案是等待并查看:我编辑了您的代码以修复嵌套滚动条问题。