#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. Это то, что вызывает ошибку переполнения.