参数类型'Object?'不能分配给参数类型"字符串"。带颤振


import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:ourchat/Screens/Login/components/background.dart';
import 'package:ourchat/components/have_an_acc.dart';
import 'package:ourchat/components/own_button.dart';
import 'package:ourchat/components/own_input_field.dart';
import 'package:ourchat/components/own_password_field.dart';
import 'package:flutter_svg/svg.dart';
import 'package:ourchat/screens/homepage/home_page.dart';
import 'package:ourchat/screens/signup/signup_screen.dart';
import 'package:ourchat/services/auth.dart';
import '../../../helper/helper_functions.dart';
import '../../../services/database.dart';
class Body extends StatefulWidget {
@override
State<Body> createState() => _BodyState();
}
class _BodyState extends State<Body> {
TextEditingController emailEditingController = new TextEditingController();
TextEditingController passwordEditingController = new TextEditingController();
AuthMethods authService = new AuthMethods();
bool isLoading = false;
final formKey = GlobalKey<FormState>();
signIn() async {
if (formKey.currentState!.validate()) {
setState(() {
isLoading = true;
});
await authService
.signInWithEmailandPassword(
emailEditingController.text, passwordEditingController.text)
.then((result) async {
if (result != null) {
QuerySnapshot userInfoSnapshot =
await DatabaseMethods().getUserInfo(emailEditingController.text);
HelperFunctions.saveUserLoggedInSharedPreference(true);
HelperFunctions.saveUserNameSharedPreference(
userInfoSnapshot.docs[0].data("userName")); //=> error
HelperFunctions.saveUserEmailSharedPreference(
userInfoSnapshot.docs[0].data["userEmail"]); //=> error
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
setState(() {
isLoading = false;
//show snackbar
});
}
});
}
}

参数类型为Object?'不能分配给参数类型'String'。操作符"[]"没有为类型"Object?"定义。()的函数。尝试定义操作符'[]'。太多的位置参数:0期望,但1发现。尝试删除额外的参数。

朋友,使用Firebase,我尝试用电子邮件和密码登录,但这种方法不起作用,我得到这样的错误。有人知道答案吗?

因为firebase提供商的info是一个Map<String,动态的>,值data[' userName '] &data[' userEmail ']不是" String " !要解决这个问题,可以写

HelperFunctions.saveUserNameSharedPreference(
userInfoSnapshot.docs[0].data("userName") as String); //=> error
HelperFunctions.saveUserEmailSharedPreference(
userInfoSnapshot.docs[0].data["userEmail"] as String); //=> error
但是,这可能会导致错误,如果userNameuserEmail

是空的,所以更好的解决方案是

final userName = userInfoSnapshot.docs[0].data("userName") as String?;
final userEmail = userInfoSnapshot.docs[0].data("userEmail") as String?;
if(userName?.isNotEmpty ?? false)
HelperFunctions.saveUserNameSharedPreference(userName); //=> error
if(userEmail?.isNotEmpty ?? false)
HelperFunctions.saveUserEmailSharedPreference(userEmail);

相关内容

最新更新