FlutterでRaisedButton
の幅を設定できないことがわかりました。よく理解していれば、RaisedButton
をSizedBox
に入れる必要があります。その後、ボックスの幅または高さを設定できます。それが正しいか?別の方法がありますか?
これは、すべてのボタンの周りにSizedBox
を作成するのは少し面倒なので、なぜこのように選択するのか疑問に思っています。彼らにはそうする正当な理由があると確信していますが、私はそれを見ません。足場は読みやすく、初心者向けに構築するのがかなり困難です。
new SizedBox(
width: 200.0,
height: 100.0,
child: new RaisedButton(
child: new Text('Blabla blablablablablablabla bla bla bla'),
onPressed: _onButtonPressed,
),
),
ドキュメントで述べたように ここ
上げられたボタンの最小サイズは88.0 x 36.0で、ButtonThemeでオーバーライドできます。
あなたはそのようにすることができます
ButtonTheme(
minWidth: 200.0,
height: 100.0,
child: RaisedButton(
onPressed: () {},
child: Text("test"),
),
);
match_parent
には次を使用できます
SizedBox(
width: double.infinity, // match_parent
child: RaisedButton(...)
)
使用できる特定の値
SizedBox(
width: 100, // specific value
child: RaisedButton(...)
)
これは、フラッターがサイズほど大きくないためです。制約についてです。
通常、2つのユースケースがあります。
Padding
、これは子制約を取り、それを増やします。SizedBox
だけでなく、ストレッチモードのColumn
も、...RaisedButton
は最初のケースです。つまり、独自の高さ/幅を定義するのはボタンです。また、重要な規則に従って、上げられたボタンのサイズは固定されています。
この動作は望ましくないため、2番目のタイプのウィジェットを使用してボタンの制約をオーバーライドできます。
とにかく、これがたくさん必要な場合は、あなたのために仕事をする新しいウィジェットを作成することを検討してください。または、高さプロパティを持つMaterialButton
を使用します。
materialButtonを使用することをお勧めします。次のようにすることができます。
new MaterialButton(
height: 40.0,
minWidth: 70.0,
color: Theme.of(context).primaryColor,
textColor: Colors.white,
child: new Text("Push"),
onPressed: () => {},
splashColor: Colors.redAccent,
)
RaisedButtonに直接幅を指定することはできず、その子に幅を指定できるため、このコードは問題の解決に役立ちます。
double width = MediaQuery.of(context).size.width;
var maxWidthChild = SizedBox(
width: width,
child: Text(
StringConfig.acceptButton,
textAlign: TextAlign.center,
));
RaisedButton(
child: maxWidthChild,
onPressed: (){},
color: Colors.white,
);
すべてのRaisedButton
sの高さとminWidthをグローバルに変更する場合は、ThemeData
内でMaterialApp
をオーバーライドできます。
@override
Widget build(BuildContext context) {
return MaterialApp(
...
theme: ThemeData(
...
buttonTheme: ButtonThemeData(
height: 46,
minWidth: 100,
),
));
}
拡張ウィジェットを使用する必要があります。ただし、ボタンが列にある場合、展開されたウィジェットは列の残りを埋めます。そのため、展開されたウィジェットを行で囲む必要があります。
Row(children: <Widget>[
Expanded(
flex: 1,
child: RaisedButton(
child: Text("Your Text"),
onPressed: _submitForm,
),
),),])
親に一致する[上げる]ボタンを作成する私の好ましい方法は、コンテナでラップすることです。以下はサンプルコードです。
Container(
width: double.infinity,
child: RaisedButton(
onPressed: () {},
color: Colors.deepPurpleAccent[100],
child: Text(
"Continue",
style: TextStyle(color: Colors.white),
),
),
)
RainseButton
が親のスペースを占めるようにする場合は、 Expanded Widget を試してください。
コメントで言われているとおりに行うこともできますし、労力を節約してRawMaterialButtonで作業することもできます。すべてが揃っており、境界線を円形に変更したり、他の属性をたくさん追加したりできます。 ex形状(半径を大きくすると、より円形になります)
shape: new RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)),//ex add 1000 instead of 25
また、ウィジェットであり、子属性の下で別のウィジェットを受け入れるGestureDetectorを使用して、ボタンとして任意の形状を使用できます。ここの他の例のように
GestureDetector(
onTap: () {//handle the press action here }
child:Container(
height: 80,
width: 80,
child:new Card(
color: Colors.blue,
shape: new RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)),
elevation: 0.0,
child: Icon(Icons.add,color: Colors.white,),
),
)
)