以下は、透明な背景を持つ角丸コンテナーをレンダリングする予定の私のコードです。
return new Container(
//padding: const EdgeInsets.all(32.0),
height: 800.0,
//color: const Color(0xffDC1C17),
//color: const Color(0xffFFAB91),
decoration: new BoxDecoration(
color: Colors.green, //new Color.fromRGBO(255, 0, 0, 0.0),
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(40.0),
topRight: const Radius.circular(40.0))
),
child: new Container(
decoration: new BoxDecoration(
color: Colors.blue,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(40.0),
topRight: const Radius.circular(40.0))
),
child: new Center(
child: new Text("Hi modal sheet"),
)
),
しかし、これがレンダリングするものであり、丸い角の丸みを帯びた白いコンテナ(予想される透明)をレンダリングします。助けがありますか?
Container
を、背景色をColors.transparent
に設定した親の内側の角を丸めてラップすると、探しているものができると思います。 Scaffold
を使用している場合、デフォルトの背景色は白です。希望どおりになったら、それをColors.transparent
に変更します。
new Container(
height: 300.0,
color: Colors.transparent,
child: new Container(
decoration: new BoxDecoration(
color: Colors.green,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(40.0),
topRight: const Radius.circular(40.0))),
child: new Center(
child: new Text("Hi modal sheet"),
)),
),
背景を透明にして角を丸くしたい場合、ClipRRectを使用するのが最善の方法です。
return ClipRRect(
borderRadius: BorderRadius.circular(40.0),
child: Container(
height: 800.0,
width: double.infinity,
color: Colors.blue,
child: Center(
child: new Text("Hi modal sheet"),
),
),
);
古い質問です。しかし、この質問に出くわした人のために...
丸い角の後ろの白い背景は、実際にはコンテナではありません。それがアプリのキャンバスの色です。
修正:アプリのキャンバスの色をColors.transparentに変更
例:
return new MaterialApp(
title: 'My App',
theme: new ThemeData(
primarySwatch: Colors.green,
canvasColor: Colors.transparent, //----Change to this------------
accentColor: Colors.blue,
),
home: new HomeScreen(),
);
/// Create the bottom sheet UI
Widget bottomSheetBuilder(){
return Container(
color: Color(0xFF737373), // This line set the transparent background
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16.0),
topRight: Radius.circular( 16.0)
)
),
child: Center( child: Text("Hi everyone!"),)
),
);
}
これを呼び出して、BotoomSheetにコーナーを表示します。
/// Show the bottomSheet when called
Future _onMenuPressed() async {
showModalBottomSheet(
context: context,
builder: (widgetBuilder) => bottomSheetBuilder()
);
}
2019年5月1日の時点で、BottomSheetThemeを使用します。
MaterialApp(
theme: ThemeData(
// Draw all modals with a white background and top rounded corners
bottomSheetTheme: BottomSheetThemeData(
backgroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(10))
)
)
),
Introduced 最近、テーマを使用してシートのスタイルを制御することがこの問題に最も適しているはずです。
別のボトムシートのテーマを変更する場合は、適切なサブツリーに新しいテーマオブジェクトを含めて、その領域のボトムシートテーマをオーバーライドします。
何らかの理由で、ボトムシートを起動するときにテーマを手動でオーバーライドしたい場合は、showBottomSheetおよびshowModalBottomSheet 現在、backgroundColorパラメーターがあります。次のように使用します。
showModalBottomSheet(
backgroundColor: Colors.transparent,
context: context,
builder: (c) {return NavSheet();},
);
テーマを使用すると、アプリ/アプリの現在のテーマに関係なく、ボトムシートを再利用でき、前述のようにキャンバスの色を設定することによる悪影響はありません。