Flutter集成Google Cloud服务插件google_cloud的使用
Flutter集成Google Cloud服务插件google_cloud的使用
简介
google_cloud
是一个用于在 Google Cloud Platform (GCP) 上正确运行 Dart 代码的工具包。该项目由社区支持,没有官方的支持级别,代码不受任何 SLA 或弃用政策的保护。
功能包括:
未来可能会添加更多功能。
反馈和问题
如果您有任何想法或遇到问题,请在 GitHub 讨论区 开始讨论,或在 GitHub 问题跟踪器 中提交问题。
示例代码
以下是一个使用 google_cloud
插件访问 Google Cloud Firestore 的示例代码。该示例展示了如何创建一个简单的 HTTP 服务器,通过 Firestore 增加一个计数器。
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:convert';
import 'package:google_cloud/google_cloud.dart';
import 'package:googleapis/firestore/v1.dart';
import 'package:googleapis_auth/auth_io.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as shelf_io;
Future<void> main() async {
final server = await _Server.create();
try {
await serveHandler(server.handler);
} finally {
server.close();
}
}
class _Server {
_Server._({
required this.projectId,
required this.client,
required this.hosted,
});
static Future<_Server> create() async {
String? projectId;
bool hosted;
try {
projectId = await projectIdFromMetadataServer();
hosted = true;
} on BadConfigurationException {
projectId = projectIdFromEnvironment();
hosted = false;
}
if (projectId == null) {
throw BadConfigurationException(
'''
Could not contact GCP metadata server or find the project-id in one of these
environment variables:
${gcpProjectIdEnvironmentVariables.join('\n ')}''',
);
}
print('Current GCP project id: $projectId');
final authClient = await clientViaApplicationDefaultCredentials(
scopes: [FirestoreApi.datastoreScope],
);
return _Server._(projectId: projectId, client: authClient, hosted: hosted);
}
final String projectId;
final AutoRefreshingAuthClient client;
final bool hosted;
late final FirestoreApi api = FirestoreApi(client);
late final handler =
createLoggingMiddleware(projectId: hosted ? projectId : null)
.addMiddleware(_onlyGetRootMiddleware)
.addHandler(_incrementHandler);
Future<Response> _incrementHandler(Request request) async {
final result = await api.projects.databases.documents.commit(
_incrementRequest(projectId),
'projects/$projectId/databases/(default)',
);
return Response.ok(
JsonUtf8Encoder(' ').convert(result),
headers: {'content-type': 'application/json'},
);
}
void close() {
client.close();
}
}
/// 对于 `GET` 请求对象到 [handler],否则返回 404。
Handler _onlyGetRootMiddleware(Handler handler) => (Request request) async {
if (request.method == 'GET' && request.url.pathSegments.isEmpty) {
return await handler(request);
}
throw BadRequestException(404, 'Not found');
};
CommitRequest _incrementRequest(String projectId) => CommitRequest(
writes: [
Write(
transform: DocumentTransform(
document:
'projects/$projectId/databases/(default)/documents/settings/count',
fieldTransforms: [
FieldTransform(
fieldPath: 'count',
increment: Value(integerValue: '1'),
),
],
),
),
],
);
Future<void> serveHandler(Handler handler) async {
final server = await shelf_io.serve(handler, InternetAddress.anyIPv4, 8080);
print('Serving at http://${server.address.host}:${server.port}');
}
说明
- 项目 ID 获取:
_Server
类中的create
方法尝试从 GCP 元数据服务器获取项目 ID,如果失败则从环境变量中获取。 - 身份验证:使用
clientViaApplicationDefaultCredentials
获取自动刷新的身份验证客户端。 - HTTP 服务器:使用
shelf
和shelf_io
创建一个简单的 HTTP 服务器,处理GET
请求并增加 Firestore 中的计数器。 - 日志记录:使用
createLoggingMiddleware
添加结构化日志记录。
运行示例
-
确保你已经安装了 Dart 和 Flutter。
-
配置 GCP 项目并启用 Firestore API。
-
设置环境变量
GOOGLE_APPLICATION_CREDENTIALS
指向你的服务账户密钥文件。 -
运行示例代码:
dart run
-
访问
http://localhost:8080
查看结果。
希望这个示例能帮助你更好地理解和使用 google_cloud
插件。如果有任何问题或建议,请随时提出。
更多关于Flutter集成Google Cloud服务插件google_cloud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter集成Google Cloud服务插件google_cloud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成Google Cloud服务通常涉及使用Firebase或其他Google Cloud提供的API服务。google_cloud
这个包在Flutter的pub.dev上并不是一个官方的或者广泛认可的包名,可能是指广义上的与Google Cloud服务交互的插件集合。由于Google Cloud服务众多,这里我们以Firebase Authentication作为示例,展示如何在Flutter应用中集成并使用它。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加firebase_auth
依赖:
dependencies:
flutter:
sdk: flutter
firebase_auth: ^3.3.5 # 请检查pub.dev获取最新版本
然后运行flutter pub get
来安装依赖。
步骤 2: 配置Firebase项目
- 前往Firebase控制台,创建一个新的Firebase项目或者选择已有的项目。
- 在Firebase控制台中,为你的应用添加Flutter平台支持,按照指示下载
google-services.json
文件。 - 将
google-services.json
文件放置在android/app/
目录下。 - 对于iOS,你需要在Xcode中配置Firebase SDK。按照Firebase控制台的指示,下载并配置
GoogleService-Info.plist
文件。
步骤 3: 初始化Firebase Auth
在你的Flutter应用中,初始化Firebase Auth服务:
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Firebase Auth Example'),
),
body: FirebaseAuthExample(),
),
);
}
}
步骤 4: 实现登录功能
下面是一个简单的例子,展示如何使用Email和密码进行用户认证:
class FirebaseAuthExample extends StatefulWidget {
@override
_FirebaseAuthExampleState createState() => _FirebaseAuthExampleState();
}
class _FirebaseAuthExampleState extends State<FirebaseAuthExample> {
final FirebaseAuth _auth = FirebaseAuth.instance;
String _email = '';
String _password = '';
String _userStatus = '';
Future<void> _signIn() async {
try {
UserCredential result = await _auth.signInWithEmailAndPassword(
email: _email,
password: _password,
);
User? user = result.user;
if (user != null) {
setState(() {
_userStatus = 'Signed in as ${user.email}';
});
}
} catch (e) {
setState(() {
_userStatus = 'Failed to sign in: ${e.message}';
});
}
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextField(
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(labelText: 'Email'),
onChanged: (value) {
setState(() {
_email = value;
});
},
),
SizedBox(height: 16),
TextField(
obscureText: true,
decoration: InputDecoration(labelText: 'Password'),
onChanged: (value) {
setState(() {
_password = value;
});
},
),
SizedBox(height: 16),
ElevatedButton(
onPressed: _signIn,
child: Text('Sign In'),
),
SizedBox(height: 16),
Text(
_userStatus,
style: TextStyle(fontSize: 18),
),
],
),
);
}
}
结论
上述代码展示了如何在Flutter应用中集成并使用Firebase Authentication服务。虽然google_cloud
这个术语可能涵盖了更广泛的Google Cloud服务,但具体到Flutter开发,使用Firebase是最常见和直接的方式之一。对于其他Google Cloud服务,如Cloud Functions、Cloud Storage等,Flutter社区也提供了相应的插件,你可以按照类似的方式集成和使用它们。
请确保你遵循Google Cloud和Firebase的最新文档,因为API和服务可能会随时间更新。