A continuación se muestra mi código que espero representar un contenedor de esquina redonda con un fondo transparente.
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"),
)
),
Sin embargo, esto es lo que representa, representa un contenedor blanco (se espera que sea transparente) con un radio de esquina redondeado. ¿Alguna ayuda?
Si desea redondear esquinas con fondo transparente, el mejor enfoque es usar 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"), ), ), );
fuente
ColorFiltered
. ElBoxDecoration
no corta las esquinas si tieneColorFilter
conBlendMode.color
.A partir del 1 de mayo de 2019, use 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)) ) ) ),
Presentado recientemente, usar un tema para controlar el estilo de las hojas debería ser lo mejor para este problema.
Si desea asignar un tema a diferentes hojas inferiores de manera diferente, incluya un nuevo objeto Tema en el subárbol apropiado para anular el tema de la hoja inferior solo para esa área.
Si por alguna razón aún desea anular el tema manualmente al iniciar una hoja inferior, showBottomSheet y showModalBottomSheet ahora tienen un parámetro backgroundColor . Úselo así:
showModalBottomSheet( backgroundColor: Colors.transparent, context: context, builder: (c) {return NavSheet();}, );
El uso del tema permite que las hojas inferiores se reutilicen independientemente del tema actual de la aplicación / aplicación, y no tiene ninguno de los efectos secundarios negativos de configurar el color del lienzo como se mencionó.
fuente
backgroundColor: Colors.transparent,
trabajó para mí/// 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!"),) ), ); }
Llame a esto para mostrar el BotoomSheet con esquinas:
/// Show the bottomSheet when called Future _onMenuPressed() async { showModalBottomSheet( context: context, builder: (widgetBuilder) => bottomSheetBuilder() ); }
fuente
Es una vieja pregunta. Pero para aquellos que se encuentren con esta pregunta ...
El fondo blanco detrás de las esquinas redondeadas no es en realidad el contenedor. Ese es el color del lienzo de la aplicación.
PARA REPARAR: Cambie el color del lienzo de su aplicación a Colors.transparent
Ejemplo:
return new MaterialApp( title: 'My App', theme: new ThemeData( primarySwatch: Colors.green, canvasColor: Colors.transparent, //----Change to this------------ accentColor: Colors.blue, ), home: new HomeScreen(), );
fuente
canvasColor
de aleteowidgets
cambiará acolor.transparent
, intenta abrir el cajón, lo que u ver!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), ), ), );
fuente
Utilice un color de fondo transparente para la hoja inferior modal y dé un color diferente para la decoración de la caja
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(), ); });
fuente
Tres paquetes relacionados para cubrir este problema con muchas opciones avanzadas son:
fuente
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, ), ) ); } }
fuente
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"), ) ), )
Esto hará que el color del contenedor sea el mismo que el color de fondo. Y habrá un contenedor secundario de la misma altura y ancho con color azul. Esto hará que la esquina tenga el mismo color que el color de fondo.
fuente