在标签栏的页面之间放置状态

时间:2019-01-15 20:26:08

标签: dart flutter stateful

我正在开发一个应用程序,它包含一个计时器,因此它每秒更新一次状态,但是当我们更改页面时,会发生一些状态错误

  

如果您在不再出现在小部件树中的小部件的State对象上调用setState(),则会发生此错误(例如,其父小部件不再在其构建中包含该小部件)。代码时可能会发生此错误   从计时器或动画回调调用setState()。首选解决方案是取消计时器或停止收听dispose()回调中的动画。另一种解决方案是在调用setState()之前检查此对象的“ mount”属性,以确保该对象仍在树中。

     

E / flutter(5287):如果出现以下情况,此错误可能表示内存泄漏   之所以调用setState()是因为另一个对象保留了一个   从该状态对象中删除该对象后的引用   树。为避免内存泄漏,请考虑破坏对此的引用   dispose()期间的对象。

我真的不知道如何在哪里使用dispose()方法

错误示例 Example

因此,请帮助我处理以前的窗口小部件树,并在切换屏幕时重建它。

我的代码可以分为两个。一个包含所有内容的主页,以及两个触发setstate的计时器部分。

第一部分:

import 'package:flutter/material.dart';
import '../Theme.dart' as Theme;
import '../Components/ropSayac.dart';
import '../Components/Stackvideostile.dart';

class Ropo extends StatefulWidget {
  final RopoState state = new RopoState();
  void update(bool exp) {
    state.change(exp);
  }

  RopoState createState() => state;
}

class RopoState extends State<Ropo> {
  bool videomounted, expired;
  int remday = 0, remhour = 0, remmin = 0, remsec = 0;

  void change(bool exp) {
    setState(() {
      this.expired = exp;
    });
  }

  Widget updatetimer(int rday, rhour, rmin, rsec) {
    setState(() {
      remday = rday;
      remhour = rhour;
      remmin = rmin;
      remsec = rsec;
    });
  }

