在颤动的容器底部添加阴影?

yoo*_*hoo 19 containers shadow dart box-shadow flutter

我有一个简单的屏幕,里面有一个大约 100 高的蓝色容器。我想在容器底部添加阴影或高度。

这是我下面的代码

import 'package:flutter/material.dart';
import 'package:finsec/utils/strings.dart';
import 'package:finsec/utils/dimens.dart';
import 'package:finsec/utils/colors.dart';


void main() {
  runApp(new IncomeFragment());
}

class IncomeFragment extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Stack(
        children: <Widget>[
          new Container(
            height: margin_100dp,
            color: colorPrimary,

          ),
          new Container(    //container to  overlay on top of blue container
            alignment: Alignment.topCenter,


            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[

                Text(
                    zero_amount,
                    style: TextStyle(color: white, fontSize: 40.0, fontWeight: FontWeight.bold)
                ),
              ],
            ),
          )
        ],
    );
  }
}

Run Code Online (Sandbox Code Playgroud)

有人可以帮我在蓝色容器的底部添加阴影或高度吗?

见下图。shawdow 应该在红圈里 在此处输入图片说明

提前致谢

Lui*_*lla 27

您可以重用堆栈中的第一个容器,该容器有一个名为装饰的属性,它接受一个类型为 BoxDecoration 的小部件,如您在此链接中所见BoxDecoration 在此小部件中,您可以使用 boxShadow 属性给予您的容器自定义阴影,请尝试下一个代码:

new Container(
      height: margin_100dp,
      decoration: BoxDecoration(
          boxShadow: <BoxShadow>[
            BoxShadow(
                color: Colors.black54,
                blurRadius: 15.0,
                offset: Offset(0.0, 0.75)
            )
          ],
        color: colorPrimary
      ),
    ),
Run Code Online (Sandbox Code Playgroud)

  • 你也使用卡片小部件 (2认同)

小智 26

或者,您可以使用包含高程属性的 Material 小部件包裹您的 Container 小部件以提供阴影效果。

Container(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Material(
                elevation: 15.0,
                child: Container(
                  height: 100,
                  width: 100,
                  color: Colors.blue,
                  child: Center(child: Text("Material",style: TextStyle(color: Colors.white),)),
                ),
              ),
              SizedBox(width: 100,),
              Container(
                height: 100,
                width: 100,
                decoration: BoxDecoration(
                    boxShadow: <BoxShadow>[
                      BoxShadow(
                          color: Colors.black54,
                          blurRadius: 15.0,
                          offset: Offset(0.0, 0.75)
                      )
                    ],
                    color: Colors.blue
                ),
                child: Center(child: Text('Box Shadow',style: TextStyle(color: Colors.white))),
              ),
            ],
          ),
        ),
Run Code Online (Sandbox Code Playgroud)

图片:

在此处输入图片说明

上面显示了两个小部件之间的区别。希望这可以帮助!!!


小智 13

是的,BoxShadow 可以解决这个问题,但不是手动添加 BoxShadow 的列表,而是在 flutter call kElevationToShadow 中有一个方便的映射,它将高度键映射到 BoxShadow 的预定义列表。它也是根据材料设计标高定义的。

Container(
  height: 60.0,
  decoration: BoxDecoration(
    boxShadow: kElevationToShadow[4],
    color: Theme.of(context).bottomAppBarColor,
  ),
  child: ...
);
Run Code Online (Sandbox Code Playgroud)


Sum*_*mit 6

Container(
   margin: EdgeInsets.only(bottom: 7),
   decoration: BoxDecoration(
     color: Colors.white,
     borderRadius: BorderRadius.circular(10),
     boxShadow: kElevationToShadow[2], // Use This kElevationToShadow ***********
   ),
   child: Center(child: Text('With BoxShadow')),
),
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Material( // Using Material Widget ***********************
  elevation: 5,
  borderRadius: BorderRadius.circular(10),
  child: Container(
    margin: EdgeInsets.only(bottom: 7),
    decoration: BoxDecoration(
      color: Colors.white,
      borderRadius: BorderRadius.circular(10),
    ),
    child: Center(child: Text('With BoxShadow')),
 ),
),
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述