Flutter启动画面

6

如何在Flutter中展示启动画面?有一个选项用于启动图标。我在它们各自的文件夹中添加了iOS和Android的图片。我的问题是它太快了。所以它直接打开MyApp()。我希望我的应用程序不显示任何内容,让启动画面控制,直到我想好要把用户带到哪个屏幕(在MyApp中,我想做初始化)。


1
请仅返回翻译后的文本:请确保检查此答案 https://dev59.com/klcP5IYBdhLWcg3ww8qS#48101776 - Shyju M
2个回答

6

您可以在initState中使用Future.delayed构造函数。这将使您的启动屏幕在导航发生之前保持指定的持续时间。

class SplashScreen extends StatefulWidget {
  @override
  _SplashScreenState createState() => new _SplashScreenState();
}

class _SplashScreenState extends State<SplashScreen> {
  @override
  void initState (){
    super.initState();
    // TODO initial state stuff
    new Future.delayed(const Duration(seconds: 4));
  }
  @override
  Widget build(BuildContext context) {
    //build
  }
}

通常我会将这个与Future.wait结合使用,以等待必要资源的加载。 - Rémi Rousselet
我刚试了一下,但它不起作用。当runApp被调用时,启动画面就会结束,而且据我所知,Future.delayed等同于Timer - arielnmz
这真的取决于你是如何连接你的小部件的。 - Shady Aziza
@VikasPandey,在这段代码中,你把导航方法放在哪里了? - Farhana Naaz Ansari

5

对Aziza的回答进行小更新

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

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

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

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    new Future.delayed(
        const Duration(seconds: 3),
        () => Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => LoginScreen()),
            ));
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      backgroundColor: Colors.white,
      body: Container(
        child: new Column(children: <Widget>[
          Divider(
            height: 240.0,
            color: Colors.white,
          ),
          new Image.asset(
            'assets/logo.png',
            fit: BoxFit.cover,
            repeat: ImageRepeat.noRepeat,
            width: 170.0,
          ),
          Divider(
            height: 105.2,
            color: Colors.white,
          ),
        ]),
      ),
    );
  }
}

希望这也能帮助其他人 :)

如果我需要从SharedPreference中获取登录状态并返回主页(如果为真)或返回登录页面(如果为假),应该如何处理? - Nabin Dhakal
@Nbn,请尝试这个答案 https://dev59.com/D1UL5IYBdhLWcg3wYHDD#60101934 - Kavinda Jayakody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接