【问题标题】:Flutter: How to make widget always above shadowFlutter:如何使小部件始终在阴影之上
【发布时间】:2021-06-07 18:21:46
【问题描述】:

我有一个应用程序,其中两个容器彼此相邻/彼此上方,相应地带有 Row()/Column() 小部件。两个容器在它们的盒子装饰参数中都有阴影。如果它们彼此靠近,则顶部/左侧的一个会在另一个上投下阴影。

有没有办法让小部件上不画阴影?

编辑:这是我的意思的一个例子。

我不希望第一个容器具有来自第二个容器的阴影,而是让两个容器都位于阴影之上。

这是此示例的代码:您可以将其复制粘贴到dartpad.dev 以进行快速测试。

import 'package:flutter/material.dart';

final Color darkBlue = Colors.grey[200]!;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.light().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Row(
            children: [
              SizedBox(width: 20),
              Container(
                height: 100,
                width: 300,
                decoration: BoxDecoration(
                  color: Colors.white,
                  boxShadow: [BoxShadow(
                    blurRadius: 20,
                    color: Colors.black.withOpacity(0.6)
                  )]
                ),
              ),
              Container(
                height: 100,
                width: 300,
                decoration: BoxDecoration(
                  color: Colors.white,
                  boxShadow: [BoxShadow(
                    blurRadius: 20,
                    color: Colors.black
                  )]
                ),
              ),
            ]
          ),
        ),
      ),
    );
  }
}

【问题讨论】:

  • 你试过从他们的盒子装饰参数中删除阴影吗?
  • @Adnan 但我希望他们有阴影。我希望盒子有阴影,我只是不希望阴影出现在其他容器上。有什么办法可以做到吗?
  • 请提供一些代码
  • @Adnan 连续只有 2 个容器,带有一个带有单个盒子阴影的盒子装饰。
  • @Adnan 我已经用一个包含问题代码和屏幕截图的示例更新了问题。

标签: flutter dart dropshadow


【解决方案1】:

如果他们都有自己的影子,我想没有办法完成你想要的。

另一种方法是,给父级提供阴影,这里是示例代码:

import 'package:flutter/material.dart';

final Color darkBlue = Colors.grey[200]!;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.light().copyWith(
        scaffoldBackgroundColor: darkBlue,
      ),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Container(
            decoration: BoxDecoration(
              color: Colors.white,
              boxShadow: [
                BoxShadow(blurRadius: 20, color: Colors.black),
              ],
            ),
            child: Row(
              children: [
                Expanded(
                  child: Container(
                    height: 100,
                    width: 300,
                    decoration: BoxDecoration(
                      color: Colors.white,
                      border: Border.all(width: .2),
                    ),
                  ),
                ),
                Expanded(
                  child: Container(
                    height: 100,
                    width: 300,
                    decoration: BoxDecoration(
                      color: Colors.white,
                      border: Border.all(width: .2),
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

我用Expanded 将它们都包裹起来,以确保填充父级。

【讨论】:

  • 非常感谢您的帮助!不幸的是,这行不通。我展示的代码只是一个示例,但在我的实际应用程序中,我有带有自己阴影的小部件,它们是有状态的小部件,所以它们会发生变化,所以我不能像你那样包装它们。有没有办法确保我拥有的容器总是在阴影之上?比如是否有一个属性或某种类型的小部件总是在阴影之上或不能在其上绘制阴影?
猜你喜欢
  • 2022-12-05
  • 2019-12-05
  • 2019-12-19
  • 2020-08-17
  • 2020-01-15
  • 2021-07-07
  • 2012-09-01
  • 2021-09-30
  • 1970-01-01
相关资源
最近更新 更多