我有一个登录页面,其中包含两个TextFormField。 如何使用BLoC保留这两个TextFormField文本,当我按下登录按钮时,我可以同时获得这两个TextFormField
ps:我想将登录表单放在一个文件中。
我知道如何在BLoC中保持一个状态,例如计数状态,通过接收器进行添加,并通过流进行重新渲染。 BLoC中的两个状态怎么样
任何时候都可以给我一些提示,谢谢
答案 0 :(得分:0)
您可以遵循此https://bloclibrary.dev/#/flutterlogintutorial?id=setup
逐步创建包含软件包flutter_bloc
登录表单的代码段
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_login/login/login.dart';
class LoginForm extends StatefulWidget {
@override
State<LoginForm> createState() => _LoginFormState();
}
class _LoginFormState extends State<LoginForm> {
final _usernameController = TextEditingController();
final _passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
_onLoginButtonPressed() {
BlocProvider.of<LoginBloc>(context).add(
LoginButtonPressed(
username: _usernameController.text,
password: _passwordController.text,
),
);
}
return BlocListener<LoginBloc, LoginState>(
listener: (context, state) {
if (state is LoginFailure) {
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text('${state.error}'),
backgroundColor: Colors.red,
),
);
}
},
child: BlocBuilder<LoginBloc, LoginState>(
builder: (context, state) {
return Form(
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'username'),
controller: _usernameController,
),
TextFormField(
decoration: InputDecoration(labelText: 'password'),
controller: _passwordController,
obscureText: true,
),
RaisedButton(
onPressed:
state is! LoginLoading ? _onLoginButtonPressed : null,
child: Text('Login'),
),
Container(
child: state is LoginLoading
? CircularProgressIndicator()
: null,
),
],
),
);
},
),
);
}
}