首页 > 解决方案 > 如何修复'!_debugLocked':在颤动中不正确?

问题描述

我是新手,导航有问题。我的应用程序有多个页面,我无法理解错误以及如何修复它。

我在网上搜索并尝试了在 Git / Stack 或 Google 上找到的所有内容,但没有任何效果。

这是错误:'!_debugLocked':不正确。

这是代码:

这是第一个 .dart 文件,错误是当我尝试执行 Navigator.of ..... import 'package:flutter/material.dart';

class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[100],
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          SizedBox(
            height: 320,
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'C.R',
                style: TextStyle(
                  fontSize: 120,
                  fontFamily: 'Membra',
                ),
              )
            ],
          ),
          SizedBox(
            height: 200,
          ),
          FloatingActionButton(
            backgroundColor: Colors.white,
            child: Image.asset('images/arrow_next.png'),
            onPressed: () {
              Navigator.of(context).pushNamedAndRemoveUntil(
                  '/SecondScreen', (Route<dynamic> route) => false);
            },
          ),
        ],
      ),
    );
  }
}

这是我想从第一个文件/页面转到的第二个 .dart 文件。

import 'package:flutter/material.dart';

import 'NewWidget_Creator.dart';

class SecondScreen extends StatefulWidget {
  @override
  _SecondScreenState createState() => _SecondScreenState();
}

class _SecondScreenState extends State<SecondScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
          Center(
            child: NewWidget(
                'Schede',
                Navigator.of(context).pushNamedAndRemoveUntil(
                    '/SecondScreen', (Route<dynamic> route) => false)),
          ),
          NewWidget(
              'Orario',
              Navigator.of(context).pushNamedAndRemoveUntil(
                  '/SecondScreen', (Route<dynamic> route) => false)),
          NewWidget(
              'Pausa',
              Navigator.of(context).pushNamedAndRemoveUntil(
                  '/SecondScreen', (Route<dynamic> route) => false)),
        ],
      ),
    );
  }
}

NewWidgetCreator .dart 文件:

import 'package:flutter/material.dart';

class NewWidget extends StatelessWidget {
  String Name_of_button;
  Future<dynamic> send_toNextPage;
  NewWidget(this.Name_of_button, this.send_toNextPage);

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      onPressed: () {
        send_toNextPage;
      },
      child: Container(
        child: Text(
          Name_of_button,
          textAlign: TextAlign.center,
          style: TextStyle(
            fontFamily: 'Membra',
            fontSize: 50,
          ),
        ),
      ),
    );
  }
}

先感谢您。

标签: flutterflutter-navigation

解决方案


为什么在NewWidget现场send_toNextPage是一个未来?在这里你有固定的班级NewWidget

class NewWidget extends StatelessWidget {
  String buttonName;
  String nextPageRoute;
  NewWidget(this.buttonName, this.nextPageRoute);

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      onPressed: () {
        Navigator.of(context).pushNamed(nextPageRoute);
      },
      child: Container(
        child: Text(
          buttonName,
          textAlign: TextAlign.center,
          style: TextStyle(
            fontFamily: 'Membra',
            fontSize: 50,
          ),
        ),
      ),
    );
  }
}

这是如何使用它SeconScreen

class SecondScreen extends StatefulWidget {
  @override
  _SecondScreenState createState() => _SecondScreenState();
}

class _SecondScreenState extends State<SecondScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
          NewWidget('Schede', '/SecondScreen'),
          NewWidget('Orario', '/SecondScreen'),
          NewWidget('Pausa', '/SecondScreen'),
        ],
      ),
    );
  }
}

顺便说一句:SecondSreen可以是StatelessWidget

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
          NewWidget('Schede', '/SecondScreen'),
          NewWidget('Orario', '/SecondScreen'),
          NewWidget('Pausa', '/SecondScreen'),
        ],
      ),
    );
  }
}

推荐阅读