您可以为此使用任何状态管理!为了完成,我将使用Riverpod
第 1 步:创建一个graphql_config.dart文件并添加它
final StateProvider<String> authTokenProvider =
StateProvider<String>((_) => '', name: 'tokenP');
final gqlClientProvider = Provider<ValueNotifier<GraphQLClient>>(
(ref) {
final String token = ref.watch(authTokenProvider).state;
final Link _link = HttpLink('YOUR_GRAPHQL_LINK', defaultHeaders: {
if (token.isNotEmpty) 'Authorization': 'Bearer $token',
});
return ValueNotifier(
GraphQLClient(
link: _link,
cache: GraphQLCache(store: HiveStore()),
),
);
},
名称:'gql 提供者',);
第 2 步:使用GraphQLProvider包装您的MaterialApp(main.dart 文件)
class MyApp extends ConsumerWidget {
@override
Widget build(BuildContext context, ScopedReader watch) {
final client = watch(gqlClientProvider);
return GraphQLProvider(
client: client,
child: CacheProvider(
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'YOUR_APP_TITLE',
...
第三步:登录成功后更新token。只需调用 Provider 并更新令牌
context.read(authTokenProvider).state ='YOUR_TOKEN';
PS。我没有从文档中找到一个很好的例子,所以我想出了这个