  Widget sayac(BuildContext context) {
    return Container(
      color: Colors.black,
      height: 40.0,
      width: MediaQuery.of(context).size.width,
      child: new Container(
        margin: EdgeInsets.only(left: 15.0, right: 15.0),
        child: new Row(
          // mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            new Text(
              "BU HAFTAKİ RÖPORTAJA",
              style: Theme.TextStyles.ropsayacc,
            ),
            new Expanded(
              flex: 1,
              child: new Container(
                color: Colors.black,
              ),
            ),
            new Text(
              "$remday : $remhour : $remmin : $remsec",
              style: Theme.TextStyles.ropsayaccint,
            ),
          ],
        ),
      ),
    );
  }

  Widget konukyazi() {
    // BU HAFTAKİ KONUĞUMUZ
    return new Column(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: <Widget>[
        new Text(
          "BU HAFTAKİ",
          style: Theme.TextStyles.koseice,
        ),
        new Text(
          "KONUĞUMUZ",
          style: Theme.TextStyles.koseice,
        ),
      ],
    );
  }

  Widget konuk(String ad, var img) {
    // Yuvarlak Şeklindeki Karakter Fotoğğğğğğrafı ve Çerçevesi
    return new Container(
      child: new Column(
        children: <Widget>[
          Stack(
            alignment: Alignment.center,
            children: <Widget>[
              Container(
                width: 226.0,
                height: 226.0,
                decoration: new BoxDecoration(
                    shape: BoxShape.circle, color: Theme.Colors.pagebackground),
              ),
              Container(
                width: 215.0,
                height: 215.0,
                decoration: new BoxDecoration(
                  shape: BoxShape.circle,
                  image: DecorationImage(
                    image: new AssetImage(img),
                  ),
                ),
              ),
            ],
          ),
          new Container(
            height: 12.0,
          ),
          new Text(
            ad,
            style: Theme.TextStyles.kosebas,
          ),
        ],
      ),
    );
  }

  void initState() { 
    super.initState();
  }

  Widget updateexpired(bool expiredd) {
    setState(() {
      expired = expiredd;
    });
  }

  Widget didvideomounted() {
    if (expired == true) {
      return new Text("video");
    } else
      return new Container(
        width: 226.0,
        height: 226.0,
        decoration: new BoxDecoration(
            shape: BoxShape.circle,
            border: new Border.all(
                width: 5.0, color: Theme.Colors.roportajheroborder)),
      );
  }

  Widget rendervideoorui() {
    if (expired == false) {
      return new Column(
        children: <Widget>[
          Container(
            height: 8.0,
          ),
          konukyazi(),
          Container(
            height: 60.0,
          ),
          konuk("Ayşe Alan", "assets/ayseAlan.png"),
        ],
      );
    } else {
      return new Text("Video Geldi :D");
      // return video
    }
  }

  Widget stackvideos() {
    return new Container(
      decoration: new BoxDecoration(
        color: Theme.Colors.tabbarbackground,
        borderRadius: BorderRadius.all(Radius.circular(8.0)),
      ),
      margin: EdgeInsets.only(top: 40.0, bottom: 10.0),
      width: 358.0,
      height: 343.0,
      child: Column(
        children: <Widget>[
          Container(
            // Üstteki bar
            width: 358.0,
            height: 46.0,
            decoration: new BoxDecoration(
              color: Theme.Colors.stackvideostopbar,
              borderRadius: BorderRadius.all(Radius.circular(8.0)),
              boxShadow: <BoxShadow>[
                new BoxShadow(
                  color: Colors.black12,
                  blurRadius: 3.0,
                  offset: new Offset(0.0, 7.0),
                ),
              ],
            ),

            child: Center(
              child: new Text(
                "BENCE Bİ’ ÖNCEKİLERE DE GÖZ AT",
                style: Theme.TextStyles.stackvideotitle,
              ),
            ),
          ), //üstteki bar bitti

        ],
      ),
    );
  }



  List<String> lists = ["asdas", "adadsa"];

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Theme.Colors.pagebackground,
      child: new Stack(
        children: <Widget>[
          new Container(
            margin: EdgeInsets.only(left: 0.0, top: 37.0),
            child: Image.asset(
              "assets/k@3x.png",
             // fit: BoxFit.fill,
            ),
          ),
          new Container(
            child: new Column(
              children: <Widget>[
                RopSayac(this),

                new Expanded(
                   child: CustomScrollView(
                     slivers: <Widget>[
                       SliverToBoxAdapter(
                         child: new Column(
                           children: <Widget>[
                             rendervideoorui(),
                             new Container(height: 40.0,),
                             stackvideos(),         
                           ],
                         ),
                       ),
                     ],
                   ),
                 ),
              ],
            ),
          ),

          //new Image.asset("name"),
        ],
      ),
    );
  }
}

第二部分:

import 'package:flutter/material.dart';
import '../Pages/ropor.dart';
import '../Theme.dart' as Theme;
import 'dart:async';

class RopComponent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return null;
  }
}

class RopSayac extends StatefulWidget {
  RopoState parent;
  RopSayac(this.parent);
  _RopSayacState createState() => _RopSayacState(parent);
}

class _RopSayacState extends State<RopSayac> {
  RopoState parent;
  _RopSayacState(this.parent);
  int remday = 0, remhour = 0, remmin = 0, remsec = 0;
  bool expired = false;
  var _now = DateTime.now();
  var endpoint = DateTime.parse("2019-01-24 11:23:30");

  Timer _everySecond;
  final Ropo ropo = new Ropo();

