dart 正在侦听RiverPod提供程序的Flutter小部件没有更新

lh80um4z  于 2023-10-13  发布在  Flutter
关注(0)|答案(1)|浏览(108)

下面是提供者:

final randomValueProivider =  StateNotifierProvider<RandomStateNotifier,
    double>(
        (ref) {return RandomStateNotifier(1);});

class RandomStateNotifier extends StateNotifier<double>{
  RandomStateNotifier(super. State);
}

我听供应商这样说:

double _currentServiceRequestProvider = ref.watch(randomValueProivider);

这里是下面的小部件

Row(
                                        children: [
                                          Text("Random "
                                              "$_currentServiceRequestProvider")
                                        ],
                                      ),

有一个滑块小部件,当用户滑动它时,它会改变数字

FlutterSlider(
                                        values: [10],
                                        max: 10,
                                        min: 0,
                                        onDragging: (handlerIndex, lowerValue, upperValue) {

                                          ref.watch
                                            (currentServiceRequestProvider
                                              .notifier).updateBedrooms(lowerValue);

                                          ref.watch
                                            (currentServiceRequestProvider
                                              .notifier).updateBedrooms(lowerValue);

                                          _currentServiceRequestProvider = lowerValue;

                                          logger.d(ref.watch
                                            (currentServiceRequestProvider
                                              .notifier).state.Randomnumber);

                                        },
                                      ),

上面的滑块确实起作用,它确实更新了随机数,然后我可以通过记录器看到更新的数字,但文本小部件没有更新
我已经声明了一个状态通知提供程序,它保存一个double值,有一个滑块小部件允许用户选择他们想要的数字,然后这个小部件更新提供程序,我希望Text小部件显示新数字,但它没有显示新数字

ee7vknir

ee7vknir1#

好吧..你没有向我们提供你如何实现这个“随机数”。这是一个属性而不是一个函数吗?它是如何工作的?另外,你不应该ref.watch在事件处理程序中使用www.example.com,而应该使用ref.read。阅读currentServiceRequestProvider的通知程序,然后调用randomNumber()函数。函数应该是这样的:

void randomNumber() {
    var random = new Random();
    state = random.nextInt(100);
}

相关问题