当前位置: 首页 > 知识库问答 >
问题:

flutter - Flutter中元素的shadow被另一个元素遮盖,如何解决?

尉迟子民
2024-01-31

Flutter中元素的shadow被另一个元素遮盖

我希望的是第一个元素的右侧能够显示一个阴影,但是在使用Expanded后,这部分阴影就被遮盖了

import 'package:flutter/material.dart';import 'package:fluent_ui/fluent_ui.dart' as fluent;void main() {  runApp(const App());}class App extends StatefulWidget {  const App({super.key});  @override  State<StatefulWidget> createState() {    return _App();  }// This widget is the root of your application.}class _App extends State<App> {  @override  Widget build(BuildContext context) {    return const fluent.FluentApp(      title: "test",      home: MainPage(title: "MainTitle"),      debugShowCheckedModeBanner: false,    );  }}class MainPage extends StatelessWidget {  const MainPage({super.key, required this.title});  // This widget is the home page of your application. It is stateful, meaning  // that it has a State object (defined below) that contains fields that affect  // how it looks.  // This class is the configuration for the state. It holds the values (in this  // case the title) provided by the parent (in this case the App widget) and  // used by the build method of the State. Fields in a Widget subclass are  // always marked "final".  final String title;  @override  Widget build(BuildContext context) {    return Scaffold(      body: Row(        children: [          Container(            width: 64,            decoration: const BoxDecoration(                color: Color.fromRGBO(244, 244, 244, 1),                boxShadow: [                  BoxShadow(                    color: Color.fromRGBO(0, 0, 0, 0.5),                    offset: Offset(1, 0),                    blurRadius: 4,                    spreadRadius: 0,                  )                ]),            child: const Menu(),          ),          Expanded(              child: Container(            height: double.infinity,            decoration:                const BoxDecoration(color: Color.fromRGBO(243, 243, 243, 1)),            child: Text("test"),          ))        ],      ),    );  }}class Menu extends StatefulWidget {  const Menu({super.key});  @override  State<StatefulWidget> createState() {    return _Menu();  }}class _Menu extends State<Menu> {  @override  Widget build(BuildContext context) {    return Container(      width: 64,      decoration: const BoxDecoration(          color: Color.fromRGBO(243, 243, 243, 1),          boxShadow: [            BoxShadow(              color: Color.fromRGBO(0, 0, 0, 0.5),              offset: Offset(1, 0),              blurRadius: 4,              spreadRadius: 0,            )          ]),      child: Column(        children: [          fluent.IconButton(              icon: const Icon(                Icons.home,                color: Color.fromRGBO(67, 67, 67, 1),                size: 42,              ),              onPressed: () {                print("object");              })        ],      ),    );  }}

试过用stack的方式,但是我需要第二个元素填满整个窗口,stack里面似乎没有办法用Expanded。

共有2个答案

巫马修为
2024-01-31

row的children中添加一个 sizedBox 然后再设置width

应嘉容
2024-01-31

在 Flutter 中,如果一个元素的阴影被另一个元素遮盖,通常是因为阴影被包含在另一个元素的范围内。在你的代码中,Expanded 元素占据了整个 Row,因此它包含在其范围内的任何元素的阴影都被它自身遮挡。

要解决这个问题,你可以使用 Positioned 元素在 Stack 中创建浮动层,这样即使 Expanded 元素占据整个空间,阴影也能显示在它上面。下面是一个修改后的示例代码:

import 'package:flutter/material.dart';import 'package:fluent_ui/fluent_ui.dart' as fluent;void main() {  runApp(const App());}class App extends StatefulWidget {  const App({super.key});  @override  State<StatefulWidget> createState() {    return _App();  }}class _App extends State<App> {  @override  Widget build(BuildContext context) {    return const fluent.FluentApp(      title: "test",      home: MainPage(title: "MainTitle"),      debugShowCheckedModeBanner: false,    );  }}class MainPage extends StatelessWidget {  const MainPage({super.key, required this.title});  final String title;  @override  Widget build(BuildContext context) {    return Scaffold(      body: Stack(        children: [          Container(            width: 64,            decoration: const BoxDecoration(                color: Color.fromRGBO(244, 244, 244, 1),                boxShadow: [                  BoxShadow(                    color: Color.fromRGBO(0, 0, 0, 0.5),                    offset: Offset(1, 0),                    blurRadius: 4,                    spreadRadius: 0,                  )                ]),            child: const Menu(),          ),          Positioned( // 使用 Positioned 元素来放置阴影层,使其浮在 Expanded 元素之上。            top: 0, // 根据需要调整位置。            left: 0, // 根据需要调整位置。            child: Container( // 这里放置你的阴影层。你可以根据需要调整它的样式和内容。              height: double.infinity,              decoration: BoxDecoration(color: Colors.transparent), // 设置透明背景以使阴影可见。              child: Text("test"), // 你的内容。            ),          ),          Expanded( // 你的主要内容区域。它将在整个 Row 中展开。            child: Container( // 这只是一个示例,你可以根据需要调整样式和内容。              height: double.infinity,              decoration: BoxDecoration(color: Color.fromRGBO(243, 243, 243, 1)), // 这只是一个示例,你可以根据需要调整样式和内容。              child: Text("test"), // 这只是一个示例,你可以根据需要调整样式和内容。            ),          )        ],      ),    );  }}
 类似资料:
  • 问题内容: 我想将一个DIV元素移到另一个元素中。例如,我要移动此对象(包括所有子对象): 到这个: 这样我有: 问题答案: 曾经尝试过普通的JavaScript … 吗?

  • 问题内容: 我已经看过其他几个问题,但似乎无法弄清楚它们中的任何一个,所以这是我的问题,我想要一个div或span,当您将鼠标悬停在它上面时,就会出现一个区域,就像是一滴水下。 例如我有一个div,我想将鼠标悬停在上面,并让它显示有关我悬停的项目的一些信息 但这似乎不起作用,我不知道为什么…,如果有办法在CSS中做到这一点,我想知道,但是我想要任何和所有建议。 问题答案: 仅当隐藏的div是用于悬

  • 问题内容: 我想将一个DIV元素移到另一个元素中。例如,我要移动此对象(包括所有子对象): 到这个: 这样我有: 问题答案: 曾经尝试过普通的JavaScript … 吗?

  • 我正在尝试自动化访问点web配置。在此期间,我会弹出一个我想要点击的窗口(类似于“是”和“否”的叠加 我试图单击的覆盖层的HTML代码: 我试过了 但我得到以下错误: 引发exception_class(message,screen,stacktrace)selenium.common.exceptions.ElementClickInterceptedException:message:元素在点

  • 问题内容: 我对CSS选择器有疑问。仅当在具有类名的a中时,如何选择具有特定类名的a ?这个CSS类在其他地方使用,我不想在任何地方更改样式。 问题答案: 只需在父元素和后代元素之间使用CSS后代选择器(空格)即可: 在这种情况下,仅适用于Class的规则,前提是其祖先是该Class的规则。相反,您可以使用直接子组合器,但是您必须指定与每个父/祖先的关系,直到需要其类的父子/祖先,这可能很难维护C

  • 问题内容: 是否可以在CSS中选择多个具有某个特定类,id等父的元素?例如: 如果不是,是否有办法选择该元素的所有子元素? 问题答案: 是否可以在CSS中选择多个具有某个特定类,id等父的元素? 当前,不幸的是,并非没有复制整个父选择器并指定所有后代,而是1: 直到选择器3最终确定后,他们才提出了伪类表示法来进行此操作,直到最近,基本实现才开始出现。 简而言之,现在已成为标准的伪类称为。在遥远的将