android 更改Flutter小吃条的位置

zzoitvuj  于 2022-12-02  发布在  Android
关注(0)|答案(6)|浏览(146)

我想在不满足某些条件时,在按钮上方显示一个简单的消失的错误消息。看起来Flutter的Snackbar非常适合这个目的。
但是,我很难将Snackbar的位置更改为屏幕最底部以外的任何位置。这可能吗?如果不可能,是否有更适合此目的的Widget?
我当前的snackbar代码:

class ContinueButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      margin: const EdgeInsets.only(
          bottom: 24.0, top: 24.0),
      child: Align(
        alignment: FractionalOffset.bottomCenter,
        child: MaterialButton(
          onPressed: () {
            final snackBar = SnackBar(
              content: Text('Yay! A SnackBar!'),
            );
            Scaffold.of(context).showSnackBar(snackBar);
          },

          child: Text('Continue'),
          height: 40.0,
          minWidth: 300.0,
          color: Colors.greenAccent,
        ),
      ),
    );
  }
}
ih99xse1

ih99xse11#

您可以尝试将行为设置为SnackBarBehavior.floating,并根据需要设置边距

SnackBar(
  behavior: SnackBarBehavior.floating,
  margin: EdgeInsets.only(bottom: 100.0),
  content: Text("Hello World!"),
);

此解决方案的唯一问题是下面的所有内容都无法单击
若要解决此可单击问题,请将dismissDirection属性设置为DismissDirection.none。这也意味着可以通过向下拖动取消snackbar的默认属性将丢失。(默认值为DismissDirection.down

SnackBar(
  behavior: SnackBarBehavior.floating,
  margin: EdgeInsets.only(bottom: 100.0),
  content: Text("Hello World!"),
  dismissDirection: DismissDirection.none
);
ssgvzors

ssgvzors2#

您可以在snackbar中放置一个容器来实现这一点。由于snackbar可以容纳任何小部件,并且您可以将其背景颜色更改为透明,因此您可以使用带有自定义填充和边框的容器来给予定位效果。

SnackBar(content: Container(
  //color: Colors.white,
  decoration: BoxDecoration(color: Colors.white, border: Border.all(width: 2.0, color: Colors.black), borderRadius: BorderRadius.circular(20)),
  margin: EdgeInsets.fromLTRB(0, 0, 0, 75),
  child: Padding(
    padding: const EdgeInsets.all(8.0),
    child: Text('Yay! A SnackBar!'),
  ),
), backgroundColor: Colors.transparent, elevation: 1000, behavior: SnackBarBehavior.floating,);
d5vmydt9

d5vmydt93#

很遗憾,不能。但是您可以使用https://api.flutter.dev/flutter/widgets/Overlay-class.html在另一个小部件上显示一个小部件(在您的情况下,就像在工具提示小部件上),并创建一个类似于Snackbar小部件的小部件

cvxl0en2

cvxl0en25#

您可以使用Flushbar代替SnackBar
请查看详细信息
flushbar

**注:**截至2022年已停产

ryevplcw

ryevplcw6#

适合我:
您可以使用“对齐” Package 容器。

SnackBar(
    content: GestureDetector(
      onTap: () {
        controller?.close();
      },
      child: Align(
        alignment: Alignment.topCenter,
        child: Container( ........

相关问题