Flutter Web中的启动画面

11

在它们各自的文件夹中,Android 和 ios 有启动画面可以更改。Flutter web 是否有启动画面?我在网页加载之前看到一个白屏。我们如何更改它?那是启动画面还是等待加载时间?


3
它正在加载,请等待。 - Ayush Bherwani
2
我维护一个名为 flutter_native_splash 的软件包,您可以使用它来替换加载时显示的白屏,改为显示启动画面。 - jon
4个回答

2

您现在看到的白屏是因为加载时间过长。



我使用闪屏的方法是:

首先启动我的闪屏,然后在init方法内使用计时器,当计时器结束时调用另一个页面。

main.dart

import 'package:flutter/material.dart';
import 'src/splash_screen.dart';

main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'AppName',
        theme: ThemeData(
          primaryColor: Colors.white,
          backgroundColor: Colors.white,
          primaryIconTheme: new IconThemeData(color: Colors.black),
        ),
        home: SplashScreen());
  }
}

splash_screen.dart

import "package:flutter/material.dart";
import 'dart:async';
import 'login/login.dart';

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

class _SplashScreenState extends State<SplashScreen> {
  @override
  void initState() {
    super.initState();
    new Timer(new Duration(milliseconds: 1000), () { // set your desired delay time here
      Navigator.of(context).pushReplacement(
          new MaterialPageRoute(builder: (context) => new LoginScreen()));
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Container(
        alignment: Alignment.center,
        child: Image.asset(fullLogoPng,
            width: MediaQuery.of(context).size.width / 1.5,
            fit: BoxFit.scaleDown),
      ),
    );
  }
}

10
这不是一个真正的开屏界面,而是一种强制延迟。要在网页上使用本地化的开屏界面,需要编辑 web/index.html 文件并添加开屏界面。更多细节 - Ashutosh Singh

1
当您的应用程序打开时,本地应用程序加载Flutter的时间很短。默认情况下,在此期间,本地应用程序会显示一个白色闪屏屏幕。
您可以使用flutter_native_splash来更改它,该链接包含了使用此软件包的丰富文档。
您不需要阅读其余的文本,只需前往flutter_native_splash即可。
从此软件包的setting-the-splash-screen中,它带有一些参数,例如background_imagecolorimage等,可用于修改闪屏屏幕。
我的flutter_native_splash.yaml文件(位于根目录)包含:
flutter_native_splash:
  color: "#FFFFFF" #backgound color
  image: assets/images/splash.png

只需在终端上运行即可生成启动画面。

flutter pub run flutter_native_splash:create


0
使用这个启动画面包,可以轻松地为任何Flutter应用程序创建一个介绍页面,并且具有很多自定义选项。

0

带动画的启动画面

main.dart

import 'package:flutter/material.dart';
import 'src/splash_screen.dart';

main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      color: Colors.white,
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
          primaryColor: Colors.purple,
          primarySwatch: Colors.purple,
          fontFamily: 'FIRSNEUE'),
       home: SplashScreen());
  }
}

splashScreen.dart

import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

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

class SplashScreenState extends State<SplashScreen>
    with SingleTickerProviderStateMixin {
  var _visible = true;

  AnimationController animationController;
  Animation<double> animation;

  startTime() async {
    var _duration = new Duration(seconds: 3);  //SetUp duration here
    return new Timer(_duration, navigationPage);
  }

  void navigationPage() {
    Navigator.of(context).pushReplacementNamed(HOME_SCREEN);
  }

  @override
  void initState() {
    super.initState();
    animationController = new AnimationController(
        vsync: this, duration: new Duration(seconds: 2));
    animation =
    new CurvedAnimation(parent: animationController, curve: Curves.easeOut);

    animation.addListener(() => this.setState(() {}));
    animationController.forward();

    setState(() {
      _visible = !_visible;
    });
    startTime();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        fit: StackFit.expand,
        children: <Widget>[
          new Column(
            mainAxisAlignment: MainAxisAlignment.end,
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[

              Padding(padding: EdgeInsets.only(bottom: 30.0),child:new 
        Image.asset('assets/img.png',height: 25.0,fit: BoxFit.scaleDown,))


            ],),
          new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              new Image.asset(
                'assets/logo.png',
                width: animation.value * 250,
                height: animation.value * 250,
              ),
            ],
          ),
        ],
      ),
    );
  }
}

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