  Widget sayac(
    BuildContext context,
  ) {
    return Container(
      color: Colors.black,
      height: 40.0,
      width: MediaQuery.of(context).size.width,
      child: new Container(
        margin: EdgeInsets.only(left: 15.0, right: 15.0),
        child: new Row(
          // mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            new Text(
              "BU HAFTAKİ RÖPORTAJA",
              style: Theme.TextStyles.ropsayacc,
            ),
            new Expanded(
              flex: 1,
              child: new Container(
                color: Colors.black,
              ),
            ),
            new Text(
              "$remday : $remhour : $remmin : $remsec",
              style: Theme.TextStyles.ropsayaccint,
            ),
          ],
        ),
      ),
    );
  }

  @override
  void initState() {
    super.initState();
    //  RopoState bilge = new RopoState();

    // eğer videonun çıkacağı tarihten öndeysek
    //sayacı başlat
    _everySecond = Timer.periodic(Duration(seconds: 1), (Timer t) {
      if (_now.isBefore(endpoint) == true ||
          _now.difference(endpoint).inSeconds == 0) {
        //     bilge.updateexpired(false);
        expired = false;
        if (this.parent.mounted) {
          this.parent.setState(() {
            this.parent.expired = false;
          });
        }

        //    debugPrint(_now.toString());

        _now = DateTime.now();
        var remai = endpoint.difference(_now);

        ///   bilge.updatetimer(int.parse(remai.inDays.toString()), int.parse(remai.inHours.toString()) % 24, int.parse(remai.inMinutes.toString()) % 60, int.parse(remai.inSeconds.toString()) % 60);

        if (this.mounted) {
          setState(() {
            _now = DateTime.now();
            var remai = endpoint.difference(_now);
            remday = int.parse(remai.inDays.toString());
            remhour = int.parse(remai.inHours.toString()) % 24;
            remmin = int.parse(remai.inMinutes.toString()) % 60;
            remsec = int.parse(remai.inSeconds.toString()) % 60;
          });
        }
      } else {
        debugPrint("expired");
        if (this.parent.mounted) {
          this.parent.setState(() {
            this.parent.expired = true;
          });
        }

        //  bilge.updateexpired(false);
      }
    });
  }

  // defines a timer

  @override
  Widget build(BuildContext context) {
    return Container(
      child: sayac(context),
    );
  }
}

完整错误日志:

