Mon application peut s'authentifier avec succès lors du débogage contre l'émulateur Android, mais si j'essaie de m'authentifier à l'aide du débogage contre le périphérique physique (avec la même version du système d'exploitation), un message d'erreur apparaît après plus d'une minute d'attente :
Une exception s'est produite.
_TypeError (le type 'String' n'est pas un sous-type de type 'int' de 'index')
Le message d'erreur pointe vers le code suivant:
if (responseJson[AuthUtils.authTokenKey] != null) {
AuthUtils.insertDetails(
userNameController.text, passwordController.text, responseJson);
...
} else {
...
};
Et dans la DEBUG CONSOLE, j'obtiens ce qui suit:
I/flutter (9531): Auth: SocketException: erreur du système d'exploitation: connexion expirée, errno = 110, adresse = example.com, port = 38975 V/InputMethodManager (9531): entrée de démarrage: tba = Android.view.inputmethod.EditorInfo @ 4aece4e nm: example.com.todoapp ic = null
Qu'est-ce que je fais mal ici?
Je crois que dans la ligne:
responseJson[AuthUtils.authTokenKey]
Vous faites référence à un élément de la liste responseJson par l'index AuthUtils.authTokenKey
Et puisque AuthUtils.authTokenKey est une chaîne, vous ne pouvez pas l'utiliser comme dans l'index d'un tableau.
Vous devez donc d'abord obtenir l'index de AuthUtils.authTokenKey puis l'utiliser pour référencer l'élément:
responseJson[responseJson.indexOf(AuthUtils.authTokenKey)]
'String' n'est pas un sous-type de type 'int' de 'index' signifie directement que vous utilisez String à la place de Int ici: responseJson [AuthUtils.authTokenKey] prend un int comme index où -> AuthUtils.authTokenKey est une chaîne. *
Imprimez votre response.body dans la console et vérifiez où est stocké votre authTokenKey.
* vous pouvez obtenir son index directement en utilisant indexOf dans votre réponse et l'utiliser en réponse comme index pour obtenir authTokenKey
Vous avez cette erreur lors du test d'une base de données dans Firebase Firestore.
L'affirmation suivante a été émise en construisant StreamBuilder (sale, état: _StreamBuilderBaseState> # 52d4b): le type 'String' n'est pas un sous-type de type 'int'
Le problème était que mon champ de document avait un type de chaîne, mais il attendait un nombre. Donc, changé de chaîne en nombre et cela a fonctionné.
J'ai eu un problème très similaire à celui-ci. Cela était dû à une affectation conditionnelle à un var qui entraînait la modification du type au moment de l'exécution. Jetez un œil à ce que NetworkUtil.authencateUser retourne. Je parie que c'est un avenir Essayez de le changer en futur>.
Avez-vous une clé SHA1 différente pour votre émulateur? Cela pourrait être la cause des différences entre les deux environnements.
Vérifiez si la réponse renvoie un Array de données.
{[{authTokenKey: 'asbc'}]}
Dans ce cas, vous devez prendre l'élément [0]. Ensuite, vous obtiendrez la carte dans laquelle vous pouvez accéder aux index avec des valeurs de chaîne.
var authTokenElm = responseJson[0];
var authToken = authTokenElm[AuthUtils.authTokenKey];