颤动角半径与透明背景

时间:2018-04-24 18:39:45

标签: dart 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

11 个答案:

答案 0 :(得分:24)

如果您将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"),
              )),
        ),

答案 1 :(得分:8)

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

答案 2 :(得分:5)

这是一个古老的问题。但是对于那些遇到这个问题的人...

圆角后面的白色背景实际上不是容器。那就是应用程序的画布颜色。

要修正:将应用的画布颜色更改为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(),
);

答案 3 :(得分:5)

如果要使用透明背景圆角,最好的方法是使用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"),
    ),
  ),
);

答案 4 :(得分:3)

将透明背景颜色用作模态底片,并为框装饰提供单独的颜色


   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(),
    );
  });

答案 5 :(得分:2)

截至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最近,使用主题来控制工作表样式应该是解决此问题的最佳方法。

如果要为不同的底页主题设置不同的主题,请在适当的子树中包含一个新的Theme对象,以覆盖该区域的底页主题。

如果由于某些原因您仍然希望在启动底部工作表时手动覆盖主题,则 showBottomSheet showModalBottomSheet 现在具有 backgroundColor >参数。像这样使用它:

 showModalBottomSheet(
    backgroundColor: Colors.transparent,
    context: context,
    builder: (c) {return NavSheet();},
  );

使用主题可以使底页重新使用,而无需考虑应用程序当前的主题,并且没有设置画布颜色的负面影响。

答案 6 :(得分:1)

/// 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()
    );
  }

答案 7 :(得分:1)

通过许多高级选项可以解决此问题的三个相关软件包是:

答案 8 :(得分:0)

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,
          ),
        )
      );
  }
}

答案 9 :(得分:0)

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

     

 ),

)

这将使您的容器颜色与背景颜色相同。并且将有一个具有相同高度和宽度的蓝色子容器。 这将使角与背景颜色具有相同的颜色。

答案 10 :(得分:0)

如果两个容器都是兄弟容器并且底部容器有圆角 并且顶部容器是动态的,那么您将不得不使用堆栈小部件

Stack(
 children: [
   /*your_widget_1*/,
  /*your_widget_2*/,
 ],
);