0
  titleColor: Colors.black,
    resizeToAvoidBottomInset: false,
    backgroundColor: Colors.white,
    body: ProviderListener(
        provider: addressNotifierProvider.state,
        onChange: (context, state) {
          if (state is AddressInitial) {
            print("hello");
            context
                .read(addressNotifierProvider)
                .fetchUserAddress(widget.addressIds);
          }
        },
        child: Consumer(
          builder: (context, watch, child) {
            final state = watch(addressNotifierProvider.state);
            print(state);
            if(state is AddressInitial){
              context
                  .read(addressNotifierProvider)
                  .fetchUserAddress(widget.addressIds);
            }
            if (state is AddressFetchedDetails) {
              return SingleChildScrollView(
                  child: Container(
                      color: Colors.white,
                      padding: EdgeInsets.only(

一旦页面打开,这就会给我错误 Unhandled Exception: setState() or markNeedsBuild() 在构建期间调用。如何解决这个问题。

4

1 回答 1

0

fetchUserAddress操作改变了小部件的状态(我猜是因为手表)。状态更改会触发重建。但是正如错误所解释的那样,您不能在构建操作期间触发重建。

要解决这个问题,您应该重新考虑您的状态管理架构。

但是,作为一种解决方法,您可以将所有状态更改调用包装在渲染后帧回调中。

WidgetsBinding.instance
        .addPostFrameCallback((_) => context
                  .read(addressNotifierProvider)
                  .fetchUserAddress(widget.addressIds) );
于 2021-06-07T20:03:43.533 回答