当我反应值时,Flutter getx 状态未正确匹配

Flutter getx state is not properly matched when I reactive value

我正在尝试通过 getX 将随机网络图像设置为 flutter 应用程序。 问题是当我激活 'nextPhoto' 时,它会在我的列表中打印下一个链接。 但是,图像小部件没有更改为下一张照片。

输出示例:第一张照片 = cat1.jpg,下一张照片 = cat1.jpg 预期示例:第一张照片 = cat1.jpg,下一张照片 = cat2.jpg

有人帮助我将不胜感激。

import ...

class ProfileController extends GetxController {
  List<String> imageList = [
    'https://1.jpg'
    'https://2.jpg',
    'https://3.jpg',
    'https://4.jpg',
    'https://5.jpg',
  ];

  late List<String> randomImage = imageList.toList()..shuffle();
  int imageNumber = 0;
  late RxString imagePath = randomImage[imageNumber].obs;
  RxBool isEditMyProfile = false.obs;

  @override
  void onInit() {...}
  void toggleEditProfile() {...}
  void savePhoto() async {...}

  void nextPhoto() {
    print('Next Photo');
    imageNumber != imageList.length ? imageNumber++ : imageNumber == 0;
    imagePath = randomImage[imageNumber].obs;
    imageCache.clear();    
    update();
  } 
}
Widget _profileImage() {
    return GestureDetector(
      onTap: () {
        controller.toggleEditProfile();
        print('change my Image!');
      },
      child: Container(
        padding: EdgeInsets.all(10),
        width: Get.mediaQuery.size.width,
        height: Get.mediaQuery.size.height,
        child: FittedBox(
          child: Obx(
            () => Image.network(
              controller.imagePath.value,
              fit: BoxFit.fill,
            ),
          ),
        ),
      ),
    );
  }

尝试

Widget _profileImage() {
        return GestureDetector(
          onTap: () {
            controller.nextPhoto();
            print('change my Image!');
          },
          child: Container(
            padding: EdgeInsets.all(10),
            width: Get.mediaQuery.size.width,
            height: Get.mediaQuery.size.height,
            child: FittedBox(
              child: Obx(
                () => Image.network(
                  controller.imagePath.value,
                  fit: BoxFit.fill,
                ),
              ),
            ),
          ),
        );
      }

或分享 toggleEditProfile 函数中的内容。

保存新值而不是创建新的 obs 实例。

ps:看起来你的 随机图像 Number 实际上不是随机的...... nvm

// late RxString imagePath = randomImage[imageNumber].obs;
=> late imagePath = Rx<String>(randomImage[imageNumber]);

// imagePath = randomImage[imageNumber].obs; 
=> imagePath.value = randomImage[imageNumber];