Владелец Флаттера!._debugCurrentBuildTarget == this’: неверно. #87

#flutter #dart #flutter-layout #pdf-viewer

#флаттер #dart #флаттер-макет #просмотрщик pdf

Вопрос:

Я получаю сообщение об ошибке при попытке загрузить PDF-файл с URL-адреса. Он показывает количество страниц pdf, но затем он выходит из строя.

Использование плагина — https://pub.dev/packages/advance_pdf_viewer

 ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (28488): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (28488): The following assertion was thrown while rebuilding dirty elements:
I/flutter (28488): 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4371 pos 14:
I/flutter (28488): 'owner!._debugCurrentBuildTarget == this': is not true.
I/flutter (28488):
I/flutter (28488): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter (28488): more information in this error message to help you determine and fix the underlying cause.
I/flutter (28488): In either case, please report this assertion by filing a bug on GitHub:
I/flutter (28488):   https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter (28488):
I/flutter (28488): The relevant error-causing widget was:
I/flutter (28488):   PDFViewer
I/flutter (28488):   
lib/…/panSignatureScreens/pan_screen.dart:156
I/flutter (28488):
I/flutter (28488): When the exception was thrown, this was the stack:
I/flutter (28488): #2      Element.rebuild.<anonymous closure> 
package:flutter/…/widgets/framework.dart:4371
I/flutter (28488): #3      Element.rebuild 
package:flutter/…/widgets/framework.dart:4374
I/flutter (28488): #4      BuildOwner.buildScope 
package:flutter/…/widgets/framework.dart:2777
I/flutter (28488): #5      WidgetsBinding.drawFrame 
package:flutter/…/widgets/binding.dart:906
I/flutter (28488): #6      RendererBinding._handlePersistentFrameCallback 
package:flutter/…/rendering/binding.dart:309
I/flutter (28488): #7      SchedulerBinding._invokeFrameCallback 
package:flutter/…/scheduler/binding.dart:1117
I/flutter (28488): #8      SchedulerBinding.handleDrawFrame 
package:flutter/…/scheduler/binding.dart:1055
I/flutter (28488): #9      SchedulerBinding._handleDrawFrame 
package:flutter/…/scheduler/binding.dart:971
I/flutter (28488): #13     _invoke  (dart:ui/hooks.dart:251:10))
I/flutter (28488): #14     _drawFrame  (dart:ui/hooks.dart:209:3))
  

мое использование — внутри столбца (дочерние элементы:[])

 new Expanded(
                  child: Container(
                    child: PDFViewer(
                      document: document,
                    ),
                    decoration: BoxDecoration(
                      border: Border.all(color: Colors.black),
                    ),
                  ),
                ),
  

Ответ №1:

У меня была такая же проблема, и проблема заключалась в том, что я вызвал класс внутри того же класса. Смотрите Тело: ниже. Замена его другим виджетом устранила проблему.

 class DicePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
                   home: Scaffold(
                   backgroundColor: Colors.red,
                   appBar: AppBar(
                             title: Text('Dicee'),
                             backgroundColor: Colors.red,
                           ),
                    body: DicePage(),
      ),
    );
  }
}
  

Комментарии:

1. точно так же случилось и со мной : D

2. Ты, братан, только что спас ночь моей работы: D Я потратил 30 минут, глядя на это и спрашивая: «это ошибка Flutter SDK или wat: D»

Ответ №2:

У меня только что была аналогичная ошибка:

 ════════ Exception caught by widgets library ═══════════════════════════════════
The following StackOverflowError was thrown building Container:
Stack Overflow

The relevant error-causing widget was
Container
lib/widgets/profile_wiget.dart:9
When the exception was thrown, this was the stack
#0      new _HashMap (dart:collection-patch/collection_patch.dart)
#1      new HashMap (dart:collection-patch/collection_patch.dart:33:22)
#2      RegExp._cache (dart:core-patch/regexp_patch.dart:109:11)
#3      RegExp._cache (dart:core-patch/regexp_patch.dart)
#4      new RegExp (dart:core-patch/regexp_patch.dart:17:31)
...
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4371 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
ProfileWidget
lib/widgets/profile_wiget.dart:10
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 4371 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.
The relevant error-causing widget was
Container
lib/widgets/profile_wiget.dart:9
════════════════════════════════════════════════════════════════════════════════
  

Это может быть еще одна причина, поскольку я получил stackoverflow, но, надеюсь, мой ответ поможет другим, кто ищет это сообщение об ошибке.
Моя проблема заключалась в том, что я создал виджет, возвращающий экземпляр самого себя (я назвал два класса одинаково):

 class ProfileWidget extends StatelessWidget {
  final Profile profile = Profile(name: 'Someone');
  @override
  Widget build(BuildContext context) {
    return Container(
      child: (profile.isAnon) ? AnonProfileWidget() : ProfileWidget(), 
    );
  }
}
  

Я решил это, просто переименовав один класс.

Комментарии:

1. Сэкономил мне много времени. Спасибо 🙂

Ответ №3:

Для меня это происходило, когда у меня был виджет вместо sliver в CustomScrollView

Ответ №4:

Если кто-то все еще получает эту ошибку, я решил свою, добавив
WidgetsFlutterBinding.ensureInitialized() перед функцией runApp.

 void main() {
     WidgetsFlutterBinding.ensureInitialized();
     runApp(const App());
}
  

Ответ №5:

Если вы используете Hive (https://pub.dev/packages/hive ), это может быть связано с тем, что вы использовали неправильный тип T при вызове await Hive.openBox<T>("boxName") .

(Мне потребовалось так много времени, чтобы разобраться, так что, надеюсь, это сэкономит вам время, может быть, даже для будущего меня, лол)

Комментарии:

1. мой день спасен, мое счастье неизмеримо, спасибо!

Ответ №6:

Моя проблема: у меня было два класса с одинаковым именем. Удаление одного из них устранило проблему для меня ✅

Ответ №7:

Используете ли вы FirebaseMessaging? Если это так, это может быть конфликт advance_pdf_viewer с onBackgroundMessage сообщения FirebaseMessaging .

Ответ №8:

Да! Конфликт возникает advance_pdf_viewer только в том случае, если вы используете обработчик фоновых сообщений Firebase Cloud Messaging Service.

Например, если у вас есть что-то вроде :

 Future<void> initNotifs() async {
    FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
      print("onMessage: $message");
    });
    final FirebaseMessaging messaging;
    messaging = FirebaseMessaging.instance;
    await messaging.getToken().then((c) => print(c));
    await messaging
        .subscribeToTopic('general')
        .then((value) => print('subscribed to general'));
     FirebaseMessaging.onBackgroundMessage(
         PushNotificationsHandler.firebaseMessagingBackgroundHandler);
  }
  

Прокомментируйте приведенный ниже код и / или настройте уведомления в локаторах / каком-либо другом представлении:

 FirebaseMessaging.onBackgroundMessage(
             PushNotificationsHandler.firebaseMessagingBackgroundHandler);
  

Ps: PushNotificationsHandler это другой класс.

Ответ №9:

Я решил эту проблему, изменив имя одного из моих виджетов без состояния.

Будьте очень осторожны при создании имени вашего виджета, если вы бессознательно создадите любые два виджета с одинаковым именем, вы получите ошибку такого типа.

Обязательно назначьте имя виджета, которое имеет к нему отношение, чтобы вы не получили ошибку такого типа.