class CreateApplyScreen extends StatefulWidget {
const CreateApplyScreen({super.key});
@override
State<CreateApplyScreen> createState() => _CreateApplyScreenState();
}
class _CreateApplyScreenState extends State<CreateApplyScreen> {
final bloc = CreateApplyBloc();
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocProvider<CreateApplyBloc>(
create: (context) => bloc,
child: CustomWillPopScope(
onWillPop: false,
action: () {},
child: ValueListenableBuilder<int>(
valueListenable: currentPage,
builder: (BuildContext context, int value, Widget? child) {
return Padding(
padding: const EdgeInsets.only(left: 16.0, right: 16),
child: PageView(
controller: _pageController,
physics: const NeverScrollableScrollPhysics(),
children: [
CreditInfo(
bloc: bloc,
onCountinue: () {
onNavigate();
},
),
],
),
);
}),
),
),
);
}
我的第二个屏幕
class CreditInfo extends StatelessWidget {
final CreateApplyBloc bloc;
final Function onCountinue;
const CreditInfo({super.key, required this.onCountinue, required this.bloc});
@override
Widget build(BuildContext context) {
return BlocConsumer<CreateApplyBloc, DataState>(
listener: (context, state) {},
builder: (context, state) {
if (state is CreateApplyState) {
return Column(
children: [
CustomTextField(
hintText: state.selectedMonth == 0
? AppStrings.select
: '${state.selectedMonth} ay',
onTap: () {
showSuggestedMonths(context, () {},state,bloc);
},
),
],
);
}
return Container();
});
}
}
和我的底部模态表:
showSuggestedMonths(BuildContext context, Function onTapYes,
CreateApplyState state, CreateApplyBloc bloc) {
showModalBottomSheet(
backgroundColor: Colors.white,
elevation: 0,
isScrollControlled: true,
context: context,
builder: (_) => SuggestedMonthsModal(
onTapYes: onTapYes, state: state, bloc: bloc, ctx: context));
}
class SuggestedMonthsModal extends StatelessWidget {
final Function onTapYes;
final BuildContext ctx;
final CreateApplyState state;
final CreateApplyBloc bloc;
const SuggestedMonthsModal(
{super.key,
required this.onTapYes,
required this.state,
required this.ctx,
required this.bloc});
@override
Widget build(BuildContext context) {
return BlocProvider<CreateApplyBloc>(
create: (context) => CreateApplyBloc(),
child: Column(
children: [
ModalViewWidget(
widget: ListView.builder(
shrinkWrap: true,
itemCount: state.suggestedMonths.length,
itemBuilder: (ctx, i) {
return Column(
children: [
InkWell(
onTap: () {
BlocProvider.of<CreateApplyBloc>(context).add(SelectMonthEvent(state.suggestedMonths[i]));
},
child: Row(
children: [
state.selectedMonth == state.suggestedMonths[i]
? SvgPicture.asset(AppImages.filledRadio)
: SvgPicture.asset(AppImages.emptyRadio),
],
),
),
],
);
}),
)
],
),
);
}
}
所以当我按下
onTap: () {
BlocProvider.of<CreateApplyBloc>(context).add(SelectMonthEvent(state.suggestedMonths[i]));
},
在这里更新我的代码,没有任何变化,状态没有更新。仅在热重载后更新。我认为问题出在传递上下文的地方。(不在我的块文件或状态中)我已经尝试了所有方法,但没有任何效果。
CreateApplyBloc
的方式。在您的
SuggestedMonthsModal
小部件中,您正在创建
CreateApplyBloc
的新实例,该实例与您从 CreateApplyScreen 传递下来的实例不同。这意味着这个新集团中所做的任何状态更改都不会反映在旧集团中。 要解决此问题,您应该将块的相同实例传递给您的 SuggestedMonthsModal 小部件。具体方法如下:
@override
Widget build(BuildContext context) {
return BlocProvider<CreateApplyBloc>.value(
value: bloc,
child: Column( // your code
还有
InkWell(onTap: () {
bloc.add(SelectMonthEvent(state.suggestedMonths[i]));
}