радиус флаттера с прозрачным фоном

Ниже мой код, который я ожидаю сделать контейнер с круглым углом с прозрачным фоном.

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

Ответы

Ответ 1

Если вы завернете 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"),
              )),
        ),

Ответ 2

Если вы хотите скруглить углы с прозрачным фоном, лучше всего использовать 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"),
    ),
  ),
);

Ответ 3

Это старый вопрос. Но для тех, кто сталкивался с этим вопросом...

Белый фон за закругленными углами на самом деле не контейнер. Это цвет холста приложения.

ИСПРАВИТЬ: Измените цвет холста вашего приложения на 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(),
);

Ответ 4

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

Ответ 5

Начиная с 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();},
  );

Использование темы позволяет повторно использовать нижние листы независимо от текущей темы приложения/приложения и не имеет никаких отрицательных побочных эффектов установки цвета холста, как уже упоминалось.