使用透明背景的Flutter圆角半径

10 浏览
0 Comments

使用透明背景的Flutter圆角半径

以下是我的代码,我希望它能渲染一个带有透明背景的圆角容器。

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"),

)

),

然而它的渲染结果如下,它渲染了一个白色的容器(预期是透明的),并带有圆角半径。有什么帮助吗?

screenshot

0
0 Comments

问题的原因是在Flutter中使用BottomSheet时,无法直接设置圆角和透明背景。为了解决这个问题,可以使用BottomSheetTheme来控制底部菜单的样式。最近引入的BottomSheetTheme可以通过在MaterialApp的主题中设置来实现。具体的代码如下所示:

MaterialApp(

theme: ThemeData(

bottomSheetTheme: BottomSheetThemeData(

backgroundColor: Colors.white,

shape: RoundedRectangleBorder(

borderRadius: BorderRadius.vertical(top: Radius.circular(10))

)

)

),

如果想要为不同的底部菜单设置不同的主题,可以在相应的子树中包含一个新的Theme对象,以覆盖底部菜单的主题。如果仍然希望在启动底部菜单时手动覆盖主题,可以使用showBottomSheet和showModalBottomSheet方法的backgroundColor参数,将其设置为透明。具体的代码如下所示:

showModalBottomSheet(

backgroundColor: Colors.transparent,

context: context,

builder: (c) {return NavSheet();},

);

以上方法都可以解决Flutter中设置底部菜单圆角和透明背景的问题。

0
0 Comments

问题出现的原因是在使用ClipRRect时,容器的底部边缘没有被正确地圆角处理。解决方法是使用showModalBottomSheet时,需要指定bottomSheetTheme。

解决方法如下:

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,那么边缘也无法正确地被圆角处理。

当使用showModalBottomSheet时,需要像建议的那样指定bottomSheetTheme。

希望对你有帮助!

0
0 Comments

问题的原因是在一个具有圆角的Container内部嵌套了一个背景颜色设置为透明的父元素。默认情况下,如果使用Scaffold,其背景颜色为白色。解决方法是将父元素的背景颜色设置为透明,这样就可以实现所需的效果。

解决方法代码如下:

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"),

)

),

),

如果在SliverAppBar中使用图片,可以使用以下代码:

SliverFillRemaining(

child: 上面的代码,

)

0