bán kính góc rung với nền trong suốt


87

Dưới đây là mã của tôi mà tôi mong đợi sẽ hiển thị một vùng chứa góc tròn với nền trong suốt.

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

              ),

Tuy nhiên, đây là những gì nó hiển thị, nó hiển thị một vùng chứa màu trắng (dự kiến ​​trong suốt) với bán kính góc tròn. Bất kỳ giúp đỡ?

ảnh chụp màn hình

Câu trả lời:


113

Nếu bạn bọc của bạn Containervới các góc tròn bên trong của cha mẹ với màu nền được đặt thành, Colors.transparenttôi nghĩ đó là điều bạn đang tìm kiếm. Nếu bạn đang sử dụng Scaffoldmàu nền mặc định là màu trắng. Thay đổi điều đó thành Colors.transparentnếu điều đó đạt được những gì bạn muốn.

        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
Nếu tôi sử dụng hình ảnh trong SliverAppBar , thì làm thế nào để làm điều đó?
Md.Abdul Halim Rafi

1
bạn có thể sử dụng SliverFillRemaining (con: trênCode)
JenonD

42

Nếu bạn muốn làm tròn các góc với nền trong suốt, cách tốt nhất là sử dụng 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"),
    ),
  ),
);

Điều này hoạt động .. nhưng ở cuối vùng chứa của tôi, bán kính os bình phương: imgur.com/a/Qb5kaVW . bạn có thể giúp tôi?
Augusto

Hoạt động cũng với ColorFiltered. Các BoxDecorationthất bại trong việc cắt góc nếu bạn có ColorFiltervới BlendMode.color.
Milan Jaros

khi được sử dụng với showModalBottomSheet, bạn phải chỉ định bottomSheetTheme như @jayjw đã đề xuất
Jørgen Andersen

27

Kể từ ngày 1 tháng 5 năm 2019, hãy sử dụng 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))
        )
      )
    ),

Được giới thiệu gần đây, sử dụng một chủ đề để kiểm soát kiểu trang tính sẽ là cách tốt nhất cho vấn đề này.

Nếu bạn muốn đặt chủ đề cho các trang dưới cùng khác nhau, hãy đưa một đối tượng Chủ đề mới vào cây con thích hợp để ghi đè chủ đề trang dưới cùng chỉ dành cho khu vực đó.

Nếu vì lý do nào đó, bạn vẫn muốn ghi đè chủ đề theo cách thủ công khi khởi chạy trang tính dưới cùng, showBottomSheetshowModalBottomSheet hiện có thông số backgroundColor . Sử dụng nó như thế này:

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

Sử dụng chủ đề cho phép sử dụng lại các trang dưới cùng bất kể chủ đề hiện tại của ứng dụng / ứng dụng là gì và không có tác dụng phụ tiêu cực nào khi đặt màu canvas như đã đề cập.


Đây phải là câu trả lời được chấp nhận ... hoạt động hoàn hảo!
John Detlefs

backgroundColor: Colors.transparent,làm việc cho tôi
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!"),)
      ),
    );
  }

Gọi điều này để hiển thị BotoomSheet với các góc:

/// Show the bottomSheet when called
  Future _onMenuPressed() async {
    showModalBottomSheet(
        context: context,
        builder: (widgetBuilder) => bottomSheetBuilder()
    );
  }

14

Đó là một câu hỏi cũ. Nhưng đối với những người gặp câu hỏi này ...

Nền trắng đằng sau các góc tròn không thực sự là vùng chứa. Đó là màu canvas của ứng dụng.

ĐỂ SỬA: Thay đổi màu canvas của ứng dụng thành Colors.transparent

Thí dụ:

return new MaterialApp(
  title: 'My App',
  theme: new ThemeData(
    primarySwatch: Colors.green,
    canvasColor: Colors.transparent, //----Change to this------------
    accentColor: Colors.blue,
  ),
  home: new HomeScreen(),
);

Nó có một số nhược điểm. Các đối tượng khác phụ thuộc vào màu canvas, như biểu tượng làm mới, cũng sẽ có nền trong suốt, thay vì màu trắng.
Jorge Menjivar

3
Tôi không khuyên bạn nên làm điều này. Rất nhiều tiện ích phụ thuộc vào màu canvas và tất cả những tiện ích đó sau đó sẽ cần được đặt riêng lẻ.
mauriii

câu trả lời tốt nhất, đây phải là câu trả lời hàng đầu.
Alvin Quezon

khi sử dụng này, tất cả canvasColorcác rung động widgets sẽ thay đổi để color.transparent, hãy cố gắng ngăn kéo mở, những gì u xem!
Nourein

Cuối cùng! Đã giải quyết vấn đề của tôi.
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

Sử dụng màu nền trong suốt cho modalbottomsheet và cung cấp màu riêng biệt cho trang trí hộp


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


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

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

     

 ),

)

Điều này sẽ làm cho màu vùng chứa của bạn giống với màu nền. Và sẽ có một container con có cùng chiều cao và chiều rộng với màu xanh lam. Điều này sẽ làm cho góc có cùng màu với màu nền.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.