Flutter云函数调用插件cloud_functions的使用
Flutter云函数调用插件cloud_functions的使用
Firebase Cloud Functions for Flutter
这是一个用于在Flutter中使用Firebase Cloud Functions API的插件。要了解更多关于Cloud Functions的信息,请访问Firebase官网。
Getting Started
开始使用Firebase Cloud Functions,请参考官方文档。
Usage
要使用此插件,可以参考Functions Usage文档。
Issues and feedback
如果您遇到与FlutterFire相关的问题、错误或有功能需求,请在我们的问题跟踪器上提交。对于不是特定于FlutterFire的插件问题,可以在Flutter问题跟踪器上提交。若想为插件贡献代码,请先阅读我们的贡献指南,然后打开一个pull request。
示例代码
以下是一个完整的示例demo,展示了如何在Flutter应用中使用cloud_functions
插件来调用云端函数:
// Copyright 2019 The Chromium Authors. 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:core';
import 'dart:io';
import 'package:cloud_functions/cloud_functions.dart';
import 'package:cloud_functions_example/firebase_options.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// 如果您需要使用本地运行的Functions Emulator,请取消下面这行的注释
// https://firebase.google.com/docs/functions/local-emulator
// FirebaseFunctions.instance.useFunctionsEmulator('localhost', 5001);
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List fruit = [];
@override
Widget build(BuildContext context) {
final localhostMapped =
kIsWeb || !Platform.isAndroid ? 'localhost' : '10.0.2.2';
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Firebase Functions Example'),
),
body: Center(
child: ListView.builder(
itemCount: fruit.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${fruit[index]}'),
);
},
),
),
floatingActionButton: Builder(
builder: (context) {
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
FloatingActionButton.extended(
onPressed: () async {
HttpsCallable callable =
FirebaseFunctions.instance.httpsCallable(
'listFruit',
options: HttpsCallableOptions(
timeout: const Duration(seconds: 5),
),
);
await callingFunction(callable, context);
},
label: const Text('Call Function'),
icon: const Icon(Icons.cloud),
backgroundColor: Colors.deepOrange,
),
const SizedBox(height: 10),
FloatingActionButton.extended(
onPressed: () async {
HttpsCallable callable =
FirebaseFunctions.instance.httpsCallableFromUrl(
'http://$localhostMapped:5001/flutterfire-e2e-tests/us-central1/listfruits2ndgen',
options: HttpsCallableOptions(
timeout: const Duration(seconds: 5),
),
);
await callingFunction(callable, context);
},
label: const Text('Call 2nd Gen Function'),
icon: const Icon(Icons.cloud),
backgroundColor: Colors.deepOrange,
),
],
);
},
),
),
);
}
Future<void> callingFunction(
HttpsCallable callable,
BuildContext context,
) async {
try {
final result = await callable();
setState(() {
fruit.clear();
result.data.forEach((f) {
fruit.add(f);
});
});
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('ERROR: $e'),
),
);
}
}
}
关键点解释
- 初始化Firebase:在
main()
函数中使用await Firebase.initializeApp(...)
来初始化Firebase。 - 使用Functions Emulator(可选):如果需要使用本地运行的Firebase Functions模拟器,可以通过
FirebaseFunctions.instance.useFunctionsEmulator('localhost', 5001);
进行设置。 - 调用云端函数:通过
HttpsCallable
对象调用云端函数,并通过callingFunction
方法处理结果和异常。 - UI更新:根据云端函数返回的结果更新UI显示的内容。
以上就是关于Flutter云函数调用插件cloud_functions
的基本介绍和使用示例,希望对您有所帮助!
更多关于Flutter云函数调用插件cloud_functions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter云函数调用插件cloud_functions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用cloud_functions
插件来调用云函数的示例代码。这个示例假设你已经在Firebase中设置好了云函数,并且已经安装了cloud_functions
插件。
1. 安装依赖
首先,确保在你的pubspec.yaml
文件中添加了cloud_functions
依赖:
dependencies:
flutter:
sdk: flutter
cloud_functions: ^3.2.5 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Firebase
确保你的Flutter应用已经配置好了Firebase。你需要在Firebase控制台中为你的应用添加项目,并下载google-services.json
文件(对于Android)和GoogleService-Info.plist
文件(对于iOS),然后将它们放置在你的Flutter项目的android/app/
和ios/Runner/
目录下。
3. 初始化Cloud Functions
在你的Flutter应用中,你需要初始化Cloud Functions。这通常在应用启动时完成。
import 'package:flutter/material.dart';
import 'package:cloud_functions/cloud_functions.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Cloud Functions
CloudFunctions.instance.useFunctionsEmulator('http://localhost:5001'); // 如果你在使用本地模拟器
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Cloud Functions Example'),
),
body: Center(
child: CloudFunctionExample(),
),
),
);
}
}
4. 调用云函数
下面是一个调用云函数的示例。假设你有一个名为helloWorld
的云函数,它不接受任何参数并返回一个字符串。
import 'package:flutter/material.dart';
import 'package:cloud_functions/cloud_functions.dart';
class CloudFunctionExample extends StatefulWidget {
@override
_CloudFunctionExampleState createState() => _CloudFunctionExampleState();
}
class _CloudFunctionExampleState extends State<CloudFunctionExample> {
String? result;
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 调用名为 'helloWorld' 的云函数
HttpsCallable callable = CloudFunctions.instance.getHttpsCallable(functionName: 'helloWorld');
try {
final HttpsCallableResult result = await callable.call();
setState(() {
this.result = result.data['message']; // 假设云函数返回的数据中有一个 'message' 键
});
} catch (e) {
setState(() {
this.result = 'Error: ${e.message}';
});
}
},
child: Text('Call Cloud Function'),
),
if (result != null) Text('Result: $result'),
],
);
}
}
5. 云函数示例(Node.js)
为了完整性,这里提供一个简单的Node.js云函数示例,它符合上面的Flutter代码调用。
// index.js
const functions = require('firebase-functions');
exports.helloWorld = functions.https.onCall((data, context) => {
return { message: 'Hello, World!' };
});
确保你已经部署了这个云函数到你的Firebase项目。
总结
这个示例展示了如何在Flutter应用中配置和使用cloud_functions
插件来调用Firebase云函数。从安装依赖、初始化Cloud Functions,到调用云函数并处理结果,这些步骤应该能够帮助你在Flutter项目中成功集成云函数功能。