【问题标题】:flutter error assertion failed !_Debug locked is not true颤振错误断言失败!_调试锁定不正确
【发布时间】:2022-01-09 15:39:42
【问题描述】:
if (_username == _password) {
  Navigator.of(ctx).pushReplacement(
    MaterialPageRoute(
      builder: (ctx1) => const HomeScreen()
    ),
  );

在编写此导航器代码时没有问题,但是当我运行它时,它显示错误,如断言失败!_debug locked is not true。

错误:断言失败: ..\...\widgets\navigator.dart:3029

!navigator._debugLocked 不是真的

对我来说不仅有一个错误,还有两个错误,第二个错误是这样的

错误:在构建期间调用了 setState() 或 markNeedsBuild()。

这个 Overlay 小部件不能被标记为需要构建,因为框架已经在构建小部件的过程中。仅当其祖先之一当前正在构建时,小部件才能在构建阶段标记为需要构建。这个例外是允许的,因为框架在子组件之前构建父小部件,这意味着将始终构建脏后代。否则,框架可能不会在此构建阶段访问此小部件。

【问题讨论】:

  • 您能否在放置此if 语句之前添加更多sn-p?
  • 好的,我会添加它

标签: flutter dart visual-studio-code


【解决方案1】:

尝试下面的代码并删除const关键字,阅读pushReplacementhere

你的两个变量

var userName = 'ok';
var passWord = 'ok';

您的小部件状况:

 TextButton(
            onPressed: () {
              if (userName == passWord) {
                Navigator.pushReplacement(
                  context,
                  MaterialPageRoute(
                    builder: (BuildContext context) => HomeScreen(),
                  ),
                );
              }
            },
            child: Text(
              'Login',
            ),
          ),

您的 HomeScreen 类/小部件。

class HomeScreen extends StatelessWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    print('object');
    return Container(
      padding: EdgeInsets.all(16),
      color: Colors.white,
      child: Placeholder(),
    );
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多