【发布时间】:2019-01-24 20:24:01
【问题描述】:
我正在尝试为我的应用程序制作加载屏幕,我正在使用CircularProgressIndicator 小部件,但我想知道是否有办法让它的高度和宽度更大,它太小了。
那么,有人可以帮我解决这个问题吗?
【问题讨论】:
标签: flutter
我正在尝试为我的应用程序制作加载屏幕,我正在使用CircularProgressIndicator 小部件,但我想知道是否有办法让它的高度和宽度更大,它太小了。
那么,有人可以帮我解决这个问题吗?
【问题讨论】:
标签: flutter
您可以将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,
)
],
),
),
);
【讨论】:
请测试你的答案。
只需将 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
【讨论】:
简单总是强大的,用变换小部件包装它
Transform.scale(
scale: 0.5,
child: CircularProgressIndicator(),
)
【讨论】:
如果你用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),
),
),
),
],
);
【讨论】:
这可能很有用
Container(
width: 50.0,
height: 20.0,
child: (CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
Colors.green,
),
backgroundColor: Colors.red,
value: 0.2,
))),
【讨论】:
这对我有用。重要的是围绕进度指示器包裹一个中心
SizedBox(
height: 16,
width: 16,
child: Center(
child: CircularProgressIndicator(
strokeWidth: 1.5,
)
)
),
【讨论】:
这是对我有用的解决方案
Center(
heightFactor: 1,
widthFactor: 1,
child: SizedBox(
height: 16,
width: 16,
child: CircularProgressIndicator(
strokeWidth: 1.5,
),
),
)
【讨论】:
我可以防止 CircularProgressIndicator 在顶部、底部、左侧和右侧被剪裁的唯一方法是将其包裹在 Padding 中,并将填充设置为指示器笔划宽度的一半。
Padding(
padding: EdgeInsets.all(5),
child: SizedBox(
width: 100,
height: 100,
child: CircularProgressIndicator(
strokeWidth: 10,
)
)
)
不知道为什么这突然成为一个问题,我多年来一直在使用循环进度指示器,之前没有任何问题。
【讨论】:
您可以使用此示例更好地处理小部件指示器显示。
SizedBox(
height: 15.0,
width: 15.0,
child: Transform.scale(
scale: 2,
child: CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(
Color(Colors.blue),
),
),
),
),
这将允许您更改指示器的大小并在框或按钮内更好地控制它。
【讨论】:
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,
),
) ;
}
【讨论】: