将SnackBar与CupertinoPageScaffold一起使用

时间:2019-03-27 16:55:26

标签: dart flutter flutter-cupertino

是否可以将SnackBarCupertinoPageScaffold一起使用?

我遇到以下错误:

Scaffold.of() called with a context that does not contain a Scaffold.
No Scaffold ancestor could be found starting from the context that was passed to Scaffold.of().

使用以下方式在子窗口小部件中调用SnackBar

final snackBar = SnackBar(
      content: Text('Yay! A SnackBar!'),
      action: SnackBarAction(
      label: 'Undo',
      onPressed: () {
      // Some code to undo the change!
      },
      ),
      );

// Find the Scaffold in the Widget tree and use it to show a SnackBar!
Scaffold.of(context).showSnackBar(snackBar);

2 个答案:

答案 0 :(得分:2)

Cupertino 小部件应该是特定于 iOS 的,SnackBar 来取代 Android Toasts,但 iOS 中没有 Android Toast 等价物,因此您不能在本机添加 SnackBarCupertinoScaffold,因为它不遵循 iOS 准则。

一种解决方案是扩展 CupertinoScaffold 并将其添加到 SnackBar 代码中。

另一个位于 Mazin Ibrahim answer,注意不建议嵌套 Scaffolds。

答案 1 :(得分:1)

您需要包含一个Scaffold,因为CupertinoPageScaffold不是它的子级,那么您需要将调用showSnackBar函数的代码与{{1 }}归入Scaffold的单独类中,因为无法从同一SnackBarBody函数调用SnackBarScaffold。这是一个完整的工作示例:

Build