繁体   English   中英

如何在flutter的主页上导航屏幕?

[英]how navigate screen in main page on flutter?

我想在主页上等待 5 秒钟并显示加载动画然后导航到另一个页面。 这是我的代码

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isLoading = true;

  @override
  void initState() {
    super.initState();
    loadData();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.cyan,
        body: Builder(
          builder: (context) => Center(
            child: Container(
              child: SpinKitCubeGrid(color: Colors.white, size: 50.0),
            ),
          ),
        ),
      ),
    );
  }

  Future loadData() async {
    return new Timer(Duration(seconds: 5), () {
      setState(() {
        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => MainPage()));
      });
    });
  }
}

但我收到了这个错误:

未处理的异常:使用不包含导航器的上下文请求导航器操作。

我应该怎么办?

也许这会帮助你

static Route route() {
 return MaterialPageRoute<void>(builder: (_) => MyApp());
}

 onPressed: () => Navigator.of(context).push<void>(MainPage.route()),
................

 static Route route() {
return MaterialPageRoute<void>(builder: (_) => MainPage());
  }

  onPressed: () => Navigator.of(context).push<void>(MyApp.route()),

你可以这样试试吗? 我没有运行代码,而是展示了基本思想。 只需传递上下文并从构建函数中调用它。

class _MyAppState extends State<MyApp> {
  bool isLoading = true;

  @override
  Widget build(BuildContext context) {
    loadData(context);

    return MaterialApp(
      ...
    );
  }

  Future loadData(context) async {
    ...
  }
}

MaterialApp包装MyApp ,这将为Navigator提供正确的context

void main() {
  runApp(MaterialApp(home: MyApp()));
}

您需要一个context来使用Navigator

要在不使用context导航,您可以使用名为GetX的包

例子:

  1. 在你的 MaterialApp 前添加“Get”,把它变成 GetMaterialApp

     GetMaterialApp( // Before: MaterialApp( home: MyHome(), )
  2. 导航到新屏幕:

     Get.to(NextScreen());

暂无
暂无

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

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