【问题标题】:E/MethodChannel#plugins.flutter.io/firebase_auth(16707): java.lang.IllegalArgumentException: Given String is empty or nullE/MethodChannel#plugins.flutter.io/firebase_auth(16707):java.lang.IllegalArgumentException:给定字符串为空或为空
【发布时间】:2020-12-07 08:21:13
【问题描述】:

我在使用 firebase 进行电子邮件身份验证时遇到问题。我不知道如何解决它,我尝试了很多在线建议,但似乎没有一个有效,所以我有点卡在这件事上

代码-

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_facebook_login/flutter_facebook_login.dart';
import 'package:flutter_auth/main.dart';





class Body extends StatefulWidget {


@override
_BodyState createState() => _BodyState();
} 

class _BodyState extends State<Body> {
final _formKey = GlobalKey<FormState>();


TextEditingController _emailController = TextEditingController();
TextEditingController _passwordController = TextEditingController();




@override

Widget build(BuildContext context) {
Size size = MediaQuery
    .of(context)
    .size;
return Background(
  child: SingleChildScrollView(
    child: Form(
      key: _formKey,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            "SIGNUP",
            style: TextStyle(fontWeight: FontWeight.bold),
          ),
          SizedBox(height: size.height * 0.03),
          SvgPicture.asset(
            "assets/icons/signup.svg",
            height: size.height * 0.35,
          ),

          RoundedInputField(
            hintText: "Your Email",
            onChanged: (val) {
            },
          ),
          RoundedPasswordField(
            onChanged: (val) {
            },
          ),
          RoundedButton(
              text: "SIGNUP",
              press: ()
              async {
                try {
                  FirebaseUser user = (await FirebaseAuth.instance
                      .createUserWithEmailAndPassword(
                    email: _emailController.text,
                    password: _passwordController.text,)).user;
                  if(user != null){
                    UserUpdateInfo updateUser = UserUpdateInfo();
                    user.updateProfile(updateUser);
                    Navigator.of(context).pushNamed(AppRoutes.menu);
                  }
                } catch (e) {
                  print(e);
                  _passwordController.text = "";
                  _emailController.text = "";
                  // TODO: alertdialog with error
                }
              },
          ),
          SizedBox(height: size.height * 0.03),
          AlreadyHaveAnAccountCheck(
            login: false,
            press: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) {
                    return LoginScreen();
                  },
                ),
              );
            },
          ),
          OrDivider(),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              SocalIcon(
                iconSrc: "assets/icons/fbb.svg",
                press: () => signUpWithFacebook(),
              ),
              SocalIcon(
                iconSrc: "assets/icons/twitterr.svg",
                press: () {},
              ),
              SocalIcon(
                iconSrc: "assets/icons/google.svg",
                press: () => _signIn(context),
                ),
                ],
                )
                ],
                ),
                ),
                ),
                );
                }

圆形输入字段--

import 'package:flutter/material.dart';
import 
'package:flutter_auth/login_Signup/components/text_field_container.dart';
 import 'package:flutter_auth/constants.dart';
Import 'package:firebase_auth/firebase_auth.dart';
import 
'package:flutter_auth/login_Signup/Screens/Signup/components/body.dart';

class RoundedInputField extends StatefulWidget {


final String hintText;
 final IconData icon;
final ValueChanged<String> onChanged;
const RoundedInputField({
Key key,
this.hintText,
this.icon = Icons.person,
this.onChanged,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return TextFieldContainer(
  child: TextFormField(
    controller: _emailController,
    onChanged: widget.onChanged,
    cursorColor: kPrimaryColor,
    decoration: InputDecoration(
      icon: Icon(
        widget.icon,
        color: kPrimaryColor,
      ),
      hintText: widget.hintText,
      border: InputBorder.none,
    ),
  ),
  );
  }
  }

我的调试控制台!!--

E/MethodChannel#plugins.flutter.io/firebase_auth(16707): Failed to handle 
method call
E/MethodChannel#plugins.flutter.io/firebase_auth(16707): 
java.lang.IllegalArgumentException: Given String is empty or null
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):                        
at 
com.google.android.gms.common.internal.Preconditions.checkNotEmpty(com.google.android.gms:play-services-basement@@17.1.1:5)
    E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at 
