Flutter 防止 Snackbar 在滑动时被解雇

5 dart flutter

Snackbar当用户向下滑动它而不对Snackbar类的源代码进行任何修改时,有什么方法可以防止它消失。

小智 7

我们可以用 dismissDirection: DismissDirection.none

代码片段:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Builder(builder: (context) {
    return RaisedButton(
      onPressed: () => showSnackbar(context),
      child: Text("Show snackbar"),
    );
  }),
  );
}

void showSnackbar(context) {
  Scaffold.of(context)
      .showSnackBar(SnackBar(
        dismissDirection: DismissDirection.none,
        content: Text("I am here"),
        backgroundColor: Colors.blue,
      ))
  );
}
Run Code Online (Sandbox Code Playgroud)


Feu*_*Feu 5

GestureDetector在里面放置一个SnackBar content并聆听可以onVerticalDragStart让它不那么可被忽略,而使用额外的则\n\n\n使它真的很烦人 - 但仍然可以被忽略。:)

在此示例中,它确实防止从该content区域消除,但不能从 SnackBar 填充/边距区域消除。

  void _showSnackBar(BuildContext context) {
    final snackbar = SnackBar(
      duration: Duration(days: 1),
      content: GestureDetector(
        behavior: HitTestBehavior.opaque,
        onVerticalDragStart: (_) => debugPrint("no can do!"),
        child: Text("Hi! Don't try to dismiss me.\n\n\n"),
      )
    );

    Scaffold.of(context).showSnackBar(snackbar);
  }
Run Code Online (Sandbox Code Playgroud)

SnackBar 不太可忽略

我什至尝试简单地将小SnackBar部件直接放入 中- 但结果是相同的,甚至将.ScaffoldbottomsheetGestureDetectorSnackBar


Cop*_*oad 2

你可以试试这个。

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Builder(builder: (context) {
    return RaisedButton(
      onPressed: () => showSnackbar(context),
      child: Text("Show snackbar"),
    );
  }),
  );
}

void showSnackbar(context) {
  Scaffold.of(context)
      .showSnackBar(SnackBar(
        content: Text("I am here"),
        backgroundColor: Colors.blue,
      ))
      .closed
      .then((reason) {
       if (reason == SnackBarClosedReason.swipe)
         showSnackbar(context);
  });
}
Run Code Online (Sandbox Code Playgroud)