Flutter GraphQL数据请求插件nhost_graphql_adapter的使用
Flutter GraphQL数据请求插件nhost_graphql_adapter的使用
Nhost GraphQL Adapter for Dart
Nhost 与 graphql 包集成,允许开发者在Flutter和Dart项目中轻松进行GraphQL数据请求。如果你正在为Flutter开发应用程序,可以考虑使用nhost_flutter_graphql,它提供了与graphql_flutter配合良好的小部件。
Getting Started
最新版本安装
在pubspec.yaml
文件中添加依赖:
dependencies:
nhost_graphql_adapter: ^3.0.0
然后执行flutter pub get
以安装最新版本。
示例代码
Todo 示例
下面是一个简单的Todo应用示例,它查询了Nhost Quick Start创建的todos
表。这个例子展示了如何使用nhost_graphql_adapter
来获取、创建、更新和删除Todo条目。
首先,确保你已经在Nhost控制台创建了一个todos
表,并且已经设置了正确的权限。
接下来,在你的Flutter项目中,你可以创建一个名为main.dart
的文件,内容如下:
import 'package:flutter/material.dart';
import 'package:nhost_graphql_adapter/nhost_graphql_adapter.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await initHiveForFlutter();
final HttpLink httpLink = HttpLink('https://your-subdomain.nhost.run/v1/graphql');
final NhostAuthLink authLink = NhostAuthLink(
subdomain: 'your-subdomain',
region: 'your-region',
);
final Link link = authLink.concat(httpLink);
ValueNotifier<GraphQLClient> client = ValueNotifier(
GraphQLClient(
link: link,
cache: GraphQLCache(store: HiveStore()),
),
);
runApp(MyApp(client: client));
}
class MyApp extends StatelessWidget {
final ValueNotifier<GraphQLClient> client;
MyApp({required this.client});
@override
Widget build(BuildContext context) {
return GraphQLProvider(
client: client,
child: MaterialApp(
title: 'Nhost GraphQL Adapter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TodosScreen(),
),
);
}
}
class TodosScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Todos'),
),
body: Query(
options: QueryOptions(
document: gql(r'''
query GetTodos {
todos {
id
text
completed
}
}
'''),
),
builder: (QueryResult result, {VoidCallback? refetch, FetchMore? fetchMore}) {
if (result.hasException) {
return Text(result.exception.toString());
}
if (result.isLoading) {
return Center(child: CircularProgressIndicator());
}
List todos = result.data?['todos'] ?? [];
return ListView.builder(
itemCount: todos.length,
itemBuilder: (context, index) {
final todo = todos[index];
return ListTile(
title: Text(todo['text']),
trailing: Checkbox(
value: todo['completed'],
onChanged: (bool? value) {
// Update the todo's completion status here
},
),
);
},
);
},
),
);
}
}
请记得替换your-subdomain
和your-region
为你自己的Nhost子域名和地区。
Links 示例
此外,还有另一个示例展示了如何通过组合自定义Link
与本包提供的Link
来创建一个GraphQLClient
。这通常用于需要自定义网络请求或添加额外逻辑(如重试机制)的情况。详情可以参考Nhost官方仓库中的Links example。
以上就是关于nhost_graphql_adapter
的基本介绍及使用方法。希望这些信息对你有所帮助!如果有任何问题或者需要进一步的帮助,请随时提问。
更多关于Flutter GraphQL数据请求插件nhost_graphql_adapter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GraphQL数据请求插件nhost_graphql_adapter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个使用 nhost_graphql_adapter
插件在 Flutter 中进行 GraphQL 数据请求的示例代码。这个插件通常用于与 NHost 后端服务进行集成。
首先,确保你已经在 pubspec.yaml
文件中添加了 nhost_graphql_adapter
依赖:
dependencies:
flutter:
sdk: flutter
nhost_graphql_adapter: ^最新版本号 # 请替换为实际最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,创建一个 Flutter 应用并配置 nhost_graphql_adapter
。以下是一个完整的示例,包括初始化客户端、执行查询和更新 UI:
import 'package:flutter/material.dart';
import 'package:nhost_graphql_adapter/nhost_graphql_adapter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter GraphQL Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
NHostGraphQLAdapter? client;
String? message;
@override
void initState() {
super.initState();
// 初始化 NHost GraphQL 客户端
client = NHostGraphQLAdapter(
endpoint: 'https://你的NHost后端URL/v1/graphql', // 替换为你的NHost GraphQL端点
headers: {
'Authorization': 'Bearer 你的JWT令牌', // 如果有JWT令牌,请添加
},
);
// 执行查询
fetchData();
}
void fetchData() async {
try {
final result = await client!.query(
query: '''
query {
getMessage {
id
content
}
}
''',
);
if (result.data != null) {
final messageData = result.data!['getMessage'];
if (messageData != null && messageData.length > 0) {
setState(() {
message = messageData[0]['content'] as String?;
});
}
}
} catch (error) {
print('Error fetching data: $error');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter GraphQL Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Message:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 10),
Text(
message ?? 'Loading...',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
],
),
),
);
}
}
代码说明:
- 依赖添加:在
pubspec.yaml
中添加nhost_graphql_adapter
依赖。 - 初始化客户端:在
initState
方法中初始化NHostGraphQLAdapter
客户端,并传入你的 NHost GraphQL 端点和可选的头部信息(如 JWT 令牌)。 - 执行查询:定义一个
fetchData
方法,使用client.query
方法执行 GraphQL 查询,并处理查询结果。 - 更新 UI:在查询结果返回后,使用
setState
方法更新 UI,以显示查询到的消息内容。
注意事项:
- 请确保你的 NHost 后端服务已正确配置,并且 GraphQL 端点可用。
- 如果有 JWT 令牌,请确保在请求头部中正确添加。
- 根据实际 GraphQL 查询结果的结构,调整数据解析逻辑。
这个示例展示了如何使用 nhost_graphql_adapter
插件在 Flutter 应用中进行 GraphQL 数据请求,并更新 UI 以显示查询结果。希望这对你有所帮助!