繁体   English   中英

Flutter 导航器推送替换中的上下文错误

[英]Flutter Context Error in Navigator pushReplacement

我正在创建启动画面,但在Navigator push replacementContext error

以下是main.dart文件中启动画面的代码

import 'dart:async';
import 'package:number_trivia/pages/home.dart';

void main() {
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    home: splash_screen(),
  ));
}

class splash_screen extends StatefulWidget {
  @override
  _splash_screenState createState() => _splash_screenState();
}

class _splash_screenState extends State<splash_screen> {
  @override
  void initState() {
    super.initState();
    Timer(Duration(seconds: 3),
          ()=>Navigator.pushReplacement(context,
              MaterialPageRoute(builder:
                (context) =>home()
              )
          )
     );
  }

  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: FlutterLogo(size: MediaQuery.of(context).size.height,),
    );
  }
}

错误说 - The argument type 'JsObject' can't be assigned to the parameter type 'BuildContext'.

我该如何纠正?

任何帮助都感激不尽:)

小部件构建完成后,您可以调用 Timer function。

 @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      Timer(Duration(seconds: 3), () {
        Navigator.pushReplacement(context,
              MaterialPageRoute(builder:
                (context) =>home()
              )
          );
      });
    });
  }

对于该pushReplacement方法,您传递了一个未在小部件树中指定的context 尝试使用具有build方法的小部件包装屏幕,以便它创建一个您可以使用的BuildContext 像这样:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
    debugShowCheckedModeBanner: false,
    home: splash_screen(context),
  );
  }
}

class splash_screen extends StatefulWidget {
  BuildContext context;
  splash_screen(this.context);


  @override
  _splash_screenState createState() => _splash_screenState();
}

class _splash_screenState extends State<splash_screen> {
  @override
  void initState() {
    super.initState();
    Timer(
        Duration(seconds: 3),
        () => Navigator.pushReplacement(
            widget.context, MaterialPageRoute(builder: (context) => home())));
  }

  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: FlutterLogo(
        size: MediaQuery.of(context).size.height,
      ),
    );
  }
}

这有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM