Как сохранить состояние var с помощью getX во флаттере?

Снимок экрана:страница распознавания текста

Текст, обнаруженный на изображении, сохраняется в «var resultTxt», как я могу сохранить состояние всех строк, обнаруженных моделью ML, и использовать его на другой странице?

Код распознавания текста:

       doTextRecog() async {
    resultTxt = '';
    final FirebaseVisionImage visionImage =
        FirebaseVisionImage.fromFile(_selectedFile);
    final VisionText visionText =
        await textRecognizer.processImage(visionImage);

    for (TextBlock block in visionText.blocks) {
      for (TextLine line in block.lines) {
        resultTxt += line.text + '\n';
      }
    }

    setState(() {
      resultTxt;
      print(resultTxt);
    });
    // textRecognizer.close();
  }

Я уже использую контроллер getX для пути к изображению, но не знаю, как сохранить переменную с несколькими строками текста и использовать ее на другой странице. Код контроллера:

      class PollImageController extends GetxController {
  RxString imageDisplay = ''.obs;

  @override
  void onInit() {
    super.onInit();
  }

  void setImage(String image) {
    imageDisplay.value = image;
  }

  @override
  void onClose() {
    super.onClose();
  }
}

2 ответа

Вы можете использовать GetxService для обмена данными в вашем приложении.

      class SharedData extends GetxService {
  static SharedData get to => Get.find();
  final sharedText = ''.obs;

  @override
  void onInit() {
    super.onInit();
  }

  @override
  void onClose() {
    super.onClose();
  }
}
       doTextRecog() async {
    resultTxt = '';
    final FirebaseVisionImage visionImage =
        FirebaseVisionImage.fromFile(_selectedFile);
    final VisionText visionText =
        await textRecognizer.processImage(visionImage);

    for (TextBlock block in visionText.blocks) {
      for (TextLine line in block.lines) {
        resultTxt += line.text + '\n';
      }
    }

   // assign value
   SharedData.to.sharedText.value = resultTxt;
  }

Вы также можете просто обрабатывать все свои функции распознавания текста в специальном GetxController учебный класс.

Тогда вы могли бы позвонить doTextRecog() и получить доступ к обновленным RxString resultTxt ценность из любого места.

      class TextRecognitionController extends GetxController {
  RxString resultTxt = ''.obs; 

  doTextRecog() async {
    final FirebaseVisionImage visionImage =
        FirebaseVisionImage.fromFile(_selectedFile);
    final VisionText visionText =
        await textRecognizer.processImage(visionImage);

    for (TextBlock block in visionText.blocks) {
      for (TextLine line in block.lines) {
        resultTxt.value += line.text + '\n';
      }
    }
    
    print(resultTxt.value);
    // textRecognizer.close();
  }
}
Другие вопросы по тегам