Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 布局和逻辑能在颤振中分离吗?_Flutter_Dart - Fatal编程技术网

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类看起来更干净。我在做这个代码的时候很匆忙,所以看起来是这样的。