Дублированный GlobalKey в дереве виджетов - PullRequest
0 голосов
/ 04 октября 2019

Я использую Square для платежей в приложении, и в моем примере я хочу перенаправить пользователя на панель управления после успешной покупки.

Так вот код, который я использую:

void _onCardEntryComplete() {
    var user = Provider.of<UserRepository>(context);
    if (_chargeServerHostReplaced) {
      showAlertDialog(
          context: BuySheet.scaffoldKey.currentContext,
          title: "Your order was successful")
    }
    user.updateDashboard(user.user.id);
    user.navigateToNewPage(Dashboard(), context);
  }

Я получаю перенаправление на Dashboard, но если я хочу снова получить доступ к Покупке:

childButtons.add(UnicornButton(
          hasLabel: true,
          labelText: "Buy stuff",
          currentButton: FloatingActionButton(
            heroTag: "buystuff",
            backgroundColor: Colors.yellow,
            mini: true,
            child: Icon(Icons.attach_money),
            onPressed: () {
              user.navigateToNewPage(Payment(), context);
            },
          )));

Я получаю сообщение об ошибке, что GlobalKey дублируется в дереве виджетов.

Если я комментирую user.navigateToNewPage(Dashboard(), context); тогда нормально работает. Но дело в том, что я хочу явно перенаправить пользователя на панель управления после успешной покупки.

У меня нет GlobalKey, определенного в Dashboard ... Это определено в Payment:

class Payment extends StatefulWidget {
  @override
  _PaymentState createState() => _PaymentState();
}

class _PaymentState extends State<Payment> {
  bool isLoading = true;
  bool applePayEnabled = false;
  bool googlePayEnabled = false;

  static final GlobalKey<ScaffoldState> scaffoldKey =
      GlobalKey<ScaffoldState>();

  @override
  void initState() {
    super.initState();
    _initSquarePayment();
  }
...