前提・実現したいこと
「FractionallySizedBox」というウィジェットで画面の40%という比率でボタンのサイズを決めたい。
・ボタンのサイズが画面の40%
・ボタンの上下に画面の30%の余白スペース
該当のソースコード
flutter
1import 'package:flutter/material.dart'; 2 3void main() { 4 runApp( 5 MaterialApp( 6 home: MyWidget(), 7 ), 8 ); 9} 10 11class MyWidget extends StatelessWidget { 12 @override 13 Widget build(BuildContext context) { 14 return Scaffold( 15 appBar: AppBar( 16 title: Text('【Flutter#51】FractionallySizedBox'), 17 ), 18 body: Column( 19 children: <Widget>[ 20 Flexible( //ボタン上のスペース 21 child: FractionallySizedBox( 22 heightFactor: 0.30, //縦の30%のサイズ 23 ), 24 ), 25 Container( 26 alignment: Alignment.center, 27 child: FractionallySizedBox( 28 heightFactor: 0.40, //縦の40%のサイズ 29 widthFactor: 0.50, //幅の50%のサイズ 30 child: RaisedButton( 31 child: Text('Tap this button.\nConsole「OK」'), 32 onPressed: _onPressed, 33 )), 34 ), 35 Flexible( //ボタン下のスペース 36 child: FractionallySizedBox( 37 heightFactor: 0.30, //縦の30%のサイズ 38 ), 39 ), 40 ], 41 ), 42 ); 43 } 44} 45 46void _onPressed() { 47 print('OK'); 48} 49
発生している問題・エラーメッセージ
・BoxConstraints(w = 187.5、h = Infinity)
つまり高さが無限なのに対して40%を指定しているからエラーが出ていると認識しています。
では高さを指定するには…?
・上下に30%の余白をいれているはずが…
なぜか、上寄りになってしまう。
下の余白としていれた「FractionallySizedBox」を外すと
上部の余白の30%は適用される
Performing hot restart... Syncing files to device iPhone SE (2nd generation)... Restarted application in 770ms. ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════ The following assertion was thrown during performLayout(): BoxConstraints forces an infinite height. These invalid constraints were provided to RenderSemanticsAnnotations's layout() function by the following function, which probably computed the invalid constraints in question: RenderFractionallySizedOverflowBox.performLayout (package:flutter/src/rendering/shifted_box.dart:960:13) The offending constraints were: BoxConstraints(w=187.5, h=Infinity) The relevant error-causing widget was: FractionallySizedBox file:///Users/aiueo/Desktop/flutter_app/lib/main.dart:27:20
和訳
ホットリスタートを実行しています...
ファイルをデバイスiPhoneSE(第2世代)に同期しています...
770msでアプリケーションを再起動しました。
==╡ライブラリのレンダリングによって引き起こされた例外╞========================================= ================
次のアサーションがperformLayout()中にスローされました。
BoxConstraintsは、無限の高さを強制します。
これらの無効な制約は、RenderSemanticsAnnotationsのlayout()関数に提供されました。
次の関数。おそらく問題の無効な制約を計算しました。
RenderFractionallySizedOverflowBox.performLayout
(package:flutter / src / rendering / shifted_box.dart:960:13)
問題のある制約は次のとおりです。
BoxConstraints(w = 187.5、h = Infinity)
関連するエラーの原因となるウィジェットは次のとおりです。
FractionallySizedBox file:///Users/aiueo/Desktop/flutter_app/lib/main.dart:27:20
試したこと
①ボタンの中「heightFactor: 0.40,」を外す
これをするとエラーはなくなりますが、
「ボタンサイズを画面の高さの40%にしていする」という結果が得られません。
②「Column」を外し、ウィジェット をボタンのみにする。
ボタンのみだとボタンが想定したサイズになります。
その他
これよりもっと良い方法あるよ!とか、
そもそもその使い方を想定したウィジェットじゃない!などの
ご指摘等もお待ちしておりますので宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/20 04:12