如何将大小设置为 CircularProgressIndicator?

Posted

技术标签:

【中文标题】如何将大小设置为 CircularProgressIndicator?【英文标题】:How to set size to CircularProgressIndicator? 【发布时间】:2019-01-24 20:24:01 【问题描述】:

我正在尝试为我的应用程序制作加载屏幕,我正在使用CircularProgressIndicator 小部件,但我想知道是否有办法让它的高度和宽度更大,它太小了。

那么,有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

您可以将CircularProgressIndicator 包装在SizedBox 小部件中

   @override
    Widget build(BuildContext context) 
      return Container(
        child: Center(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              SizedBox(
                child: CircularProgressIndicator(),
                height: 200.0,
                width: 200.0,
              ),
              SizedBox(
                child: CircularProgressIndicator(),
                height: 50.0,
                width: 50.0,
              ),
              SizedBox(
                child: CircularProgressIndicator(),
                height: 10.0,
                width: 10.0,
              )
            ],
          ),
        ),
      );

【讨论】:

这样做,圆圈没有正确显示,并被裁剪为 Box 尺寸。 确保您的孩子是 Center(child: CircularProgressIndicator()) 否则指标将不适合尺寸框。 @AndresCastro 你知道为什么进度指示器必须在 Center 小部件内吗? 可以在 Center 或 Align 中,但它应该有一个有约束的父级 添加 Center 或 Align 作为 SizedBox 的父级【参考方案2】:

请测试你的答案。

只需将 CircularProgressIndicator 放置在 SizedBox 或容器中:

main() =>
    runApp(
        SizedBox(width: 30, height: 30, child: CircularProgressIndicator()));

... 仍会导致 CircularProgressIndicator 填充可用空间。 SizedBox 不限制 CircularProgressIndicator(这似乎是 Flutter 中的一个错误)。

然而,用 Center 包裹它会使其工作:

main() =>
    runApp(Center(child: 
        SizedBox( width: 30, height: 30, child: CircularProgressIndicator())));

我在 Github 上抱怨过这种令人困惑的行为。 Flutter 团队通过新文档做出了有益的回应,解释说如果无法确定小部件的对齐方式,则可能会忽略它所需的大小。

https://github.com/flutter/website/pull/5010/commits/3070c777a61b493b46cdde92fa7afc21de7adf25

【讨论】:

这非常有帮助,谢谢!即使您将 SizedBox 替换为 Container,UI 也可以正常工作! 它不是@AshwinBalani。至少在我的情况下不起作用,因此可以安全地得出结论,您的假设不正确。 再说一遍——它与 SizedBox 或 Container 无关,并且接受的答案是不正确的。如果没有对齐,这些小部件的大小将被忽略。 Flutter终于添加了关于它的注释。 github.com/flutter/website/issues/4992#event-4033238437 @rahulserver 你能分享你的代码伙伴吗?也许我可以帮忙【参考方案3】:

简单总是强大的,用变换小部件包装它

Transform.scale(
  scale: 0.5,
  child: CircularProgressIndicator(),
)

【讨论】:

这行得通。其他解决方案会生成椭圆而不是圆形。 这很好用。其他解决方案可能有效也可能无效,具体取决于您的小部件树/父小部件。【参考方案4】:

如果你用Column Widget 包裹它,你可以更好地控制指标的大小。它没有伤害,但可以完成工作。就我而言,是在按钮内使用小型加载指示器。

Column(
  crossAxisAlignment: CrossAxisAlignment.center,
  mainAxisAlignment: MainAxisAlignment.center,
  children: <Widget>[
    Center(
      child: Container(
        height: 20,
        width: 20,
        margin: EdgeInsets.all(5),
        child: CircularProgressIndicator(
          strokeWidth: 2.0,
          valueColor : AlwaysStoppedAnimation(Colors.white),
        ),
      ),
    ),
  ],
);

【讨论】:

你绝对是对的。这是正确答案 是的,这也对我有用!如果你想在高度方面有一个最小的对话框,只需给列这个附加属性:mainAxisSize: MainAxisSize.min【参考方案5】:

这可能很有用

Container(
          width: 50.0,
          height: 20.0,
          child: (CircularProgressIndicator(
            valueColor: AlwaysStoppedAnimation<Color>(
              Colors.green,
            ),
            backgroundColor: Colors.red,
            value: 0.2,
          ))),

【讨论】:

【参考方案6】:

这对我有用。重要的是围绕进度指示器包裹一个中心

SizedBox(
  height: 16,
  width: 16,
  child: Center(
   child: CircularProgressIndicator(
    strokeWidth: 1.5,
   )
  )
),

【讨论】:

【参考方案7】:

这是对我有用的解决方案

Center(
        heightFactor: 1,
        widthFactor: 1,
        child: SizedBox(
          height: 16,
          width: 16,
          child: CircularProgressIndicator(
            strokeWidth: 1.5,
          ),
        ),
      )

【讨论】:

【参考方案8】:

我可以防止 CircularProgressIndicator 在顶部、底部、左侧和右侧被剪裁的唯一方法是将其包裹在 Padding 中,并将填充设置为指示器笔划宽度的一半。

  Padding(
    padding: EdgeInsets.all(5),
    child: SizedBox(
      width: 100,
      height: 100,
      child: CircularProgressIndicator(
        strokeWidth: 10,
      )
    )
  )

不知道为什么这突然成为一个问题,我多年来一直在使用循环进度指示器,之前没有任何问题。

【讨论】:

【参考方案9】:

您可以使用此示例更好地处理小部件指示器显示。

SizedBox(
        height: 15.0,
        width: 15.0,
            child: Transform.scale(
              scale: 2,
              child: CircularProgressIndicator(
                strokeWidth: 2,
                    valueColor: AlwaysStoppedAnimation<Color>(
                      Color(Colors.blue),
                ),
              ),
            ),
          ),

这将允许您更改指示器的大小并在框或按钮内更好地控制它。

【讨论】:

【参考方案10】:
bool isLoading = false;

Widget build(BuildContext context) 
  return isLoading
    ? _loadingIndicator()
    : FlatButton.icon(
    icon: Icon(Icons.arrow_forward),
    label: Text('Go to'),
    onPressed: () async 
      setState(() => isLoading = true);
      // Async code ---> Then
      setState(() => isLoading = false);
    ,
  );


Widget _loadingIndicator() 
  return Padding(
    padding: EdgeInsets.symmetric(vertical: 12.0),
    child: SizedBox(
      child: CircularProgressIndicator(
        valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
        strokeWidth: 3.0,
      ),
      height: 25.0,
      width: 25.0,
    ),
  ) ;


【讨论】:

请描述一下你的答案。

以上是关于如何将大小设置为 CircularProgressIndicator?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 CircularProgress 栏的颜色

如何将大小设置为FloatingActionButton

材料表如何将页面大小设置为全部

如何将其设置为分配左侧 div 与屏幕的剩余大小一样多? [复制]

如何将谷歌地图的大小设置为不重叠BottomNavigationBar

c# WINFORM窗体如何设置才可以不能随意拖动大小