streamFirebaseFunction function
Future<void>
streamFirebaseFunction(
- String functionName,
- Map<String, dynamic> data,
- dynamic onStreamReceived(
- String
), {
- dynamic onStreamDone()?,
- Function? onStreamError,
})
Implementation
Future<void> streamFirebaseFunction(
String functionName,
Map<String, dynamic> data,
Function(String) onStreamReceived, {
Function()? onStreamDone,
Function? onStreamError,
}) async {
final Uri firebaseFunctionUrl = AppConfigBase.firebaseFunctionUri(functionName);
// Get the current user's ID token
String? token;
try {
token = await FirebaseAuth.instanceFor(app: AppConfigBase.firebaseApp)
.currentUser
?.getIdToken();
} catch (e) {
loge('Error getting ID token: $e');
onStreamError?.call(e);
return;
}
if (token == null) {
logd('User not authenticated.');
onStreamError?.call('User not authenticated.');
return;
}
final request = http.Request('POST', firebaseFunctionUrl)
..headers['Content-Type'] = 'application/json'
..headers['Authorization'] = 'Bearer $token' // Add the token to the header
..body = jsonEncode(data);
final streamedResponse = await http.Client().send(request);
streamedResponse.stream.transform(utf8.decoder).listen(
onStreamReceived,
onDone: onStreamDone,
onError: onStreamError,
);
}