【问题标题】:How do I change the state using mapEventToState?如何使用 mapEventToState 更改状态?
【发布时间】:2021-07-12 17:02:30
【问题描述】:

这是我第一次使用BLoC,但我不明白如何更改状态。我有一个TextFormField 和一个Button,我希望Buttoncontroller 保存到我需要的User 类属性中。我了解如何从按钮的一侧提供给流,但我不明白如何在 UserbloC 类中保存更改。

class User {
  String firstName, sName, phone, email;

  User(this.firstName, this.sName, this.phone, this.email);
}

enum EventType { firstName, sName, phone, email }

class UserEvent {
  late String value;
  late EventType eventType;

  UserEvent.firstName(String values) {
    this.eventType = EventType.firstName;
    this.value = values;
  }

  UserEvent.sName(String values) {
    this.eventType = EventType.sName;
    this.value = values;
  }

  UserEvent.phone(String values) {
    this.eventType = EventType.phone;
    this.value = values;
  }

  UserEvent.email(String values) {
    this.eventType = EventType.email;
    this.value = values;
  }
}

class UserBloc extends Bloc<UserEvent, User> {
  @override
  User get initialState =>
      User('Test', 'Test', '+1 999 888-77-66', 'test@gmail.com');

  @override
  Stream<User> mapEventToState(UserEvent event) async* {
    switch (event.eventType) {
      case EventType.firstName:
        yield null;
        break;
      case EventType.sName:
        yield null;
        break;
      case EventType.phone:
        yield null;
        break;
      case EventType.email:
        yield null;
        break;
    }
  }
}

【问题讨论】:

    标签: flutter flutter-bloc


    【解决方案1】:

    我通过重写代码解决了这个问题

    class User {
      String firstName, sName, phone, email;
    
      User(this.firstName, this.sName, this.phone, this.email);
    }
    
    abstract class UserEvent {
      const UserEvent();
    }
    
    class UpdateFirstName extends UserEvent {
      final String firstName;
    
      UpdateFirstName(this.firstName);
    }
    
    class UpdateSName extends UserEvent {
      final String sName;
    
      UpdateSName(this.sName);
    }
    
    class UpdatePhone extends UserEvent {
      final String phone;
    
      UpdatePhone(this.phone);
    }
    
    class UpdateEmail extends UserEvent {
      final String email;
    
      UpdateEmail(this.email);
    }
    
    class UserStates {
      final String? firstName, sName, phone, email;
    
      UserStates(
          {@required this.firstName,
          @required this.sName,
          @required this.phone,
          @required this.email});
    }
    
    class FirstNameAdded extends UserStates {
      final String? firstName;
    
      FirstNameAdded({required this.firstName}) : super(firstName: firstName);
    }
    
    class SNameAdded extends UserStates {
      final String? sName;
    
      SNameAdded({required this.sName}) : super(sName: sName);
    }
    
    class PhoneAdded extends UserStates {
      final String? phone;
    
      PhoneAdded({required this.phone}) : super(phone: phone);
    }
    
    class EmailAdded extends UserStates {
      final String? email;
    
      EmailAdded({required this.email}) : super(email: email);
    }
    
    class UserBloc extends Bloc<UserEvent, UserStates> {
      UserBloc()
          : super(UserStates(
                firstName: 'Владимир',
                sName: 'Путин',
                phone: '+7 999 888-77-66',
                email: 'test@gmailc.com'));
    
      late String _firstName, _sName, _phone, _email;
    
      //@override
      //UserStates get initialState = UserStates('Владимир', 'Путин', '+7 999 888-77-66', 'test@gmailc.com');
    
      @override
      Stream<UserStates> mapEventToState(UserEvent event) async* {
        if (event is UpdateFirstName) {
          _firstName = event.firstName;
          yield FirstNameAdded(firstName: _firstName);
        } else if (event is UpdateSName) {
          _sName = event.sName;
          yield SNameAdded(sName: _sName);
        } else if (event is UpdateEmail) {
          _email = event.email;
          yield EmailAdded(email: _email);
        } else if (event is UpdatePhone) {
          _phone = event.phone;
          yield PhoneAdded(phone: _phone);
        }
      }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2020-09-21
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      相关资源
      最近更新 更多