【问题标题】:flutter: Multiple widgets used the same GlobalKey error颤振:多个小部件使用相同的 GlobalKey 错误
【发布时间】:2020-10-21 20:36:45
【问题描述】:

我的类提供程序类中有一个 showSnackbar 方法,如下所示:

  GlobalKey<ScaffoldState> scaffoldKey =
      GlobalKey<ScaffoldState>(debugLabel: 'scaffoldKey');

  void showSnackBarE(String label) {
    if (purchasedItems[label] != 0) {
      final snackBar = SnackBar(
        content: Text("$label has already been added to cart!"),
        backgroundColor: Colors.black87,
        behavior: SnackBarBehavior.fixed,
        duration: Duration(seconds: 1),
      );
      scaffoldKey.currentState.removeCurrentSnackBar();
      scaffoldKey.currentState.showSnackBar(snackBar);
    } else {
      final snackBar = SnackBar(
        action: SnackBarAction(
            label: "Undo",
            onPressed: () {
              purchasedItems[label] = 0;
              getTotalSum();
            }),
        content: Text("$label has been added to cart!"),
        backgroundColor: Colors.black87,
        behavior: SnackBarBehavior.fixed,
        duration: Duration(seconds: 1),
      );
      scaffoldKey.currentState.removeCurrentSnackBar();
      scaffoldKey.currentState.showSnackBar(snackBar);
    }

    notifyListeners();
  }

在我的 TabsScreen 上,我给脚手架提供了我从提供者那里使用的相同密钥

scaffold(
key: mainProvider.scaffoldkey,
..
...

我拥有的每个选项卡都使用相同的小部件,当按下小部件时,将调用此小吃栏..

如果我尝试像这样导航回标签屏幕:

                    Navigator.of(context)
                        .pushReplacementNamed(TabsScreen.id);

从标签栏应用程序栏的屏幕内的屏幕显示此错误.. 我该怎么办?

【问题讨论】:

    标签: flutter dart tabs


    【解决方案1】:

    正如文档所说,要从内部屏幕返回,您应该使用 Navigator.pop(context);

    编辑: 好的,看来在这种情况下最好的解决方案是使用Navigator.popUntil(context, ModalRoute.withName('screen_route')); 函数。

    【讨论】:

    • 我正在从 tabb 屏幕的 appbar 导航到一个页面,然后从那里我转到我导航回 tab 屏幕的页面。所以 navigator.pop() 会让我回到我从应用栏打开的页面,而不是标签屏幕本身
    • 我明白了,你能从你打开应用栏的页面导航到 TabsScreen 吗?如果是,那么我能想到的解决方法是使用 Navigator.pop() 并在页面中您将在 initState() 中导航到您想要的位置。您可以设置一些布尔值来确定您是只想通过还是停留在此页面上。如果我解释得足够清楚,请告诉我...
    • 谢谢,如果我导航到在标签屏幕应用程序栏打开的页面中的标签屏幕,也会出现同样的错误
    • 然后请显示您的字符串 ID 在每个页面上的样子
    • 使用底部导航栏:static const String id = '/tabs screen';然后从 tabscreen appbar 我转到购物车屏幕: static const id = '/Cart Screen';然后从购物车屏幕我去提交订单屏幕,sumbit屏幕没有id因为我将东西传递给它所以在导航器中我不使用命名路由我使用navigator.push的正常路由(....跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2018-09-26
    • 2019-06-07
    • 2020-10-01
    • 1970-01-01
    • 2021-10-13
    • 2021-08-26
    相关资源
    最近更新 更多