【问题标题】:Flutter Bloc access response message of an api call in the uiFlutter Bloc 访问 ui 中 api 调用的响应消息
【发布时间】:2021-07-14 01:38:21
【问题描述】:

我正在发出发布请求,然后返回成功/错误消息。我的状态设置是这样的:

import 'package:did_flutter_windows/blocs/createDid/formSubmissionStatus.dart';

class CreateDidState {
  final String firstName;
  final String lastName;
  final String email;
  final String phoneNumber;
  final DateTime? dateOfBirth;
  final String sex;
  final String address;
  final String city;
  final String state;
  final String postalCode;
  final String country;
  final FormSubmissionStatus formStatus;

  CreateDidState({
    this.firstName = "",
    this.lastName = "",
    this.email = "",
    this.phoneNumber = "",
    this.dateOfBirth,
    this.sex = "",
    this.address = "",
    this.city = "",
    this.state = "",
    this.postalCode = "",
    this.country = "",
    this.formStatus = const InitialFormStatus(),
  });

  CreateDidState copyWith({
    String? firstname,
    String? lastName,
    String? email,
    String? phoneNumber,
    DateTime? dateOfBirth,
    String? sex,
    String? address,
    String? city,
    String? state,
    String? postalCode,
    String? country,
    FormSubmissionStatus? formStatus,
  }) {
    return CreateDidState(
      firstName: firstname ?? this.firstName,
      lastName: lastName ?? this.lastName,
      email: email ?? this.email,
      phoneNumber: phoneNumber ?? this.phoneNumber,
      dateOfBirth: dateOfBirth ?? this.dateOfBirth,
      sex: sex ?? this.sex,
      address: address ?? this.address,
      city: city ?? this.city,
      state: state ?? this.state,
      postalCode: postalCode ?? this.postalCode,
      country: country ?? this.country,
      formStatus: formStatus ?? this.formStatus,
    );
  }
}

formstatus 代表提交可以处于的不同状态。所以初始/提交/成功/失败。

import 'package:did_flutter_windows/data/models/did.dart';

abstract class FormSubmissionStatus {
  const FormSubmissionStatus();
}

class InitialFormStatus extends FormSubmissionStatus {
  const InitialFormStatus();
}

class FormSubmitting extends FormSubmissionStatus {}

class SubmissionSuccess extends FormSubmissionStatus {
  final Did did;
  final String successMessage;

  SubmissionSuccess({required this.did, required this.successMessage});
}

class SubmissionFailed extends FormSubmissionStatus {
  final error;

  SubmissionFailed({required this.error});
}

如您所见,我将响应消息传递给表单的状态,但我不知道如何在 ui 中访问该消息。我现在有一个 BlocListener 监听 formstatus 并在提交成功或失败时返回静态通知。但是我想让消息动态并显示从后端返回的消息传递给formstatus。

BlocListener<CreateDidBloc, CreateDidState>(
  listener: (context, state) {
    if (state.formStatus is SubmissionSuccess) {
      showSuccessNoti(
          message: state.formStatus.succsessMessage,  //TODO: make mesasge dynamic and display message of formstatus
          context: context);
    } else if (state.formStatus is SubmissionFailed) {
      showErrorNoti(message: "error", context: context);
    }
  },
...

【问题讨论】:

    标签: flutter dart bloc flutter-bloc


    【解决方案1】:

    如果我没记错的话

    BlocListener<CreateDidBloc, CreateDidState>(
      listener: (context, state) {
        if (state is SubmissionSuccess) {
          showSuccessNoti(
              message: state.successMessage,  //TODO: make mesasge dynamic and display message of formstatus
              context: context);
        } else if (**state is SubmissionFailed**) {
          showErrorNoti(message: **state.error**, context: context);
        }
      },
    

    来自欧盟:

      final result = await apiCall() 
    
    yield SubmissionSuccess(state.successMessage: result.message);
    

    在这种情况下,您将从 Bloc 向 SubmissionFailed 传递您收到的错误,并将其从后端显示出来

    【讨论】:

    • 你的建议很相似,所以我目前的实现除了 state.successMessage 来访问消息。但是状态中没有定义successMessage。我想我必须从 formstatus 中获取消息,但我似乎无法弄清楚如何访问该变量,或者是否有可能。
    • 你可以有多种方法来做到这一点,例如:
    • 你可以有多种方法来做到这一点,例如:1)在状态的抽象类中定义字段(字符串消息....)然后你可以通过它从其他状态抛出 Super在那种情况下,您可以访问(消息),但我不明白为什么您不能访问变量 SubmissionSuccess
    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2021-10-26
    • 2019-06-21
    • 2019-08-17
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多