ОШИБКА_INVALID_EMAIL, адрес электронной почты неправильно отформатирован., null

#firebase #flutter #dart #firebase-authentication

#firebase #флаттер #dart #firebase-аутентификация

Вопрос:

Я новичок в flutter. Я попробовал учебник по flutter с использованием Android studio и получил эту ошибку.

[ОШИБКА: flutter/lib/ui/ui_dart_state.cc(166)] Необработанное исключение: исключение PlatformException(ОШИБКА_INVALID_EMAIL, адрес электронной почты плохо отформатирован., null)

Адрес электронной почты, который я ввел, был истинным. Нравится, erika@gmail.com

Почему возникла эта ошибка и как я могу ее исправить?

Я изменил некоторые пакеты до одного, возможно, это причина?

Это моя страница регистрации.dart

 import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:true_rider/brand_colors.dart';
import 'package:true_rider/screens/loginpage.dart';
import 'package:true_rider/widgets/TaxiButton.dart';

class RegistrationPage extends StatelessWidget {
  static const String id = 'register';

  final FirebaseAuth _auth = FirebaseAuth.instance;

  var fullNameController = TextEditingController();
  var phoneController = TextEditingController();
  var emailController = TextEditingController();
  var passwordController = TextEditingController();

  void registerUser() async {
    final FirebaseUser user = (await _auth.createUserWithEmailAndPassword(
      email: 'emailController.text',
      password: 'passwordController.text',
    )).user;

    if (user != null) {
      print('registration successful');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: SafeArea(
        child: SingleChildScrollView(
          child: Padding(
            padding: EdgeInsets.all(8.0),
            child: Column(
              children: <Widget>[
                SizedBox(height: 70,),
                Image(
                  alignment: Alignment.center,
                  height: 100.0,
                  width: 100.0,
                  image: AssetImage('images'
                      '/logo.png'),
                ),

                SizedBox(height: 40,),

                Text('Create a Rider's Account',
                  textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 25, fontFamily: 'Brand-Bold'),
                ),

                Padding(
                  padding: EdgeInsets.all(20.0),
                  child: Column(
                    children: <Widget>[

                      TextField(
                        controller: fullNameController,
                        keyboardType: TextInputType.text,
                        decoration: InputDecoration(
                          labelText: 'Full name',
                          labelStyle: TextStyle(
                            fontSize: 14.0,
                          ),
                          hintStyle: TextStyle(
                            color: Colors.grey,
                            fontSize: 10.0,
                          ),
                        ),
                        style: TextStyle(fontSize: 14),
                      ),

                      SizedBox(height: 10,),

                      TextField(
                        controller: emailController,
                        keyboardType: TextInputType.emailAddress,
                        decoration: InputDecoration(
                          labelText: 'Email address',
                          labelStyle: TextStyle(
                            fontSize: 14.0,
                          ),
                          hintStyle: TextStyle(
                            color: Colors.grey,
                            fontSize: 10.0,
                          ),
                        ),
                        style: TextStyle(fontSize: 14),
                      ),

                      SizedBox(height: 10,),

                      TextField(
                        controller: phoneController,
                        keyboardType: TextInputType.phone,
                        decoration: InputDecoration(
                          labelText: 'Phone number',
                          labelStyle: TextStyle(
                            fontSize: 14.0,
                          ),
                          hintStyle: TextStyle(
                            color: Colors.grey,
                            fontSize: 10.0,
                          ),
                        ),
                        style: TextStyle(fontSize: 14),
                      ),

                      SizedBox(height: 10,),


                      TextField(
                        controller: passwordController,
                        obscureText: true,
                        decoration: InputDecoration(
                          labelText: 'Password',
                          labelStyle: TextStyle(
                            fontSize: 14.0,
                          ),
                          hintStyle: TextStyle(
                            color: Colors.grey,
                            fontSize: 10.0,
                          ),
                        ),
                        style: TextStyle(fontSize: 14),
                      ),

                      SizedBox(height: 40,),

                      TaxiButton(
                        title: 'REGISTER',
                        color: BrandColors.colorGreen,
                        onPressed: () {
                          registerUser();
                        },
                      ),
                    ],
                  ),
                ),

                FlatButton(
                    onPressed: (){
                      Navigator.pushNamedAndRemoveUntil(context, LoginPage.id, (route) => false);
                    },
                      child: Text ('Already have a RIDER account? Log in')
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

  

И это мой longinpage.dart

 import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:true_rider/brand_colors.dart';
import 'package:true_rider/screens/registrationpage.dart';
import 'package:true_rider/widgets/TaxiButton.dart';

class LoginPage extends StatelessWidget {
  static const String id = 'login';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: SafeArea(
        child: SingleChildScrollView(
          child: Padding(
            padding: EdgeInsets.all(8.0),
            child: Column(
              children: <Widget>[
                SizedBox(height: 70,),
                Image(
                  alignment: Alignment.center,
                  height: 100.0,
                  width: 100.0,
                  image: AssetImage('images'
                      '/logo.png'),
                ),

                SizedBox(height: 40,),

                Text('Sign In as a Rider',
                textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 25, fontFamily: 'Brand-Bold'),
                ),

                Padding(
                  padding: EdgeInsets.all(8.0),
                  child: Column(
                    children: <Widget>[
                      TextField(
                        keyboardType: TextInputType.emailAddress,
                        decoration: InputDecoration(
                            labelText: 'Email address',
                            labelStyle: TextStyle(
                              fontSize: 14.0,
                            ),
                            hintStyle: TextStyle(
                                color: Colors.grey,
                             fontSize: 10.0,
                            ),
                        ),
                        style: TextStyle(fontSize: 14),
                      ),

                      SizedBox(height: 10,),

                      TextField(
                        obscureText: true,
                        decoration: InputDecoration(
                            labelText: 'Password',
                            labelStyle: TextStyle(
                            fontSize: 14.0,
                            ),
                            hintStyle: TextStyle(
                            color: Colors.grey,
                            fontSize: 10.0,
                            ),
                            ),
                            style: TextStyle(fontSize: 14),
                         ),

                      SizedBox(height: 40,),

                      TaxiButton(
                        title: 'LOGIN',
                        color: BrandColors.colorGreen,
                        onPressed: () {
                        },
                      ),
                    ],
                  ),
                ),

                FlatButton(
                  onPressed: (){
                    Navigator.pushNamedAndRemoveUntil(context, RegistrationPage.id, (route) => false);
                  },
                    child: Text ('Don't have an account, sign up here')
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
  

и это мой main.dart

 import 'package:firebase_core/firebase_core.dart';
import 'package:true_rider/screens/loginpage.dart';
import 'package:true_rider/screens/mainpage.dart';
import 'package:flutter/material.dart';
import 'dart:io';

import 'package:true_rider/screens/registrationpage.dart';

Future<void> main() async {
 WidgetsFlutterBinding.ensureInitialized();
 final FirebaseApp app = await FirebaseApp.configure(
   name: 'db2',
   options: Platform.isIOS || Platform.isMacOS
       ? const FirebaseOptions(
     googleAppID: '1:297855924061:ios:c6de2b69b03a5be8',
     gcmSenderID: '297855924061',
     databaseURL: 'https://flutterfire-cd2f7.firebaseio.com',
   )
       : const FirebaseOptions(
     googleAppID: '1:17165000282:android:c47ee5756c37488cda4263',
     apiKey: 'AIzaSyCTaNcAqsUkUBaqSCAqEMDH4ddweQxwHbc',
     databaseURL: 'https://noob-48298.firebaseio.com',
   ),
 );
   runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     theme: ThemeData(
       fontFamily: 'Brand-Regular',
       primarySwatch: Colors.blue,
     ),
     initialRoute: RegistrationPage.id,
     routes: {
       RegistrationPage.id: (context) => RegistrationPage(),
       LoginPage.id: (context) => LoginPage(),
       MainPage.id: (context) => MainPage(),
     },);
 }
}
  

This is my mainpage.dart

 import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';

class  MainPage extends StatefulWidget {
  static const String id = 'mainpage';

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

class _MainPageState extends State<MainPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MainPage'),
      ),
      body: Center(
        child: MaterialButton(
          onPressed: (){
            DatabaseReference dbref = FirebaseDatabase.instance.reference().child('Test');
            dbref.set('IsConnected');
          },
          height: 50,
          minWidth: 300,
          color: Colors.green,
          child: Text('Test Connection'),
        ),
      ),
    );
  }
}
  

Это мой TaxiButton.dart

 import 'package:flutter/material.dart';

class TaxiButton extends StatelessWidget {
  final String title;
  final Color color;
  final Function onPressed;

  TaxiButton({this.title, this.onPressed, this.color});

  @override
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: onPressed,
      shape: new RoundedRectangleBorder(
          borderRadius: new BorderRadius.circular(25)
      ),
      color: color,
      textColor: Colors.white,
      child: Container(
        height: 50,
        child: Center(
          child: Text(
            title,
            style: TextStyle(fontSize: 18, fontFamily: 'Brand-Bold'),
          ),
        ),
      ),
    );
  }
}
  

И это мой pubspec.yaml.

 name: true_rider
description: A new Flutter application.

version: 1.0.0 1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.3
  firebase_core: ^0.4.4
  firebase_auth: 0.16.1
  firebase_database: ^3.1.5

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true

  assets:
     - images/


  fonts:
     - family: Brand-Bold
       fonts:
         - asset: fonts/bolt-semibold.ttf

     - family: Brand-Regular
       fonts:
         - asset: fonts/bolt-regular.ttf
  

Комментарии:

1. 'emailController.text.trim()' недопустимый адрес электронной почты.

2. Спасибо. Я удаляю обрезку, но все равно получаю некоторую ошибку.

3. 'emailController.text' также недопустимый адрес электронной почты. Все, что заключено в кавычки, является строкой; вы передаете буквальный текст emailController.text . Если вы хотите установить email: параметр в значение текста контроллера электронной почты, он не должен быть в строке (например, удалите одинарные кавычки) или должен быть интерполированной строкой (например, в a ${} ). См. dart.dev/guides/language/language-tour#строки

4. Спасибо. Нужно ли мне использовать $ или r ??

5. Не могли бы вы написать мне пример правильного кода ’emailController.text’? Мне очень жаль.

Ответ №1:

Вы пытаетесь создать пользователя с:

 _auth.createUserWithEmailAndPassword(
  email: 'emailController.text',
  password: 'passwordController.text',
)
  

Поскольку 'emailController.text' и 'passwordController.text' заключены в кавычки, они являются буквальными строками. Таким образом, эти литеральные строки передаются для проверки подлинности Firebase, и эта первая строка не является действительным адресом электронной почты.

Вероятно, вы хотите, чтобы использовалось значение, введенное пользователем в этих элементах управления, и в этом случае вам следует удалить кавычки:

 _auth.createUserWithEmailAndPassword(
  email: emailController.text,
  password: passwordController.text,
)
  

Комментарии:

1. Моя ошибка была удалена!! Я действительно ценю вас. Большое вам спасибо!!!