如何在 Flutter 中为容器添加底部高程?

Ben*_*min 33 shadow flutter

我已经看过这个这个这个,但他们没有回答我的问题。我需要在它Container 下方的海拔高度,而不是在它周围。

这是我目前所拥有的:

有阴影的容器

我最后的目标是消除一周中几天顶部的阴影。

我使用这个答案中的代码来实现我的阴影效果,Container但我不希望它一直存在,只是在带有圆角的底部而不是顶部。任何帮助,将不胜感激。

小智 93

在我的选择中,最好的方法是在您当前使用的小部件上添加 Material()。

return Material(
       elevation: 20,
       child Container(),
       );
Run Code Online (Sandbox Code Playgroud)

  • 您还可以将相同的自定义形状添加到材质中 (4认同)
  • 这很棒,但如果您还想更改容器形状,它将无法正常工作。如果是这样,请使用已接受答案中的解决方案。 (3认同)
  • 这实际上不是一个正确的解决方案,它不是像所质疑的那样仅向容器底部添加阴影,而是向所有侧面添加阴影。 (2认同)

Cra*_*Cat 53

使用ClipRRect去除阴影效果,并添加底margin,以Container克服ClipRRect在底部只显示阴影效果。

例子:

import "package:flutter/material.dart";

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(30.0),
          child: ClipRRect(
            borderRadius: BorderRadius.circular(5.0),
            child: Container(
              height: 100.0,
              margin: const EdgeInsets.only(bottom: 6.0), //Same as `blurRadius` i guess
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(5.0),
                color: Colors.white,
                boxShadow: [
                  BoxShadow(
                    color: Colors.grey,
                    offset: Offset(0.0, 1.0), //(x,y)
                    blurRadius: 6.0,
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明


Hia*_*ian 35

如果你只想添加一个阴影,那么BoxDecoration结合起来BoxShadow就可以了

...
...
body: Container(
    margin: EdgeInsets.all(8),
    decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(8.0),
        color: Colors.white,
        boxShadow: [
            BoxShadow(
                color: Colors.black,
                blurRadius: 2.0,
                spreadRadius: 0.0,
                offset: Offset(2.0, 2.0), // shadow direction: bottom right
            )
        ],
    ),
    child: Container(width: 100, height: 50) // child widget, replace with your own
),
...
...
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Abi*_*san 8

使用Material和必须使用borderRadius:相同的Container()Material()

Material(
                elevation: 5,
                borderRadius: BorderRadius.only(topLeft: Radius.circular(50)),
                child: Container(
                  height: 100,
                  width: _width / 1.1,
                  decoration: BoxDecoration(
                      color: Colors.amber,
                      borderRadius:
                          BorderRadius.only(topLeft: Radius.circular(50))),
                ),
              ),
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明


Ahm*_*han 6

return PhysicalModel(
         elevation: 20,
         child: Container(),
       );
Run Code Online (Sandbox Code Playgroud)

在 Flutter 文档中了解有关PhysicalModel的更多信息。


Jae*_*ung 6

如果你想继续使用Container. 您可以将与辅助全局变量boxShadow一起使用BoxDecoration kElevationToShadow

要仅在底部显示阴影,您可以使用该ClipRRect小部件。

import 'package:flutter/material.dart';

ClipRRect(
  borderRadius: const BorderRadius.vertical(top: Radius.circular(16)),
  child: Container(
    decoration: BoxDecoration(
      boxShadow: kElevationToShadow[4],
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)


Cop*_*oad 5

  • 使用 Card

    在此处输入图片说明

    Card(
      elevation: 8,
      shadowColor: Colors.blue,
      child: Container(width: 100, height: 100, color: Colors.white),
    )
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用 DecoratedBox

    在此处输入图片说明

    DecoratedBox(
      decoration: BoxDecoration(
        boxShadow: [
          BoxShadow(
            color: Colors.blue,
            blurRadius: 8,
            spreadRadius: 4,
            offset: Offset(0, 10),
          ),
        ],
      ),
      child: Container(width: 100, height: 100, color: Colors.white),
    )
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用 PhysicalModel

    在此处输入图片说明

    PhysicalModel(
      color: Colors.white,
      elevation: 8,
      shadowColor: Colors.blue,
      borderRadius: BorderRadius.circular(20),
      child: Container(width: 100, height: 100),
    )
    
    Run Code Online (Sandbox Code Playgroud)