รัศมีมุมกระพือกับพื้นหลังโปร่งใส


90

ด้านล่างนี้คือรหัสของฉันซึ่งฉันคาดว่าจะแสดงคอนเทนเนอร์แบบกลมที่มีพื้นหลังโปร่งใส

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

              ),

อย่างไรก็ตามนี่คือสิ่งที่แสดงมันทำให้ภาชนะสีขาว (คาดว่าจะโปร่งใส) ที่มีรัศมีมุมกลม ความช่วยเหลือใด ๆ

ภาพหน้าจอ

คำตอบ:


120

หากคุณห่อ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
ถ้าฉันใช้ภาพในSliverAppBarแล้วจะทำอย่างไร?
Md.Abdul Halim Rafi

1
คุณสามารถใช้ SliverFillRemaining (child: aboveCode)
JenonD

44

หากคุณต้องการปัดเศษมุมที่มีพื้นหลังโปร่งใสแนวทางที่ดีที่สุดคือการใช้ 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"),
    ),
  ),
);

งานนี้ .. แต่ในตอนท้ายของภาชนะของฉัน OS รัศมียกกำลังสอง: imgur.com/a/Qb5kaVW คุณสามารถช่วยฉัน?
ออกัสโต

ใช้งานได้กับColorFiltered. BoxDecorationล้มเหลวในการตัดมุมถ้าคุณมีด้วยColorFilter BlendMode.color
Milan Jaros

เมื่อใช้กับ showModalBottomSheet คุณต้องระบุ bottomSheetTheme เช่น @jayjw แนะนำ
Jørgen Andersen

27

ขณะที่ 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))
        )
      )
    ),

แนะนำเมื่อเร็ว ๆ นี้การใช้ธีมเพื่อควบคุมสไตล์ชีตน่าจะดีที่สุดสำหรับปัญหานี้

หากคุณต้องการจัดรูปแบบแผ่นงานด้านล่างที่แตกต่างกันให้รวมออบเจ็กต์ Theme ใหม่ในทรีย่อยที่เหมาะสมเพื่อแทนที่ธีมแผ่นงานด้านล่างเฉพาะสำหรับพื้นที่นั้น

หากด้วยเหตุผลบางประการคุณยังคงต้องการแทนที่ธีมด้วยตนเองเมื่อเปิดแผ่นงานด้านล่างตอนนี้showBottomSheetและshowModalBottomSheetจะมีพารามิเตอร์backgroundColor ใช้แบบนี้:

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

การใช้ชุดรูปแบบช่วยให้สามารถนำแผ่นงานด้านล่างมาใช้ซ้ำได้โดยไม่คำนึงถึงธีมปัจจุบันของแอป / แอปและไม่มีผลข้างเคียงด้านลบของการตั้งค่าสีผ้าใบตามที่กล่าวไว้


นี่น่าจะเป็นคำตอบที่ได้รับการยอมรับ ... ใช้ได้ผลจริง!
John Detlefs

backgroundColor: Colors.transparent,ทำงานให้ฉัน
tudorprodan

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

14

มันเป็นคำถามเก่า แต่สำหรับใครที่เจอคำถามนี้ ...

พื้นหลังสีขาวหลังมุมโค้งมนไม่ใช่ภาชนะบรรจุ นั่นคือสีแคนวาสของแอป

วิธีแก้ไข: เปลี่ยนสีผ้าใบของแอปของคุณเป็น 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(),
);

มันมีข้อบกพร่องบางอย่าง วัตถุอื่น ๆ ที่ขึ้นอยู่กับสีแคนวาสเช่นไอคอนรีเฟรชจะมีพื้นหลังโปร่งใสเช่นกันแทนที่จะเป็นสีขาว
Jorge Menjivar

3
ฉันไม่อยากแนะนำให้ทำเช่นนี้ วิดเจ็ตจำนวนมากขึ้นอยู่กับสีผ้าใบและสิ่งเหล่านี้จะต้องตั้งค่าทีละรายการ
mauriii

คำตอบที่ดีที่สุดนี่ควรเป็นคำตอบอันดับต้น ๆ
Alvin Quezon

เมื่อใช้นี้ทั้งหมดcanvasColorของกระพือ widgetsจะเปลี่ยนไปcolor.transparentโปรดพยายามที่จะเปิดลิ้นชัก u สิ่งที่เห็น!
Crimin

ในที่สุด! แก้ไขปัญหาของฉัน
mbartn

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

3

ใช้สีพื้นหลังโปร่งใสสำหรับ modalbottomsheet และให้สีแยกต่างหากสำหรับการตกแต่งกล่อง


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


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

     

 ),

)

นี่จะทำให้คอนเทนเนอร์ของคุณมีสีเหมือนกับสีพื้นหลัง และจะมีตู้คอนเทนเนอร์เด็กที่มีความสูง - กว้างเท่ากันพร้อมสีฟ้า วิธีนี้จะทำให้มุมมีสีเดียวกับสีพื้นหลัง


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,
          ),
        )
      );
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.