Flutter Bloc 版本 8.0.0 的未定义名称 'state'
Undefined name 'state' for flutter bloc version 8.0.0
我正在尝试访问 bloc
(使用最新版本的 flutter_bloc: 8.0.0
)state
BlocBuilder
中的值,但我不断收到 state
的错误未定义。我发现 类似问题,但这不是问题所在。 SetInitialValuesEvent
在初始化 ConvertBloc
时添加 _onSetInitialValuesEventToState()
。
我唯一能想到的尝试是检查 state
是否在 BlocConsumer
侦听器中定义(可访问)(并且是):
Widget build(BuildContext context) {
return BlocConsumer<ConvertBloc, ConvertState>(
listener: (context, state) {
//defined / accessible
print("------- ${state.unitSystemFrom}");
},
builder: (context, sate) {
//undefined / not accessible
return Text(state.unitSystemFrom);
},
);
}
小部件构建方法:
Widget build(BuildContext context) {
return BlocBuilder<ConvertBloc, ConvertState>(
builder: (context, sate) {
return Text(state.unitSystemFrom);
},
);
}
设置来自 bloc 的初始值事件:
class SetInitialValuesEvent extends ConvertEvent {
final String unitSystemFrom;
final double unitValueFrom;
final String unitFrom;
final String unitSystemTo;
final double unitValueTo;
final String unitTo;
const SetInitialValuesEvent(
this.unitSystemFrom,
this.unitValueFrom,
this.unitFrom,
this.unitSystemTo,
this.unitValueTo,
this.unitTo,
);
@override
List<Object?> get props => [
unitSystemFrom,
unitValueFrom,
unitFrom,
unitSystemTo,
unitValueTo,
unitTo
];
}
集团:
class ConvertBloc extends Bloc<ConvertEvent, ConvertState> {
ConvertBloc()
: super(const ConvertState(
unitSystemFrom: '',
unitValueFrom: 0,
unitFrom: '',
unitSystemTo: '',
unitValueTo: 0,
unitTo: '')) {
on<SetInitialValuesEvent>(_onSetInitialValuesEventToState);
}
void _onSetInitialValuesEventToState(
SetInitialValuesEvent event, Emitter<ConvertState> emit) {
emit(ConvertState(unitSystemFrom: event.unitSystemFrom,
unitValueFrom: event.unitValueFrom,
unitFrom: event.unitFrom,
unitSystemTo: event.unitSystemTo,
unitValueTo: event.unitValueTo,
unitTo: event.unitTo))
}
}
你好像打错字了:
您在构建函数参数中使用了 sate
但尝试使用 state
访问它
像这样:
Widget build(BuildContext context) {
return BlocBuilder<ConvertBloc, ConvertState>(
builder: (context, sate) {
return Text(state.unitSystemFrom);
},
);
}
改用这个:
Widget build(BuildContext context) {
return BlocBuilder<ConvertBloc, ConvertState>(
builder: (context, state) {
return Text(state.unitSystemFrom);
},
);
}
我正在尝试访问 bloc
(使用最新版本的 flutter_bloc: 8.0.0
)state
BlocBuilder
中的值,但我不断收到 state
的错误未定义。我发现 SetInitialValuesEvent
在初始化 ConvertBloc
时添加 _onSetInitialValuesEventToState()
。
我唯一能想到的尝试是检查 state
是否在 BlocConsumer
侦听器中定义(可访问)(并且是):
Widget build(BuildContext context) {
return BlocConsumer<ConvertBloc, ConvertState>(
listener: (context, state) {
//defined / accessible
print("------- ${state.unitSystemFrom}");
},
builder: (context, sate) {
//undefined / not accessible
return Text(state.unitSystemFrom);
},
);
}
小部件构建方法:
Widget build(BuildContext context) {
return BlocBuilder<ConvertBloc, ConvertState>(
builder: (context, sate) {
return Text(state.unitSystemFrom);
},
);
}
设置来自 bloc 的初始值事件:
class SetInitialValuesEvent extends ConvertEvent {
final String unitSystemFrom;
final double unitValueFrom;
final String unitFrom;
final String unitSystemTo;
final double unitValueTo;
final String unitTo;
const SetInitialValuesEvent(
this.unitSystemFrom,
this.unitValueFrom,
this.unitFrom,
this.unitSystemTo,
this.unitValueTo,
this.unitTo,
);
@override
List<Object?> get props => [
unitSystemFrom,
unitValueFrom,
unitFrom,
unitSystemTo,
unitValueTo,
unitTo
];
}
集团:
class ConvertBloc extends Bloc<ConvertEvent, ConvertState> {
ConvertBloc()
: super(const ConvertState(
unitSystemFrom: '',
unitValueFrom: 0,
unitFrom: '',
unitSystemTo: '',
unitValueTo: 0,
unitTo: '')) {
on<SetInitialValuesEvent>(_onSetInitialValuesEventToState);
}
void _onSetInitialValuesEventToState(
SetInitialValuesEvent event, Emitter<ConvertState> emit) {
emit(ConvertState(unitSystemFrom: event.unitSystemFrom,
unitValueFrom: event.unitValueFrom,
unitFrom: event.unitFrom,
unitSystemTo: event.unitSystemTo,
unitValueTo: event.unitValueTo,
unitTo: event.unitTo))
}
}
你好像打错字了:
您在构建函数参数中使用了 sate
但尝试使用 state
像这样:
Widget build(BuildContext context) {
return BlocBuilder<ConvertBloc, ConvertState>(
builder: (context, sate) {
return Text(state.unitSystemFrom);
},
);
}
改用这个:
Widget build(BuildContext context) {
return BlocBuilder<ConvertBloc, ConvertState>(
builder: (context, state) {
return Text(state.unitSystemFrom);
},
);
}