颤动可防止Snackbar在滑动时被解雇

时间:2018-12-20 13:58:48

标签: dart flutter

有什么方法可以防止用户向下滑动Snackbar时将其撤消,而无需对Snackbar类的源代码进行任何修改。

2 个答案:

答案 0 :(得分:0)

您可以尝试一下。

@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);
  });
}

答案 1 :(得分:0)

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);
  }

SnackBar less dismissable

我什至试图将SnackBar小部件直接放入Scaffold的{​​{1}}中-但是结果是相同的,甚至将bottomsheet包裹在{ {1}}。