com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(com.google.firebase:firebase-auth@@19.3.2:288)
   E/MethodChannel#plugins.flutter.io/firebase_auth(16707):     at 
io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.handleCreateUserWithEmailAndPa 
   ssword(FirebaseAuthPlugin.java:361)
   E/MethodChannel#plugins.flutter.io/firebase_auth(16707):     at 
io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.onMethodCall(FirebaseAuthPlugin.java:143)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.os.MessageQueue.next(MessageQueue.java:335)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.os.Looper.loop(Looper.java:183)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.app.ActivityThread.main(ActivityThread.java:7656)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I/flutter (16707): PlatformException(error, Given String is empty or null, null)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707): Failed to handle method call
E/MethodChannel#plugins.flutter.io/firebase_auth(16707): java.lang.IllegalArgumentException: Given String is empty or null
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at com.google.android.gms.common.internal.Preconditions.checkNotEmpty(com.google.android.gms:play-services-basement@@17.1.1:5)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(com.google.firebase:firebase-auth@@19.3.2:288)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.handleCreateUserWithEmailAndPassword(FirebaseAuthPlugin.java:361)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.onMethodCall(FirebaseAuthPlugin.java:143)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.os.MessageQueue.next(MessageQueue.java:335)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.os.Looper.loop(Looper.java:183)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at android.app.ActivityThread.main(ActivityThread.java:7656)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/MethodChannel#plugins.flutter.io/firebase_auth(16707):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I/flutter (16707): PlatformException(error, Given String is empty or null, null)

似乎我在某处放置了一个空字符串,但由于我添加的自定义文本字段或类似的东西,我似乎无法弄清楚我的感觉在哪里。任何形式的帮助将不胜感激!

【问题讨论】:

  • 您需要将 TextEditingControllers 绑定到您的输入字段。您至少可以显示其中一个 RoundedInputField 小部件代码,以便您可以指出正确的方向。
  • 我已经添加了输入框
  • @HelpMeGetGood 你试过答案了吗?
  • 是的,这是它的更新版本仍然有错误
  • 我添加了文本表单字段。仍然收到错误。

标签: firebase flutter authentication dart


【解决方案1】:
.createUserWithEmailAndPassword(
                    email: _emailController.text,
                    password: _passwordController.text,)

此方法中的emailpassword 均为空。你必须使用TextFormField并将控制器绑定到它,然后你才能访问text,例如:

        body: Form(
            key: _formKey,
            child: SingleChildScrollView(
                child: Column(children: <Widget>[
              Padding(
                padding: EdgeInsets.all(20.0),
                child: TextFormField(
                  controller: emailController,
                  decoration: InputDecoration(
                    labelText: "Enter Email Address",
                    enabledBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(10.0),
                    ),
                  ),
                  // The validator receives the text that the user has entered.
                  validator: (value) {
                    if (value.isEmpty) {
                      return 'Enter Email Address';
                    }
                    else if(!value.contains('@')){
                      return 'Please enter a valid email address!';
                    }
                    return null;
                  },
                ),
              ),
              Padding(
                padding: EdgeInsets.all(20.0),
                child: TextFormField(
                  obscureText: true,
                  controller: passwordController,
                  decoration: InputDecoration(
                    labelText: "Enter Password",
                    enabledBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(10.0),
                    ),
                  ),
                  // The validator receives the text that the user has entered.
                  validator: (value) {
                    if (value.isEmpty) {
                      return 'Enter Password';
                    } else if (value.length < 6) {
                      return 'Password must be atleast 6 characters!';
                    }
                    return null;
                  },
                ),
              ),

查看文档:

https://flutter.dev/docs/cookbook/forms/text-field-changes#2-use-a-texteditingcontroller

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    相关资源
    最近更新 更多