【问题标题】:Another exception was thrown: 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 2216 pos 12: '!_debugLocked': is not true引发了另一个异常:'package:flutter/src/widgets/navigator.dart':断言失败:第 2216 行 pos 12:'!_debugLocked':不正确
【发布时间】:2020-01-21 11:10:05
【问题描述】:

我的应用程序运行良好,我只是更新了一个文件中的代码,并且在该错误之前我收到了这个错误,每个页面都可以完美导航,现在所有页面都可以正常工作,而不是这个页面我正在导航到这个页面主页 引发了另一个异常:'package:flutter/src/widgets/navigator.dart': Failed assertion: line 2216 pos 12: '!_debugLocked': is not true。 我不知道现在问题出在哪里。

import 'package:custom_chewie/custom_chewie.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:firebase_admob/firebase_admob.dart';

class ChewieDemo extends StatefulWidget {
  final String title;

  ChewieDemo({this.title = 'Chewie Demo'});

  @override
  State<StatefulWidget> createState() {
    return new _ChewieDemoState();
  }
}

class _ChewieDemoState extends State<ChewieDemo> {
  int counter=0;
  static final MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo(
    keywords: ['Games', 'Puzzles'],
  );

  BannerAd bannerAd;
  InterstitialAd interstitialAd;
  RewardedVideoAd rewardedVideoAd;

  BannerAd buildBanner() {
    return BannerAd(
        adUnitId: BannerAd.testAdUnitId,
        size: AdSize.banner,
        listener: (MobileAdEvent event) {
          print(event);
        });
  }

  InterstitialAd buildInterstitial() {
    return InterstitialAd(
        adUnitId: InterstitialAd.testAdUnitId,
        targetingInfo: targetingInfo,
        listener: (MobileAdEvent event) {
          if (event == MobileAdEvent.failedToLoad) {
            interstitialAd..load();
          } else if (event == MobileAdEvent.closed) {
            interstitialAd = buildInterstitial()..load();
          }
          print(event);
        });
  }
  TargetPlatform _platform;
  VideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller = new VideoPlayerController.network(
      'https://github.com/flutter/assets-for-api-docs/blob/master/assets/videos/butterfly.mp4?raw=true',
    );
    FirebaseAdMob.instance.initialize(appId: FirebaseAdMob.testAppId);
    bannerAd = buildBanner()..load();
    interstitialAd = buildInterstitial()..load();
  }
  @override
  void dispose(){
    super.dispose();
    _controller.dispose();
  }

  @override
  Widget build(BuildContext context) {
    bannerAd ..load()..show(
      anchorOffset: 20.0,
      anchorType: AnchorType.top,
    );
    Future<bool> _onBackPressed() {
      if(counter<1){
        interstitialAd
          ..load()
          ..show();
        counter++;
      }
      else{bannerAd.dispose();
      Navigator.pop(context, true);
      }

    }
    return WillPopScope(
      child: Scaffold(
        appBar: new AppBar(
          title: new Text(widget.title),
        ),
        body: new Column(
          children: <Widget>[
            new Expanded(
              child: new Center(
                child: new Chewie(
                  _controller,
                  aspectRatio: 3 / 2,
                  autoPlay: true,
                  looping: true,
                ),
              ),
            ),

            new Row(
              children: <Widget>[
                new Expanded(
                  child: new FlatButton(
                    onPressed: () {
                      setState(() {
                        _platform = TargetPlatform.android;
                      });
                    },
                    child: new Padding(
                      child: new Text("Android controls"),
                      padding: new EdgeInsets.symmetric(vertical: 16.0),
                    ),
                  ),
                ),
                new Expanded(
                  child: new FlatButton(
                    onPressed: () {
                      setState(() {
                        _platform = TargetPlatform.iOS;
                      });
                    },
                    child: new Padding(
                      padding: new EdgeInsets.symmetric(vertical: 16.0),
                      child: new Text("iOS controls"),
                    ),
                  ),
                )
              ],
            )
          ],
        ),
      ),
      onWillPop: _onBackPressed,
    );


  }
}

【问题讨论】:

  • 嘿,开发者!您是否尝试重新启动应用程序而不是热重新加载?如果是这样,您可以编辑您的问题并从调试日志中添加几行吗?特别是通常编号为 #1 #2 等的第一行
  • 我发现了错误但不知道如何解决它,当我将横向应用于屏幕显示上面给定的错误时,我正在应用 custom_chewie,我的第一个屏幕是横向的,而 custom_chewie 也应该是横向的,但是这不能应用在这个屏幕上,现在我不知道如何解决这个错误,我什至无法为这个自定义的 _chewie 屏幕设置纵向。

标签: flutter dart


【解决方案1】:

如果您在 1 个屏幕上打开 2 个对话框时遇到问题。只需在此 Future.delayed 中放置一个对话框...

Future.delayed(Duration.zero, () {
  Navigator. ...
});

【讨论】:

    【解决方案2】:

    打开对话框的按钮的onPressedonTap 侦听器一定会导致此问题。 只需添加onPressed : () { myFunction(); )。这对我来说就像是一种魅力。

    【讨论】:

      【解决方案3】:

      当我遇到这个无用的错误文本时,这是因为屏幕根小部件没有定义/有限大小,我在根有一个“SingleChildScrollView”,

      为了解决这个问题,我简单地将它包装在 Container 中并将高度设置为屏幕最大高度,如下所示:

        @override
        Widget build(BuildContext context) {
          return Container(
            height: MediaQuery.of(context).size.height,
            child: SingleChildScrollView(
              child: ...
            ),
          ),
        }
      

      【讨论】:

        【解决方案4】:

        我相信在实现 dispose() 方法时, super.dispose(); 应该作为最后一个命令调用。

        【讨论】:

          【解决方案5】:

          尝试如下声明 onPressed:

          onPressed: () =&gt; your_func(),

          【讨论】:

          • 这是上一个 answer 的后期复制答案,没有进一步的见解。稍后复制答案飞蛾是不必要的嘈杂。如果您对该问题有新的见解,请回复。
          • 我刚遇到同样的错误,我用这个解决了它..所以想分享:)
          【解决方案6】:

          在重新加载模拟器之前尝试删除您最近编辑的一段代码。 刷新,如果有效,则尝试改进导致错误的代码。

          注意:请记住在加载之前重新启动应用程序。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-01-16
            • 2022-06-27
            • 2021-11-05
            • 2022-01-14
            • 2021-08-07
            • 2021-07-24
            • 2020-03-01
            • 2021-04-12
            相关资源
            最近更新 更多