我得到这个错误:未定义的名称"挂载"在未来的fetchoffers小工具。有人能帮助我解决这个问题吗?我想用这个在我的flutter应用中进行应用内购买。
import 'package:flutter/material.dart';
import 'package:AnyKnower/chatgpt.dart';
import 'package:AnyKnower/privacypolicy.dart';
import 'package:AnyKnower/purchase_api.dart';
import 'package:AnyKnower/utils.dart';
import 'package:glassfy_flutter/models.dart';
import 'package:provider/provider.dart';
import 'chat_screen.dart';
import 'package:page_transition/page_transition.dart';
import 'glassfy_provider.dart';
class NavBar extends StatelessWidget {
bool isSubscribed = false;
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
ClipRRect(
borderRadius: BorderRadius.only(
topRight: Radius.circular(15),
),
child: UserAccountsDrawerHeader(
accountName: Text('AnyKnower'),
accountEmail: Text(''),
currentAccountPicture: CircleAvatar(
child: ClipOval(
child: Image.asset('assets/logo4.jpg', width: 100, height: 100, fit: BoxFit.cover),
),
),
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/background1.jpg"),
fit: BoxFit.cover,
),
),
),
),
ListTile(
leading: Icon(Icons.chat_rounded,color: Colors.blueGrey,),
title: Text("AnyKnower Chat"),
onTap: () {
Navigator.of(context).push(PageTransition(child: ChatScreen(), type: PageTransitionType.fade));
}
),
ListTile(
leading: Icon(Icons.shopping_cart_outlined,color: Colors.blueGrey,),
title: Text("The AnyKnower Shop"),
onTap: () {
fetchOffers(context);
}
),
ListTile(
leading: Icon(Icons.chat_outlined,color: Colors.blueGrey,),
title: Text("Beta Premium chat"),
onTap: () {
Navigator.of(context).push(PageTransition(child: chatgpt(), type: PageTransitionType.fade));
}
),
ListTile(
leading: Icon(Icons.privacy_tip_outlined,color: Colors.blueGrey,),
title: Text("Privacy Policy"),
onTap: () {
Navigator.of(context).push(PageTransition(child: privacypolicy(), type: PageTransitionType.fade));
}
),
],
)
);
}
Future fetchOffers(BuildContext context) async {
final offerings = await PurchaseApi.fetchOffers();
final offer = offerings.singleWhere((offering) => offering.offeringId == '100AnyKnowerCredit');
if(!mounted) return;
Utils.showSheet(
context,
(context) => PayWallWidget(
title: 'Upgrade your plan',
description: 'kkdkdd',
offer: offer,
onClickedSku: (sku) async {
final transaction = await PurchaseApi.purchaseSku(sku);
if (mounted!) return;
if (transaction != null) {
final provider = context.read<GlassfyProvider>();
provider.add10Coins();
}
Navigator.pop(context);
},
)
);
}
}
我可能需要导入一些东西吗?我在另一个帖子中看到它需要是一个statefullwidget,但是我需要做什么改变才能实现呢?
1条答案
按热度按时间46scxncf1#
感谢Yeasin Sheikh提供了正确的解决方案。
我的解决方案是使用
if (!context.mounted) return;
而不是if(!mounted) return;