Flutter - 'showSnackBar' 已弃用 - 如何更新?

Posted

技术标签:

【中文标题】Flutter - \'showSnackBar\' 已弃用 - 如何更新?【英文标题】:Flutter - 'showSnackBar' is deprecated - how to update?Flutter - 'showSnackBar' 已弃用 - 如何更新? 【发布时间】:2021-06-17 08:46:54 【问题描述】:

我的 main.dart 中有一些过时的部分,我想更新它们,但需要一点帮助,因为我的知识显然不足,希望有人可以帮助我:-)

正如您在消息中看到的那样,这部分小吃店已过时。

'showSnackBar' 已弃用,不应使用。采用 ScaffoldMessenger.showSnackBar。此功能在之后被弃用 v1.23.0-14.0.pre..

这是我的 main.dart 的相关代码

  Navigator.of(context, rootNavigator: true).pop('dialog');
  Magazin.scaffoldKey.currentState!.showSnackBar(SnackBar(
    content: Text('BEIM LADEN DER POST-DATEN IST EIN FEHLER AUFGETRETEN!'),
    duration: Duration(seconds: 5),
  ));

我在论坛中找到了这个 therad,但它并没有真正帮助我...... 'showSnackBar' is deprecated and shouldn't be used

【问题讨论】:

【参考方案1】:

您可以使用此代码。如果您的其余代码目前可以正常工作,则此代码没有任何问题

Navigator.of(context, rootNavigator: true).pop('dialog');
ScaffoldMessenger.of(context).showSnackBar(
     SnackBar(
          content:Text('BEIM LADEN DER POST-DATEN IST EIN FEHLER AUFGETRETEN!'),
          duration: Duration(seconds: 2),
    ),
);

【讨论】:

【参考方案2】:

您可以在您的应用中使用 Flushbar 来实现此功能:flushbar

FlushbarHelper.createError(
       message: failure.map(
              cancelledByUser: (_) => 'Cancelled',
              serverError: (_) => 'Server error',
              emailAlreadyInUse: (_) => 'Email already in use',
              invalidEmailAndPasswordCombination: (_) =>
                  'Invalid email and password combination',
            ),
          ).show(context);

【讨论】:

【参考方案3】:

对我来说,你需要用 ScaffordMessager(...) 包裹旧的 Scaffold(...) 并不明显。一旦我这样做了,上面的迁移就很容易了。

新的覆盖构建:

@override
  Widget build(BuildContext context) 
    return ScaffoldMessenger(
      key: scaffoldMessengerKey,
      child: Scaffold(
      appBar: AppBar(

老sn-p:

@override
  Widget build(BuildContext context) 
    return Scaffold(
      key: scaffoldKey,
      appBar: AppBar(

希望这对下一个人有帮助!

【讨论】:

【参考方案4】:

如果您使用的是 Flutter 2 或更高版本,您可能会看到关于 hideCurrentSnackBar() 和 showSnackbar() 方法的弃用警告。

您可以使用以下方法摆脱它们:

ScaffoldMessenger.of(context).hideCurrentSnackBar() ScaffoldMessenger.of(context).showSnackbar(...) 而不是

Scaffold.of(context).hideCurrentSnackBar() Scaffold.of(context).showSnackbar(...)

【讨论】:

以上是关于Flutter - 'showSnackBar' 已弃用 - 如何更新?的主要内容,如果未能解决你的问题,请参考以下文章

将接口传递给`dispatch<ShowSnackbar>()` 时,Redux-thunk ThunkDispatch 类型失败

ScaffoldMessenger.of(context).showSnackBar() 在小部件构建函数中直接调用时不起作用

从 SnackBar 组件撤消操作

从 AlertDialog 中调用 SnackBar

如何在小吃店中使用全局变量?

小吃店不工作颤振NoSuchMethodError