Flutter - Кто-нибудь может сказать, почему я получаю эти ошибки?

Я могу запустить свое приложение, но не могу получить никакого результата, оно просто показывает CircularProgressIndicator() бесконечное время. Я получаю эти ошибки в моем terminal:

E/flutter (30223): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'Null' is not a subtype of type 'String' in type cast
E/flutter (30223): #0      _HomePageState.scanText (package:ocr_text_recognition/screens/home_page.dart:57:55)
E/flutter (30223): #1      _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1096:21)
E/flutter (30223): #2      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:253:24)
E/flutter (30223): #3      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:627:11)
E/flutter (30223): #4      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:306:5)
E/flutter (30223): #5      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:239:7)
E/flutter (30223): #6      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:615:9)
E/flutter (30223): #7      PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)
E/flutter (30223): #8      PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:143:9)       
E/flutter (30223): #9      _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:625:13)
E/flutter (30223): #10     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:141:18)
E/flutter (30223): #11     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:127:7)
E/flutter (30223): #12     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:460:19)
E/flutter (30223): #13     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:440:22)
E/flutter (30223): #14     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:336:11)
E/flutter (30223): #15     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:395:7)
E/flutter (30223): #16     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:357:5)
E/flutter (30223): #17     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:314:7)
E/flutter (30223): #18     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:295:7)
E/flutter (30223): #19     _invoke1 (dart:ui/hooks.dart:164:13)
E/flutter (30223): #20     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:361:7)
E/flutter (30223): #21     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:31)
E/flutter (30223):

Это мой home_page.dart :


class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _text = "";
  Image? _image;
  final picker = ImagePicker();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Text Recognition"),
        actions: [
          TextButton(
            onPressed: scanText,
            child: Text(
              "Scan",
              style: TextStyle(color: Colors.white),
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: getImage,
        child: Icon(Icons.add_a_photo),
      ),
      body: Container(
          height: double.infinity,
          width: double.infinity,
          child: _image != null
              ? Image.file(
                  File(_image as String),
                  fit: BoxFit.fitWidth,
                )
              : Container()),
    );
  }

  Future scanText() async {
    showDialog(
      context: context,
      builder: (context) => Center(
        child: CircularProgressIndicator(),
      ),
    );
    final inputImage = InputImage.fromFilePath(_image as String);
    final textRecognizer = TextRecognizer();
    final recognizedText = await textRecognizer.processImage(inputImage);

    for (TextBlock block in recognizedText.blocks) {
      for (TextLine line in block.lines) {
        _text += line.text + "\n";
      }
    }
    Navigator.of(context).pop();
    Navigator.of(context)
        .push(MaterialPageRoute(builder: (context) => Details(_text)));
  }

  Future getImage() async {
    final pickedFile =
        await ImagePicker().pickImage(source: ImageSource.gallery);
    setState(() {
      if (pickedFile != null) {
        _image = pickedFile as Image?;
      } else {
        print("No image selected");
      }
    });
  }
}

Ваша переменная _image, вероятно, находится null в одной из точек, где вы пытаетесь преобразовать ее в строку. Пробовали ли вы самостоятельно отлаживать свою программу ? Выполнение некоторой отладки может помочь вам предоставить минимальный воспроизводимый пример.

user 07.02.2023 20:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема исходит от

final inputImage = InputImage.fromFilePath(_image as String);

Ваш _image становится нулевым. И вы не можете привести изображение к такой строке.

Вместо создания Image? _image используйте XFile тип данных.

  XFile? _xfile;

И показать изображение

body: Container(
    height: double.infinity,
    width: double.infinity,
    child: _xfile != null
        ? Image.file(
            File(_xfile!.path),
            fit: BoxFit.fitWidth,
          )
        : Container()),

И метод scanText и getImage будет

  Future scanText() async {
    showDialog(
      context: context,
      builder: (context) => Center(
        child: CircularProgressIndicator(),
      ),
    );
    if (_xfile == null) {
      return;
    }
    final inputImage = InputImage.fromFilePath(_xfile!.path);
    final textRecognizer = TextRecognizer();
    final recognizedText = await textRecognizer.processImage(inputImage);

    for (TextBlock block in recognizedText.blocks) {
      for (TextLine line in block.lines) {
        _text += line.text + "\n";
      }
    }
    //Navigator.of(context).pop();
    ///add the logic

  }

  Future getImage() async {
    final pickedFile =
        await ImagePicker().pickImage(source: ImageSource.gallery);
    setState(() {
      if (pickedFile != null) {
        _xfile = pickedFile;
      } else {
        print("No image selected");
      }
    });
  }

Это не работает ``` body: Container( height: double.infinity, width: double.infinity, child: _image ?? Container(), ), ``` Я дал эту часть кода, как вы сказали, но это все еще загружаю CircularProgressIndicator() и говорит то же самое на терминале, как и раньше

Mou Biswas 08.02.2023 15:50

это должно быть на высшем уровне, используя as String. вы можете добавить больше о InputImage

Yeasin Sheikh 08.02.2023 15:55

Это должно быть на верхнем уровне с использованием as String , не понял, что вы сказали в этой части, и о InputImage я только что использовал эту переменную всего для 3 строк, где часть кода может брать изображение и извлекать text внутри этого _image . `final inputImage = InputImage.fromFilePath(_image as String); окончательный textRecognizer = TextRecognizer(); окончательный распознанныйтекст = ожидание textRecognizer.processImage(inputImage); `

Mou Biswas 08.02.2023 17:01

вы можете указать название пакета TextRecognizer

Yeasin Sheikh 08.02.2023 17:05

имя пакета google_ml_kit: ^0.13.0google_ml_kit или вы можете использовать google_mlkit_text_recognition: ^0.5.0 google_mlkit_text_recognition

Mou Biswas 08.02.2023 18:55

после подачи заявки вы code все error из terminal исчезли, но CircularProgressIndicator() все еще отображается и не видно никакого результата. По-вашему, это из-за плохого состояния сети wi-fi? или можно что-то другое?

Mou Biswas 09.02.2023 19:20

не могу сказать, отладка может помочь

Yeasin Sheikh 10.02.2023 09:12

Другие вопросы по теме