Я использую 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();
}