I am trying to work out how to center this button.
@override
Widget build(BuildContext context) {
return new MaterialApp(
debugShowCheckedModeBanner: false,
color: Colors.pinkAccent,
home:new Scaffold(
appBar: new AppBar(backgroundColor: Colors.white,),
body: new Column(
children: <Widget>[
new Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0),
),
new RaisedButton(
splashColor: Colors.pinkAccent,
color: Colors.black,
child: new Text("Scan",style: new TextStyle(fontSize: 20.0,color: Colors.white),),
onPressed: scan,
),
new Padding(padding: const EdgeInsets.symmetric(vertical: 10.0), ),
new Text('$_reader',softWrap: true, style: new TextStyle(fontSize: 30.0,color: Colors.black),),
],
),
),
);
}
This is from here: https://pub.dartlang.org/packages/barcode_scan#-example-tab-.
Please help me fix this, thanks.
EDIT: How can I center everything in "body"?
You can use mainAxisAlignment and crossAxisAlignment properties. Or you can wrap Column widget using a Center widget but this will only centered the cross axis because Column is expanded to it's parent, because of that also you have to use mainAxisAlignment. There are other elements that you can get benefit, when you want to align childs of Column/Row, like:
//[MainAxisAlignment][1].start
//MainAxisAlignment.center
//MainAxisAlignment.end
//MainAxisAlignment.spaceAround
//MainAxisAlignment.spaceEvenly
//MainAxisAlignment.spaceBetween
//....
//[CrossAxisAlignment][1].baseline
//CrossAxisAlignment.start
//CrossAxisAlignment.center
//CrossAxisAlignment.end
//CrossAxisAlignment.stretch
Another thing is, I saw you have used Padding widget to add margin between RaisedButton widget and Text widget. Padding is also just a widget like Container. So, instead Padding you can simply use Container or SizedBox with some height to get margin between.
Simple example:
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
new RaisedButton(
child: new Text("Click"),
onPressed: (){},
),
Container(height: 20.0),//SizedBox(height: 20.0),
new Text('Hello'),
],
),
Since you are directly adding to the Scaffold body, Wrapp Column using a Center widget and remove the crossAxisAlignment. This must work.
If, you try my code example(with Container), you dont have to wrap using a Center widget because I didn't add width for that Container.
You can pass axis alignment in your column
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
main axis is vertical axis in column, and cross axis is horizontal. It will apply this alignment to all children.
edit:
If you want children to be evenly spaced on vertical axis like you your picture describes, you can use Expanded.
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: new Text('Barcode Scanner Example'),
),
body: new Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(child: Container(),),
new RaisedButton(
splashColor: Colors.pinkAccent,
color: Colors.black,
child: new Text(
"Scan",
style: new TextStyle(fontSize: 20.0, color: Colors.white),
),
onPressed: () {},
),
new Expanded(
child: Container(),
),
new Text(
"Reader",
softWrap: true,
style: new TextStyle(fontSize: 30.0, color: Colors.black),
),
new Expanded(
child: Container(),
),
],
),
));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With