For a more detailed help message, press "h". To detach, press "d"; to quit, press "q".
I/flutter ( 5287): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 5287): The following assertion was thrown building NotificationListener<KeepAliveNotification>:
I/flutter ( 5287): 'package:flutter/src/widgets/framework.dart': Failed assertion: line 3803 pos 12: '_state._widget ==
I/flutter ( 5287): null': is not true.
I/flutter ( 5287):
I/flutter ( 5287): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter ( 5287): more information in this error message to help you determine and fix the underlying cause.
I/flutter ( 5287): In either case, please report this assertion by filing a bug on GitHub:
I/flutter ( 5287):   https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter ( 5287):
I/flutter ( 5287): When the exception was thrown, this was the stack:
I/flutter ( 5287): #2      new StatefulElement (package:flutter/src/widgets/framework.dart:3803:12)
I/flutter ( 5287): #3      StatefulWidget.createElement (package:flutter/src/widgets/framework.dart:795:38)
I/flutter ( 5287): #4      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2948:40)
I/flutter ( 5287): #5      Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 5287): #6      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 5287): #7      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 5287): #8      Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 5287): #9      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 5287): #10     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 5287): #11     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 5287): #12     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 5287): #13     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 5287): #14     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 5287): #15     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 5287): #16     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 5287): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 5287): #18     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 5287): #19     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 5287): #20     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 5287): #21     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 5287): #22     ParentDataElement.mount (package:flutter/src/widgets/framework.dart:4047:11)
I/flutter ( 5287): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 5287): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 5287): #25     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 5287): #26     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 5287): #27     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 5287): #28     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
I/flutter ( 5287): #29     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 5287): #30     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 5287): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 5287): #32     SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1028:36)
I/flutter ( 5287): #33     SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1013:20)
I/flutter ( 5287): #34     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2266:19)
I/flutter ( 5287): #35     SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1006:11)
I/flutter ( 5287): #36     RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:274:23)
I/flutter ( 5287): #37     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1730:58)
I/flutter ( 5287): #38     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:799:15)
I/flutter ( 5287): #39     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1730:13)
I/flutter ( 5287): #40     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:263:5)
I/flutter ( 5287): #41     RenderSliverMultiBoxAdaptor.insertAndLayoutLeadingChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:372:5)
I/flutter ( 5287): #42     RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:184:31)
I/flutter ( 5287): #43     RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
I/flutter ( 5287): #44     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:405:13)
I/flutter ( 5287): #45     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1316:12)
I/flutter ( 5287): #46     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1234:20)
I/flutter ( 5287): #47     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1509:7)
I/flutter ( 5287): #48     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:768:18)
I/flutter ( 5287): #49     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:281:19)
I/flutter ( 5287): #50     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:677:13)
I/flutter ( 5287): #51     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5)
I/flutter ( 5287): #52     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 5287): #53     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 5287): #54     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter ( 5287): #55     _invoke (dart:ui/hooks.dart:154:13)
I/flutter ( 5287): #56     _drawFrame (dart:ui/hooks.dart:143:3)
I/flutter ( 5287): (elided 2 frames from class _AssertionError)
I/flutter ( 5287): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 235 pos 16: 'indexOf(child) > index': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 235 pos 16: 'indexOf(child) > index': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2270 pos 20: '_debugCurrentBuildTarget == context': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 461 pos 12: 'child.hasSize': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 2 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
E/flutter ( 5287): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 5287): setState() called after dispose(): RopoState#2b3f4(lifecycle state: defunct)
E/flutter ( 5287): This error happens if you call setState() on a State object for a widget that no longer appears in the widget tree (e.g., whose parent widget no longer includes the widget in its build). This error can occur when code
calls setState() from a timer or an animation callback. The preferred solution is to cancel the timer or stop listening to the animation in the dispose() callback. Another solution is to check the "mounted" property of this object before calling setState() to ensure the object is still in the tree.
E/flutter ( 5287): This error might indicate a memory leak if setState() is being called because another object is retaining a reference to this State object after it has been removed from the tree. To avoid memory leaks, consider breaking the reference to this object during dispose().
E/flutter ( 5287): #0      State.setState.<anonymous closure> (package:flutter/src/widgets/framework.dart:1103:9)
E/flutter ( 5287): #1      State.setState (package:flutter/src/widgets/framework.dart:1129:6)
E/flutter ( 5287): #2      _RopSayacState.initState.<anonymous closure> (package:aurorav10/Components/ropSayac.dart:111:23)
E/flutter ( 5287): #3      _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
E/flutter ( 5287): #4      _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
E/flutter ( 5287): #5      _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1008 pos 14: 'insertFirst || _childElements[index-1] != null': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 3 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1008 pos 14: 'insertFirst || _childElements[index-1] != null': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 43 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1008 pos 14: 'insertFirst || _childElements[index-1] != null': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 7 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1008 pos 14: 'insertFirst || _childElements[index-1] != null': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 235 pos 16: 'indexOf(child) > index': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 1 line
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 235 pos 16: 'indexOf(child) > index': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2270 pos 20: '_debugCurrentBuildTarget == context': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 461 pos 12: 'child.hasSize': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 4 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 6 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 9 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 58 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/chatty  ( 5287): uid=10086(com.example.aurorav10) 1.ui identical 6 lines
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/rendering/sliver_multi_box_adaptor.dart': Failed assertion: line 574 pos 16: 'indexOf(child) == index': is not true.
I/flutter ( 5287): Another exception was thrown: 'package:flutter/src/widgets/sliver.dart': Failed assertion: line 1053 pos 14: '_childElements.containsKey(index)': is not true.

谢谢

1 个答案:

答案 0 :(得分:0)

首先,请在发布问题时将代码缩减至绝对必要的范围。有很多代码可以解析(特别是因为它不是全部用英语)。至少要清理您的评论等...

但是眼前的问题是,您正在_RopSayacState的initState()函数中创建一个计时器,但从未停止过它。正如您在问题中所包含的错误所解释的那样,这将导致问题,因为当不再显示小部件时,会将其从小部件树中删除,因此对其调用setState将导致错误。

要解决此问题,您需要做的就是在删除小部件时取消计时器。最简单的方法是覆盖_RopSayacState中的dispose方法。看起来应该像这样。

@override
void dispose() {
 super.dispose();
 _everySecond.cancel();
}