Ошибка Flutter Stackoverflow при использовании Firebase

#firebase #flutter #dart #google-cloud-firestore #stack-overflow

# #firebase #флаттер #dart #google-облако-firestore #переполнение стека

Вопрос:

Я не знаю, откуда берется эта ошибка Stackoverflow

 I/flutter (20342): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
    I/flutter (20342): The following StackOverflowError was thrown building Analytics(dirty):
    I/flutter (20342): Stack Overflow
    I/flutter (20342):
    I/flutter (20342): The relevant error-causing widget was:
    I/flutter (20342):   Analytics
    I/flutter (20342):   file:///C:/Users/OneDrive/Dokumente/Development/GitHub/trimlog/src/flutter_app/lib/screens/wrapper.dart:87:11
    I/flutter (20342):
    I/flutter (20342): When the exception was thrown, this was the stack:
    I/flutter (20342): #0      _LinkedHashMapMixin._getValueOrData (dart:collection-patch/compact_hash.dart:331:3)
    I/flutter (20342): #1      _LinkedHashMapMixin.containsKey (dart:collection-patch/compact_hash.dart:355:54)
    I/flutter (20342): #2      FirebaseFirestore.instanceFor (package:cloud_firestore/src/firestore.dart:50:26)
    I/flutter (20342): #3      new Database (package:Trimlog/services/database/database.dart:39:97)
    I/flutter (20342): #4      new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #5      new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #6      new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #7      new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #8      new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #9      new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #10     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #11     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #12     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #13     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #14     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #15     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #16     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #17     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #18     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #19     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #20     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #21     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #22     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #23     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #24     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #25     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #26     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #27     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #28     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #29     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #30     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #31     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #32     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #33     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #34     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #35     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #36     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #37     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #38     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #39     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #40     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #41     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #42     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): #43     new Database (package:Trimlog/services/database/database.dart)
    I/flutter (20342): ...
    I/flutter (20342): ...
    I/flutter (20342): #15600  ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
    I/flutter (20342): #15601  StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4791:11)
    I/flutter (20342): #15602  ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
    I/flutter (20342): ...     Normal element mounting (7 frames)
    I/flutter (20342): #15609  Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
    I/flutter (20342): #15610  Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
    I/flutter (20342): #15611  SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1158:36)
    I/flutter (20342): #15612  SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1143:20)    
    I/flutter (20342): #15613  BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2683:19)
    I/flutter (20342): #15614  SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1136:11)
    I/flutter (20342): #15615  RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:350:23)
    I/flutter (20342): #15616  RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1883:59)
    I/flutter (20342): #15617  PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:915:15)
    I/flutter (20342): #15618  RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1883:14)
    I/flutter (20342): #15619  RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:339:5)
    I/flutter (20342): #15620  RenderSliverMultiBoxAdaptor.insertAndLayoutChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:485:5)
    I/flutter (20342): #15621  RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:259:17)
    I/flutter (20342): #15622  RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
    I/flutter (20342): #15623  RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:132:12)
    I/flutter (20342): #15624  _RenderSliverFractionalPadding.performLayout (package:flutter/src/widgets/sliver_fill.dart:170:11)
    I/flutter (20342): #15625  RenderObject.layout (package:flutter/src/rendering/object.dart:1777:7)
    I/flutter (20342): #15626  RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:507:13)
    I/flutter (20342): #15627  RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1561:12)
    I/flutter (20342): #15628  RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1470:20)
    I/flutter (20342): #15629  RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1634:7)
    I/flutter (20342): #15630  PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:884:18)
    I/flutter (20342): #15631  RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:436:19)
    I/flutter (20342): #15632  WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:914:13)
    I/flutter (20342): #15633  RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
    I/flutter (20342): #15634  SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
    I/flutter (20342): #15635  SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
    I/flutter (20342): #15636  SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)
    I/flutter (20342): #15640  _invoke (dart:ui/hooks.dart:251:10)
    I/flutter (20342): #15641  _drawFrame (dart:ui/hooks.dart:209:3)
    I/flutter (20342): (elided 3 frames from dart:async)
    I/flutter (20342):
    I/flutter (20342): ════════════════════════════════════════════════════════════════════════════════════════════════════
    I/flutter (20342): Another exception was thrown: NoSuchMethodError: The getter 'analytic' was called on null.
 

В моем main.dart

 class Instances {
  static Database database = new Database();
}
 

В database.dart

 class Database {
  final _databaseReference = FirebaseFirestore.instance; // Instance of Firebase
  final user = new DatabaseUser();
  final boat = new DatabaseBoat();
  final trim = new DatabaseTrim();
  final analytic = new DatabaseAnalytic();
 

В database_analytic.dart

 class DatabaseAnalytic extends Database {
 

Как получить доступ, например, к DatabaseAnalytic

 Instances.database.analytic.deleteAnalyticOfBoat(widget.boat.documentid, widget.analytic.documentid)
 

wrapper.dart: https://hastebin.com/eholocelug.java

Может кто-нибудь сказать мне, откуда берется ошибка?

Я видел, что в нем говорится, что «Получатель ‘analytic’ был вызван для null.», Но я не могу понять, почему это так.

Я также не уверен, является ли это лучшим способом работы с базой данных, если есть лучший способ, было бы здорово, если бы вы дали мне знать.

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

1. При переполнении стека, пожалуйста, не показывайте изображения текста и кода. Скопируйте текст в сам вопрос и отформатируйте его так, чтобы его было легко читать, копировать и искать. Вы можете отредактировать вопрос, чтобы исправить это, используя ссылку редактирования внизу.

2. Экземпляр analytic возвращает значение null

3. Я видел это, но почему возникает вопрос…

4. Не могли бы вы опубликовать свой lib/screens/wrapper.dart код?

5. Вот вся моя оболочка.dart hastebin.com/eholocelug.java

Ответ №1:

Мы можем видеть это в вашем выводе ошибки

Было выдано другое исключение: NoSuchMethodError: средство получения ‘analytic’ было вызвано для null.

С помощью этой строки

 Instances.database.analytic.deleteAnalyticOfBoat(widget.boat.documentid,widget.analytic.documentid)
 

Ваша ошибка предполагает Instances.database , что null

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

1. Итак, где, по-вашему, ошибка на самом деле? Я не совсем понимаю, в чем, по вашему мнению, проблема.

Ответ №2:

Если вы посмотрите на остальную часть ошибки, база данных постоянно создается снова и снова. Database создает экземпляр DatabaseAnalytic, который снова создает экземпляр Database. Это то, что вызывает ошибку переполнения.