我在使用订阅时遇到了颤振 + GraphQL 的问题。我正在使用 web 后端进行颤动,每当调整视图大小时,都会导致订阅被取消并重新制作,从而向我的后端发送请求。
这是有道理的,因为调整视图大小会使 Flutter 重新创建小部件,并且小部件包括 GraphQL 订阅。
所以我知道我的问题是代码架构问题,而不是颤振问题。然而,我在网上找到的所有使用 GraphQL 和 Flutter 的示例都遵循完全相同的模式。当要执行的订阅取决于显示的视图时,我不确定如何组织我的代码以使 GraphQL 订阅在视图“外部”。
关于我应该如何组织我的代码的任何想法?
谢谢您的帮助!
这是我目前用于展示我的数据并从 GraphQL 获取信息的结构。
class PersonWidget extends StatelessWidget {
PersonWidget({required this.personId});
Widget build(BuildContext context) {
return Subscription(
options: SubscriptionOptions(
document: gql(r'''
subscription ($personId: Int!){
person(where: {id: {_eq: $personId}}) {
id
first_name
last_name
email
}
}
}
'''),
variables: <String, String>{
'personId': personId.toString(),
},
),
builder: (result) {
if (result.isLoading && result.data == null) {
return const Center(
child: CircularProgressIndicator(),
);
}
var person = result.data!['person'][0];
return WidgetStructureGoesHere( ... );
},
);
}
}