我嘗試從 Firebase 實作電子郵件/密碼身份驗證,但 emailController 和 passwordController 在我的 SubmitButton (或我的 TestButton)中什么也沒發送
class LoginScreen extends StatefulWidget {
LoginScreen({super.key});
@override
State<LoginScreen> createState() => LoginScreenState();
}
class LoginScreenState extends State<LoginScreen> {
final TextEditingController emailController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
@override
void dispose() {
// Clean up the controller when the widget is disposed.
emailController.dispose();
passwordController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
padding: const EdgeInsets.all(30),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
LoginEmail(emailController: emailController),
const SizedBox(height: 30.0),
LoginPassword(passwordController: passwordController),
const SizedBox(height: 30.0),
SubmitButton(
email: emailController.text.trim(),
password: passwordController.text.trim(),
),
TestButton(
textTest: emailController.text.trim(),
),
Flexible(
child: LoginButton(
text: 'Se connecter avec Google',
icon: FontAwesomeIcons.google,
color: Colors.blue,
loginMethod: AuthService().googleLogin,
),
),
],
),
),
);
}
}
登錄郵箱
class LoginEmail extends StatelessWidget {
LoginEmail({
Key? key,
required this.emailController,
}) : super(key: key);
final TextEditingController emailController;
@override
Widget build(BuildContext context) {
return SizedBox(
width: MediaQuery.of(context).size.width / 2,
child: TextField(
controller: emailController,
decoration: const InputDecoration(hintText: 'Email'),
),
);
}
}
登錄密碼
class LoginPassword extends StatelessWidget {
LoginPassword({
Key? key,
required this.passwordController,
}) : super(key: key);
final TextEditingController passwordController;
@override
Widget build(BuildContext context) {
return SizedBox(
width: MediaQuery.of(context).size.width / 2,
child: TextField(
controller: passwordController,
obscureText: true,
decoration: const InputDecoration(
hintText: 'Password',
),
),
);
}
}
SubmitButton - $email 和 $password 什么都不列印
class SubmitButton extends StatelessWidget {
SubmitButton({
Key? key,
required this.email,
required this.password,
}) : super(key: key);
final email;
final password;
final AuthService authService = AuthService();
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
print('onPress email = $email et password = $password');
await authService.signInWithEmailAndPassword(
email: 'myEmail',
password: 'myPw',
);
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => HomeScreen()));
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(e.toString()),
),
);
}
},
child: const Text('Se connecter'),
);
}
}
TestButton - $textTest 不列印任何內容
class TestButton extends StatelessWidget {
TestButton({
Key? key,
required this.textTest,
}) : super(key: key);
final textTest;
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
print('onPress email = $textTest');
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(e.toString()),
),
);
}
},
child: const Text('Test'),
);
}
}
我期待將 emailController.text 和 passwordControlle.text 的值傳遞給 SubmitButton。
uj5u.com熱心網友回復:
當小部件構建時,它從控制器獲取字串。的初始文本是空的TextEditingController,并且在 上得到空文本TestButton。您可以傳遞控制器實體本身,它將通過參考傳遞。
它會像
class TestButton extends StatelessWidget {
const TestButton({
Key? key,
required this.textTest,
}) : super(key: key);
final TextEditingController textTest;
并通過 TextEditingController
TestButton( textTest: emailController,),
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527190.html
標籤:扑镖
上一篇:顫振-“來自sdk和syncfusion_flutter_datagrid^19.1.65-beta的顫振,版本求解失敗。”錯誤
