Я создал облачные функции, чтобы они работали (я проверял их с почтальоном).Когда я пытаюсь вызвать их с помощью Flutter, у меня появляется ошибка:
I/flutter (14755): throwing firebase functions exception
I/flutter (14755): caught firebase functions exception
I/flutter (14755): INTERNAL
I/flutter (14755): Response is missing data field.
I/flutter (14755): null
I/flutter (14755): null
Я добавил
firebase_core: ^0.3.1+1
cloud_functions: ^0.1.2+1
в моем pubspec.yaml
В одном измои файлы дротиков:
import 'package:youpa/Services/users.services.dart';
[...]
TextField(
autofocus: true,
decoration: const InputDecoration(
hintText: 'Rechercher une personne',
border: InputBorder.none,
),
onChanged: (string) async {
UsersService().searchInAllUsers(string).then((user){
print(user);
});
},
),
Здесь мой users.services.dart:
import 'package:cloud_functions/cloud_functions.dart';
import 'package:youpa/Model/user.model.dart';
import 'dart:async';
class UsersService {
Future<User> searchInAllUsers(String search) async {
try {
final dynamic resp = await CloudFunctions.instance.call(
functionName: 'getUsersBase',
parameters: <String, dynamic>{
'txt': search,
'max': 20,
},
);
print("G : " + resp);
return resp;
} on CloudFunctionsException catch (e) {
print('caught firebase functions exception');
print(e.code);
print(e.message);
print(e.details);
} catch (e) {
print('caught generic exception');
print(e);
}
}
}
А вот, мое облакоФункция:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
let users = [];
let number = 1;
function compareStrings(comparing, compared) {
var points = 0;
var test = compared.toUpperCase().indexOf(comparing.toUpperCase());
// console.log("Compared : " + compared + " To Upper Case : " + compared.toUpperCase());
// console.log("Comparing : " + comparing + " To Upper Case : " + comparing.toUpperCase());
// console.log(test);
if (test >= 0) {
points += 1;
if (test === 0) {
points += 2;
}
var test2 = compared.indexOf(comparing);
if (test2 >= 0) {
points += 1;
if (test === 0) {
points += 1;
}
}
if (compared.toUpperCase() === comparing.toUpperCase()) {
points += 5;
}
if (compared === comparing) {
points += 10;
}
}
return points;
}
function compareUser(firstName, lastName, pseudo, comparing) {
var points = 0;
points += compareStrings(comparing, firstName);
points += compareStrings(comparing, lastName);
points += (compareStrings(comparing, pseudo) * 4);
points += (compareStrings(comparing, firstName + " " + lastName) * 2);
return points;
}
function searchInUsers(array, comparing, max) {
console.log(max);
let list = [];
let finalList = [];
array.forEach((user) => {
const points = compareUser(user[1], user[2], user[3], comparing);
const id = user[0];
// console.log(id + " - " + user[1] + " => " + points);
// console.log(list[points]);
if (list[points] === undefined) {
list[points] = [];
}
list[points].push(id);
});
list.forEach((item, index) => {
if (index !== 0) {
item.forEach((item) => {
finalList.push(item);
});
}
});
finalList = finalList.reverse();
if(max !== undefined){
console.log("Slicing");
finalList = finalList.slice(0, max);
}
return finalList;
}
exports.getUsersBase = functions.https.onRequest((request, response) => {
if (users.length === 0) {
console.log("user = null");
db.collection('users').get()
.then((snapshot) => {
snapshot.forEach((doc) => {
const data = [];
data.push(doc.id);
data.push(doc.data().firstName);
data.push(doc.data().lastName);
data.push(doc.data().pseudo);
console.log(doc.id, '=>', doc.data());
users.push(data);
});
response.send(searchInUsers(users, request.query.txt, request.query.max));
})
.catch((err) => {
console.error('Error getting documents', err);
response.send(err);
});
} else {
console.log("user != null");
response.send(searchInUsers(users, request.query.txt, request.query.max));
}
});
Когда я пишу или удаляю письмо в моем TextField, у меня в консоли есть это:
I/flutter (14755): throwing firebase functions exception
I/flutter (14755): caught firebase functions exception
I/flutter (14755): INTERNAL
I/flutter (14755): Response is missing data field.
I/flutter (14755): null
I/flutter (14755): null
Заранее благодарен.Жереми.