Ниже приведен мой код, который, как я ожидаю, визуализирует контейнер с круглым углом с прозрачным фоном.
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"),
)
),
Однако это то, что он отображает: он отображает белый контейнер (ожидаемый прозрачным) с радиусом закругленного угла. Любая помощь?
Если вы хотите скруглить углы с прозрачным фоном, лучше всего использовать 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"), ), ), );
источник
ColorFiltered
.BoxDecoration
Не может срезать углы , если у вас естьColorFilter
сBlendMode.color
.С 1 мая 2019 года используйте 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)) ) ) ),
Введенное недавно, использование темы для управления стилем листов должно быть лучшим решением этой проблемы.
Если вы хотите по-разному оформить разные нижние листы, включите новый объект «Тема» в соответствующее поддерево, чтобы переопределить тему нижнего листа только для этой области.
Если по какой-то причине вы все же хотите переопределить тему вручную при запуске нижнего листа, showBottomSheet и showModalBottomSheet теперь имеют параметр backgroundColor . Используйте это так:
showModalBottomSheet( backgroundColor: Colors.transparent, context: context, builder: (c) {return NavSheet();}, );
Использование темы позволяет повторно использовать нижние листы независимо от текущей темы приложения / приложения и не имеет никаких отрицательных побочных эффектов установки цвета холста, как указано.
источник
backgroundColor: Colors.transparent,
у меня/// 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() ); }
источник
Это старый вопрос. Но для тех, кто сталкивается с этим вопросом ...
Белый фон за закругленными углами на самом деле не контейнер. Это цвет холста приложения.
ЧТО ИСПРАВИТЬ: Измените цвет холста вашего приложения на 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(), );
источник
canvasColor
из флаттераwidgets
изменитсяcolor.transparent
, пожалуйста , попробуйте открыть ящик, что у видеть!Scaffold( appBar: AppBar( title: Text('BMI CALCULATOR'), ), body: Container( height: 200, width: 170, margin: EdgeInsets.all(15), decoration: BoxDecoration( color: Color( 0xFF1D1E33, ), borderRadius: BorderRadius.circular(5), ), ), );
источник
Используйте прозрачный цвет фона для модального нижнего листа и задайте отдельный цвет для оформления коробки
showModalBottomSheet( backgroundColor: Colors.transparent, context: context, builder: (context) { return Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( topLeft:Radius.circular(40) , topRight: Radius.circular(40) ), ), padding: EdgeInsets.symmetric(vertical: 20,horizontal: 60), child: Settings_Form(), ); });
источник
Три связанных пакета для решения этой проблемы со многими расширенными параметрами:
источник
class MyApp2 extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData( appBarTheme: AppBarTheme( elevation: 0, color: Colors.blueAccent, ) ), title: 'Welcome to flutter ', home: HomePage() ); } } class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { int number = 0; void _increment(){ setState(() { number ++; }); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.blueAccent, appBar: AppBar( title: Text('MyApp2'), leading: Icon(Icons.menu), // backgroundColor: Colors.blueAccent, ), body: Container( decoration: BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(200.0), topRight: Radius.circular(200) ), color: Colors.white, ), ) ); } }
источник
showModalBottomSheet( context: context, builder: (context) => Container( color: Color(0xff757575), //background color 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"), ) ), )
Это сделает ваш контейнер таким же, как цвет фона. И будет дочерний контейнер той же высоты и ширины синего цвета. Это сделает угол того же цвета, что и цвет фона.
источник