【发布时间】:2021-03-11 22:28:57
【问题描述】:
import 'package:flutter/material.dart';
import 'package:Trial/app/services/auth.dart';
class RegisterForm extends StatefulWidget {
RegisterForm({@required this.auth});
final AuthBase auth;
@override
_RegisterFormState createState() => _RegisterFormState();
}
class _RegisterFormState extends State<RegisterForm> {
// final TextEditingController _firstnameController = TextEditingController();
// final TextEditingController _lastnameController = TextEditingController();
final TextEditingController _emailController = TextEditingController();
final TextEditingController _passwordController = TextEditingController();
//String get _fname => _firstnameController.text;
//String get _lname => _lastnameController.text;
String get _email => _emailController.text;
String get _password => _passwordController.text;
void _register() async {
try {
print('$_email & $_password');
await widget.auth.createUserWithEmailAndPassword(_email, _password);
Navigator.of(context).pop();
} catch (e) {
print(e.toString());
}
}
List<Widget> _buildChildren() {
return [
TextField(
decoration: InputDecoration(labelText: 'First Name', hintText: 'John'),
),
TextField(
decoration: InputDecoration(labelText: 'Last Name', hintText: 'Doe'),
),
TextField(
controller: _emailController,
decoration:
InputDecoration(labelText: 'Email', hintText: 'yourmail@mail.com'),
onChanged: (_email) => _updateState(),
),
TextField(
controller: _passwordController,
decoration: InputDecoration(
labelText: 'Password',
),
obscureText: true,
onChanged: (_password) => _updateState(),
),
TextField(
decoration:
InputDecoration(labelText: 'Account No.', hintText: '123456789-0'),
),
SizedBox(
height: 5.0,
),
TextField(
decoration: InputDecoration(labelText: ' MAP LOCATION'),
), //LOCATION CAPTURE GOING HERE
RaisedButton(
child: Text('Register'),
onPressed: _register,
),
];
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: ListView(
children: _buildChildren(),
),
);
}
void _updateState() {
setState(() {});
}
}
我得到的错误是这样的
I/flutter (6751): NoSuchMethodError: 方法 'createUserWithEmailAndPassword' 在 null 上被调用。
I/flutter (6751):接收器:null ? I/flutter (6751):尝试调用:createUserWithEmailAndPassword("test@gmail.com", "password")
我在颤振和火力基地相当新。我正在尝试注册用户,但 auth 类中的方法传递为 null。
import 'package:Trial/app/services/auth.dart';
import 'package:Trial/app/signin/register_form.dart';
import 'package:flutter/material.dart';
class RegisterPage extends StatelessWidget {
RegisterPage({@required this.auth});
final AuthBase auth;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Register Account'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Card(child: RegisterForm(auth: auth)),
),
);
}
}
这将是我的身份验证文件
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/foundation.dart';
class User {
User({@required this.uid});
final String uid;
}
abstract class AuthBase {
Stream<User> get onAuthStateChanged;
Future<User> currentUser();
Future<User> signInAnonymously();
Future<User> signInWithEmailAndPassword(String email, String password);
Future<User> createUserWithEmailAndPassword(String email, String password);
Future<void> signOut();
}
class Auth implements AuthBase {
/*to check to see if anyone is signed in*/
final _firebaseAuth = FirebaseAuth.instance;
User _userFromFirebsae(FirebaseUser user) {
if (user == null) {
return null;
}
return User(uid: user.uid);
}
@override
Stream<User> get onAuthStateChanged {
return _firebaseAuth.onAuthStateChanged.map(_userFromFirebsae);
}
@override
Future<User> currentUser() async {
final user = await _firebaseAuth.currentUser();
return _userFromFirebsae(user);
}
/*to sign in without logining in*/
@override
Future<User> signInAnonymously() async {
final authResult = await _firebaseAuth.signInAnonymously();
return _userFromFirebsae(authResult.user);
}
@override
/*to sign in with email*/
Future<User> signInWithEmailAndPassword(String email, String password) async {
final authResult = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
return _userFromFirebsae(authResult.user);
}
//create email
@override
Future<User> createUserWithEmailAndPassword(
String email, String password) async {
final authResult = await _firebaseAuth.createUserWithEmailAndPassword(
email: email, password: password);
return _userFromFirebsae(authResult.user);
}
/*to sign out of app*/
@override
Future<void> signOut() async {
await _firebaseAuth.signOut();
}
}
【问题讨论】:
-
显示初始化RegisterForm并传递
auth的代码 -
@SwiftiSwift 我试图在这里添加它,但它的格式不正确,所以我将它添加到它自己的问题中
-
向我们展示你在哪里传递真正的
auth参数和内容。你在哪里初始化RegisterPage -
有点困惑的是它没有传入等待 widget.auth.createUserWithEmailAndPassword(_email, _password);
-
我们需要查看您第一次通过身份验证的位置。
标签: flutter firebase-authentication