Flutter 布局和逻辑能在颤振中分离吗?
我了解颤振中的存在集团和范围模型。Flutter 布局和逻辑能在颤振中分离吗?,flutter,dart,Flutter,Dart,我了解颤振中的存在集团和范围模型。 但这并不像java的SpringBoot中的布局文件那样是分开的。实际上,您可以在Flatter中分离布局和逻辑。我有一个例子 在我的LoginForm中,我有一个函数 _attemptLogin() { BlocProvider.of<LoginBloc>(context).add( LoginButtonPressed( context: context, email: _tecEmail.t
但这并不像java的SpringBoot中的布局文件那样是分开的。实际上,您可以在Flatter中分离布局和逻辑。我有一个例子 在我的
LoginForm
中,我有一个函数
_attemptLogin() {
BlocProvider.of<LoginBloc>(context).add(
LoginButtonPressed(
context: context,
email: _tecEmail.text,
password: _tecPassword.text,
),
);
}
在我的LoginBloc
中,我在mapEventToState中有ff代码
@override
Stream<LoginState> mapEventToState(LoginEvent event) async* {
if (event is LoginButtonPressed) {
yield LoginProcessing();
await Future.delayed(const Duration(milliseconds: 250));
try {
var loginResponse =
await _attemptLogin(userRepository, event.email, event.password);
/// Get Firebase Token
final firebaseToken =
await Provider.of<FirebaseMessagingProvider>(context).getToken();
if (loginResponse['data'] != null && firebaseToken != null) {
User user =
_setUserFromJsonMap(context, loginResponse['data']['user']);
IdentityToken identityToken = _setIdentityTokenFromJsonMap(
context, loginResponse['data']['token']);
/// Request Firebase Token Update
var jsonCreateUserFirebaseTokenResponse =
await _attemptFirebaseTokenUpdate(context, firebaseToken);
if (jsonCreateUserFirebaseTokenResponse != null) {
authBloc.add(LoggedIn(identityToken: identityToken));
yield LoginInitial();
}
} else {
yield LoginFailure(message: 'Login failed.');
}
} catch (error, stackTrace) {
print(error);
print(stackTrace);
await Future.delayed(const Duration(seconds: 1));
yield LoginFailure(
message: 'Login failed. Please check your internet connection.');
}
}
}
@覆盖
流mapEventToState(LoginEvent事件)异步*{
如果(事件为LoginButtonPressed){
收益登录处理();
等待未来。延迟(常量持续时间(毫秒:250));
试一试{
var loginResponse=
等待尝试登录(userRepository、event.email、event.password);
///获取Firebase令牌
最终firebaseToken=
等待提供程序.of(context.getToken();
if(loginResponse['data']!=null&&firebaseToken!=null){
用户用户=
_setUserFromJsonMap(上下文,loginResponse['data']['user']);
IdentityToken IdentityToken=\u setIdentityTokenFromJsonMap(
上下文,loginResponse['data']['token']);
///请求Firebase令牌更新
var jsonCreateUserFirebaseTokenResponse=
等待\u尝试firebaseToken更新(上下文,firebaseToken);
if(jsonCreateUserFirebaseTokenResponse!=null){
add(LoggedIn(identityToken:identityToken));
收益率LoginInitial();
}
}否则{
屈服登录失败(消息:“登录失败”);
}
}捕获(错误,堆栈跟踪){
打印(错误);
打印(stackTrace);
等待未来。延迟(持续时间(秒:1));
收益登录失败(
消息:“登录失败。请检查您的internet连接。”);
}
}
}
我没有包括所有其他函数/类,因为我已经删除了几行代码以使其看起来可读,因为它已经包含了大量代码;这是不必要的,因为只需要证明一点,即您实际上可以为您的视图和逻辑分离代码。您实际上可以在颤振中分离布局和逻辑。我有一个例子 在我的
LoginForm
中,我有一个函数
_attemptLogin() {
BlocProvider.of<LoginBloc>(context).add(
LoginButtonPressed(
context: context,
email: _tecEmail.text,
password: _tecPassword.text,
),
);
}
在我的LoginBloc
中,我在mapEventToState中有ff代码
@override
Stream<LoginState> mapEventToState(LoginEvent event) async* {
if (event is LoginButtonPressed) {
yield LoginProcessing();
await Future.delayed(const Duration(milliseconds: 250));
try {
var loginResponse =
await _attemptLogin(userRepository, event.email, event.password);
/// Get Firebase Token
final firebaseToken =
await Provider.of<FirebaseMessagingProvider>(context).getToken();
if (loginResponse['data'] != null && firebaseToken != null) {
User user =
_setUserFromJsonMap(context, loginResponse['data']['user']);
IdentityToken identityToken = _setIdentityTokenFromJsonMap(
context, loginResponse['data']['token']);
/// Request Firebase Token Update
var jsonCreateUserFirebaseTokenResponse =
await _attemptFirebaseTokenUpdate(context, firebaseToken);
if (jsonCreateUserFirebaseTokenResponse != null) {
authBloc.add(LoggedIn(identityToken: identityToken));
yield LoginInitial();
}
} else {
yield LoginFailure(message: 'Login failed.');
}
} catch (error, stackTrace) {
print(error);
print(stackTrace);
await Future.delayed(const Duration(seconds: 1));
yield LoginFailure(
message: 'Login failed. Please check your internet connection.');
}
}
}
@覆盖
流mapEventToState(LoginEvent事件)异步*{
如果(事件为LoginButtonPressed){
收益登录处理();
等待未来。延迟(常量持续时间(毫秒:250));
试一试{
var loginResponse=
等待尝试登录(userRepository、event.email、event.password);
///获取Firebase令牌
最终firebaseToken=
等待提供程序.of(context.getToken();
if(loginResponse['data']!=null&&firebaseToken!=null){
用户用户=
_setUserFromJsonMap(上下文,loginResponse['data']['user']);
IdentityToken IdentityToken=\u setIdentityTokenFromJsonMap(
上下文,loginResponse['data']['token']);
///请求Firebase令牌更新
var jsonCreateUserFirebaseTokenResponse=
等待\u尝试firebaseToken更新(上下文,firebaseToken);
if(jsonCreateUserFirebaseTokenResponse!=null){
add(LoggedIn(identityToken:identityToken));
收益率LoginInitial();
}
}否则{
屈服登录失败(消息:“登录失败”);
}
}捕获(错误,堆栈跟踪){
打印(错误);
打印(stackTrace);
等待未来。延迟(持续时间(秒:1));
收益登录失败(
消息:“登录失败。请检查您的internet连接。”);
}
}
}
我没有包括所有其他函数/类,因为我已经删除了几行代码以使其看起来可读,因为它已经包含了大量代码;这是不必要的,因为只需要证明一点,即您实际上可以为视图和逻辑分离代码。请注意,这不是最佳情况,因为我可以创建另一个类/控制器,并将bloc函数中的一些代码传输到其他控制器,以使bloc类看起来更干净。我在编写代码tho时很匆忙,所以看起来是这样的。请注意,这不是最好的情况,因为我可以创建另一个类/控制器,并将bloc函数中的一些代码传输到其他控制器,以使bloc类看起来更干净。我在做这个代码的时候很匆忙,所以看起来是这样的。