Poniżej znajduje się mój kod, który, jak spodziewam się, renderuje kontener z okrągłym rogiem z przezroczystym tłem.
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"),
)
),
Jednak to właśnie renderuje, renderuje biały pojemnik (oczekiwany przezroczysty) z zaokrąglonym promieniem narożnika. Jakaś pomoc?
Jeśli chcesz zaokrąglić rogi na przezroczystym tle, najlepszym podejściem jest użycie 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"), ), ), );
źródło
ColorFiltered
. NieBoxDecoration
udaje się iść na skróty, jeśli maszColorFilter
zBlendMode.color
.Od 1 maja 2019 r. Używaj 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)) ) ) ),
Wprowadzony niedawno, użycie motywu do kontrolowania stylu arkuszy powinno być najlepszym rozwiązaniem tego problemu.
Jeśli chcesz nadać inny motyw poszczególnym dolnym arkuszom, dołącz nowy obiekt Motyw w odpowiednim poddrzewie, aby zastąpić motyw dolnego arkusza tylko dla tego obszaru.
Jeśli z jakiegoś powodu nadal chcesz ręcznie zastąpić motyw podczas uruchamiania dolnego arkusza, showBottomSheet i showModalBottomSheet mają teraz parametr backgroundColor . Użyj tego w ten sposób:
showModalBottomSheet( backgroundColor: Colors.transparent, context: context, builder: (c) {return NavSheet();}, );
Użycie motywu umożliwia ponowne wykorzystanie dolnych arkuszy niezależnie od bieżącego motywu aplikacji / aplikacji i nie ma żadnych negatywnych skutków ubocznych ustawiania koloru obszaru roboczego, jak wspomniano.
źródło
backgroundColor: Colors.transparent,
pracował dla mnie/// 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!"),) ), ); }
Wywołaj to, aby wyświetlić BotoomSheet z narożnikami:
/// Show the bottomSheet when called Future _onMenuPressed() async { showModalBottomSheet( context: context, builder: (widgetBuilder) => bottomSheetBuilder() ); }
źródło
To stare pytanie. Ale dla tych, którzy napotkali to pytanie ...
Białe tło za zaokrąglonymi rogami nie jest w rzeczywistości pojemnikiem. To jest kolor płótna aplikacji.
NAPRAWIĆ: Zmień kolor płótna swojej aplikacji na Colors.transparent
Przykład:
return new MaterialApp( title: 'My App', theme: new ThemeData( primarySwatch: Colors.green, canvasColor: Colors.transparent, //----Change to this------------ accentColor: Colors.blue, ), home: new HomeScreen(), );
źródło
canvasColor
z trzepotaniemwidgets
zmieni sięcolor.transparent
, spróbuj otwartej szuflady, co widzisz!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), ), ), );
źródło
Użyj przezroczystego koloru tła dla modalnego dolnego arkusza i nadaj oddzielny kolor do dekoracji pudełka
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(), ); });
źródło
Trzy powiązane pakiety obejmujące ten problem z wieloma zaawansowanymi opcjami to:
źródło
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, ), ) ); } }
źródło
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"), ) ), )
Dzięki temu kolor kontenera będzie taki sam jak kolor tła. Będzie też pojemnik podrzędny o tej samej wysokości i szerokości w kolorze niebieskim. Dzięki temu narożnik będzie miał taki sam kolor jak kolor tła.
źródło