【问题标题】:Minimum width of Expanded in a Wrap in Flutter for webFlutter for web 中展开的最小宽度
【发布时间】:2023-03-28 02:47:01
【问题描述】:

我上下搜索了答案,最后我不得不在这里提问,因为我需要同时解决 2 个问题。我对 Flutter 很陌生。 我在这里不包含代码,因为我尝试的所有东西都不起作用,而且我相信它们无论如何都是错误的,但基本上我已经连续说 2 个小部件。第一个具有灵活的宽度,第二个具有固定的宽度。我想要的是第一个有一个最小宽度,这样当用户调整浏览器的宽度时,如果第一个小部件低于这个最小宽度,它将停止收缩,第二个小部件应该转到(环绕)下一行/排。当用户扩大浏览器宽度,并且有足够的空间容纳第一个小部件和第二个小部件的最小宽度时,第二个小部件将回到第一个小部件的同一行。如果我们有更多的额外空间,那么额外的空间将分配给第一个小部件(因为它具有灵活的宽度)

有什么想法吗?

添加图片


> import 'package:flutter/material.dart';
> 
> void main() => runApp(MyApp());
> 
> class MyApp extends StatelessWidget {   // This widget is the root  
> // of your application.   @override   Widget build(BuildContext
> context) {
>     return MaterialApp(
>         title: "ListView.builder",
>         theme: ThemeData(primarySwatch: Colors.green),
>         debugShowCheckedModeBanner: false,
>         home: ListViewBuilder());   } }
> 
> class ListViewBuilder extends StatelessWidget {   @override   Widget
> build(BuildContext context) {
>     return Scaffold(
>       appBar: AppBar(title: const Text("ListView.builder")),
>       body:
>           Wrap(
>             spacing: 8.0, // gap between adjacent chips
>             runSpacing: 4.0,
>             children: <Widget>[
>               TextField(), 
>               ElevatedButton.icon(
>                 icon:const Icon(Icons.play_circle),
>                 label:const Text("Play record"),
>                 onPressed: null),
>               ElevatedButton.icon(
>                 icon:const Icon(Icons.stop_circle),
>                 label:const Text("Stop record"),
>                 onPressed: null),
>               ElevatedButton.icon(
>                 icon:const Icon(Icons.pause_circle),
>                 label:const Text("Pause record"),
>                 onPressed: null),
>             ],
>           )
>     );   } }

【问题讨论】:

  • 有一个名为 Wrap 的小部件可以做到这一点。您可以在这里获得更多信息:youtube.com/…
  • 我已经在我的帖子标题中提到了 Wrap。这没用。 Expanded 中的第一个小部件将一直占用整行

标签: flutter flutter-layout


【解决方案1】:

您需要创建条件来更改布局和/或更改宽度。您可以通过编写如下代码来做到这一点:

MediaQuery.of(context).size.width > 600 ? 
//your code if true 
: 
//your code if false. 

你也可以用同样的方法来决定容器的宽度

Container(
width: MediaQuery.of(context).size.width > 600 ? MediaQuery.of(context).size.width * 0.9 
// this will make the container width 90% of the screen width if the screen width was bigger than 600
:
300 
//This is will set the width to 300 (fixed  value) if the screen width was less than 600

)

【讨论】:

  • 这个我也试过了。我想知道第二个小部件的宽度的问题,所以我可以做 MediaQuery.of(context).size.width - Widget2.width。而不是 MediaQuery.of(context).size.width * 0.9
  • 你有没有试过用MediaQuery.of(context).size.width * x 来确定包裹这两个widget的容器​​的大小,然后给widget1一个固定的价格,对widget2使用Expanded widget
  • 是的,它按照预期的代码工作得很好。我的问题是我在 x 中放了什么。我通过仅列出 2 个小部件来简化我的问题,但实际上有 3 个固定大小的小部件。因此在 Wrap 中,它将开始将这些固定大小的小部件一个接一个地放到下一行,因为灵活大小的小部件达到了最小宽度并拒绝再收缩。也许我把问题弄得太复杂了,也许我只是把所有 3 个固定大小的小部件放到下一行(行)
  • 请分享您的代码和/或您正在尝试做的事情的图像。
猜你喜欢
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 2020-02-23
  • 2020-10-20
  • 2021-11-05
  • 2013-05-14
  • 1970-01-01
相关资源
最近更新 更多