我在RaisedButton
小部件内有一个Center
小部件,作为Column
小部件中的小部件之一。我想在此按钮的右侧添加一个CircularProgressIndicator
并在按下按钮时显示它。但是,我想在显示进度条时使按钮居中。换句话说,我希望按钮始终位于中央,进度条与此按钮对齐。
我尝试在此处使用Row
,但这会按下按钮,并且不再居中。
EDIT1 :查看 @Anil Chauhan 提供的解决方案的结果(感谢您的回答):
就像我之前说过的那样,我试图像他一样使用Row,但问题是在这种情况下,按钮不在屏幕中央,而是由进度条推动。而且我需要它保持在行的中间。
EDIT2 : @Anil Chauhan 编辑的答案现在适用于按钮为预定大小的特定情况。但是,如果根据文本的语言更改按钮的大小(在具有多种语言的应用程序中),此解决方案将不起作用。
这就是我问的问题的原因:“如何将小部件与另一个小部件对齐”。 因为如果可以的话,我不必担心按钮文本的大小了。
在Flutter中处理此问题的正确方法是什么?
预先感谢您的帮助。
答案 0 :(得分:2)
尝试一下:
Updated:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyAppOne(),
);
}
}
class MyAppOne extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyAppOne>{
bool show = false;
@override
Widget build(BuildContext context){
return Scaffold(
body: Stack(
alignment: Alignment.center,
children: <Widget>[
Container(
alignment: Alignment.center,
child: RaisedButton(
onPressed: () {
setState(() {
show =!show;
});
},
child: Text('Show'),
),
),
Positioned(
right: MediaQuery.of(context).size.width * .20,
child: Container(
alignment: Alignment.center,
padding: EdgeInsets.all(10.0),
child: show ? CircularProgressIndicator() : Container(),
),
)
],
)
);
}
}
答案 1 :(得分:1)
希望这会有所帮助。
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> {
bool _showIndicator = false;
void _onButtonClicked() {
setState(() {
_showIndicator = !_showIndicator;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Row(
children: <Widget>[
const Expanded(child: SizedBox()),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10.0),
child: RaisedButton(
child: Text("I am Too Big"),
onPressed: _onButtonClicked,
),
),
Expanded(
child: _showIndicator
? const Align(
alignment: Alignment.centerLeft,
child: CircularProgressIndicator(),
)
: const SizedBox(),
),
],
),
),
);
}
}
我不善于解释事物。但我会尝试。
RaisedButton
的大小取决于其子项。如果将其添加到Row
,它将自动向左对齐(或开始)。Expanded
小部件将填充Flex
小部件中的剩余空间(Row
和Column
是Flex
的子类)。如果添加多个Expanded
小部件,它将平均分配。因此,我在按钮的两边都添加了两个Expanded
以使其居中。Expanded
小部件给孩子。
SizedBox
。CircularProgressIndicator
。所以我添加了它。Expanded
小部件将尝试使其子级填充其内部空间。因此CircularProgressIndicator
将变为椭圆形。我们可以使用Align
小部件来避免这种情况。答案 2 :(得分:0)
Flutter的“列”和“行”窗口小部件具有两个方便的属性,分别称为mainAxisAlignment
和crossAxisAlignment
。我假设由于您使用的是Column,并且希望按钮CircularProgressIndicator
位于按钮的右侧,因此您可能希望使用crossAxisAlignment
,因为Column的横轴是沿水平方向。>
如果可能,请分享您的代码以更好地理解和支持该问题。