我使用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();
}