为什么我不能使用条件来更改页面,但凸起的按钮可以工作? [英] Why can't i use a condition to change page but raised button works?

查看:68
本文介绍了为什么我不能使用条件来更改页面,但凸起的按钮可以工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在中遇到了问题小工具图书馆和专家让您感到惊讶断言失败:行3289 pos 12:'!_debugLocked':不正确
因此,我决定重新创建问题,
当_counter的增量大于2时,它将转到Home( )
但是会弹出错误

I had a problem from Getting EXCEPTION CAUGHT BY WIDGETS LIBRARY & Failed assertion: line 3289 pos 12: '!_debugLocked': is not true So i decided to recreated the issue, When the increment _counter is more than 2 it would go to Home() But an error would pop up

import 'dart:async';
import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(
    home: new Greeting(),
  ));
}

class Greeting extends StatefulWidget {
  @override
  _GreetingState createState() => new _GreetingState();
}

class _GreetingState extends State<Greeting> {
  @override
  initState() {
    super.initState();
  }

  static int _counter = 0;

  void _increment() {
    setState(() {
      _counter++;
    });
  }



  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Align(
          alignment: FractionalOffset.center,
          child: new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[

              RaisedButton(
                onPressed: _increment,
                child: Text('Increment'),
              ),
              Text('Count: $_counter'),


              RaisedButton(                      // Current Testing swap Page
                child: Text('Go to home test'),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => Home()),
                  );
                },
              ),

              (_counter > 2) == true ?
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => Home()),
              ):Container()


            ],
          )),
    );
  }

}




class Home extends StatefulWidget {
  @override
  _HomeState createState() => new _HomeState();
}

class _HomeState extends State<Home> {

  initState() {
    super.initState();
    new Timer(const Duration(seconds: 5), onClose);
  }

  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        backgroundColor: Colors.pink,
        title: new Text("Home"),
      ),
    );
  }

  void onClose() {
    Navigator.pop(context);
  }
}

是否有任何原因导致我无法使用导航到另一个页面的条件?

Is there any reason why i can't use the condition to navigate to another page?

Launching lib\main.dart on Android SDK built for x86 in debug mode...
Running Gradle task 'assembleDebug'...
√ Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
Debug service listening on ws://127.0.0.1:52775/UyFpSA2pizE=/ws
Syncing files to device Android SDK built for x86...
D/EGL_emulation( 6595): eglMakeCurrent: 0xdc91a2a0: ver 3 1 (tinfo 0xdc90f7d0)

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown building Greeting(dirty, state: _GreetingState#11d1e):
setState() or markNeedsBuild() called during build.

This Overlay widget cannot be marked as needing to build because the framework is already in the process of building widgets.  A widget can be marked as needing to be built during the build phase only if one of its ancestors is currently building. This exception is allowed because the framework builds parent widgets before children, which means a dirty descendant will always be built. Otherwise, the framework might not visit this widget during this build phase.
The widget on which setState() or markNeedsBuild() was called was: Overlay-[LabeledGlobalKey<OverlayState>#5fa74]
  state: OverlayState#b1e52(entries: [OverlayEntry#629a0(opaque: true; maintainState: false), OverlayEntry#de9e6(opaque: false; maintainState: true), OverlayEntry#60d55(opaque: false; maintainState: false), OverlayEntry#09442(opaque: false; maintainState: true)])
The widget which was currently being built when the offending call was made was: Greeting
  dirty
  state: _GreetingState#11d1e
The relevant error-causing widget was: 
  Greeting file:///C:/Users/18049496/AndroidStudioProjects/new_page/lib/main.dart:6:15
When the exception was thrown, this was the stack: 
#0      Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:4167:11)
#1      Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:4182:6)
#2      State.setState (package:flutter/src/widgets/framework.dart:1253:14)
#3      OverlayState.rearrange (package:flutter/src/widgets/overlay.dart:415:5)
#4      NavigatorState._flushHistoryUpdates (package:flutter/src/widgets/navigator.dart:3069:16)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
E/flutter ( 6595): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 2334 pos 18: '!navigator._debugLocked': is not true.
E/flutter ( 6595): #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:42:39)
E/flutter ( 6595): #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:38:5)
E/flutter ( 6595): #2      _RouteEntry.handlePush.<anonymous closure> (package:flutter/src/widgets/navigator.dart:2334:18)
E/flutter ( 6595): #3      TickerFuture.whenCompleteOrCancel.thunk (package:flutter/src/scheduler/ticker.dart:398:15)
E/flutter ( 6595): #4      _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter ( 6595): #5      _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 6595): #6      _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter ( 6595): #7      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter ( 6595): #8      Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter ( 6595): #9      Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter ( 6595): #10     Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:556:7)
E/flutter ( 6595): #11     _rootRun (dart:async/zone.dart:1184:13)
E/flutter ( 6595): #12     _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter ( 6595): #13     _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter ( 6595): #14     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1019:23)
E/flutter ( 6595): #15     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
E/flutter ( 6595): #16     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
E/flutter ( 6595): 
E/flutter ( 6595): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 3580 pos 12: '!_debugLocked': is not true.
E/flutter ( 6595): #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:42:39)
E/flutter ( 6595): #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:38:5)
E/flutter ( 6595): #2      NavigatorState.pop (package:flutter/src/widgets/navigator.dart:3580:12)
E/flutter ( 6595): #3      Navigator.pop (package:flutter/src/widgets/navigator.dart:2010:27)
E/flutter ( 6595): #4      _HomeState.onClose (package:newpage/main.dart:100:15)
E/flutter ( 6595): #5      _rootRun (dart:async/zone.dart:1180:38)
E/flutter ( 6595): #6      _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter ( 6595): #7      _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter ( 6595): #8      _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1019:23)
E/flutter ( 6595): #9      _rootRun (dart:async/zone.dart:1184:13)
E/flutter ( 6595): #10     _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter ( 6595): #11     _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:1003:23)
E/flutter ( 6595): #12     Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:23:15)
E/flutter ( 6595): #13     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
E/flutter ( 6595): #14     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
E/flutter ( 6595): #15     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
E/flutter ( 6595): 


推荐答案

将该导航器代码添加到_increment函数中。

Add that navigator code into _increment function.

void _increment() {
setState(() {
  _counter++;
});
if (_counter > 2) {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => Home()),
  );
}
}

这篇关于为什么我不能使用条件来更改页面,但凸起的按钮可以工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