当我实现启动屏幕时,应用程序崩溃了

时间:2019-09-05 11:11:59

标签: flutter dart flutter-dependencies

我尝试了两种不同的方式来实现启动画面。 1)通过更改launch_background.xml中的代码效果很好,但它只会破坏图像。像它显示小图像到非常大的尺寸。当我应用我的真实启动画面图像应用程序时崩溃了,但该应用程序与其他图像运行良好,但是每个图像中的图像尺寸都有问题。所以我需要知道如何将图像的大小设置到该文件中以及如何避免使应用程序崩溃 2)我使用了启动屏幕程序包,但该屏幕的图像尺寸非常小,我希望将其作为完整背景。

<item>
    <bitmap
        android:gravity="center"
        android:src="@drawable/splash"
        />
</item>

这是第三个问题的代码

class splash extends StatefulWidget {
  @override
  _splashState createState() =>  _splashState();
}

class _splashState extends State<splash> {
  @override
  Widget build(BuildContext context) {
    return  SplashScreen(
        seconds: 4,
        navigateAfterSeconds:  MyApp(),
        image:  Image.asset('imges/bg.png'),

    );
  }
}

2 个答案:

答案 0 :(得分:1)

我有类似的问题,只是更喜欢制作自定义启动屏幕,并根据需要放置任何类型的功能。 这是我尝试过的示例,对您来说效果很好。确保以这种方式使用Navigator.pushReplacement,当您需要从主屏幕返回时,它不会停留在spalsh上,因为逻辑上应该退出,它会退出。根据您的需要导入软件包。

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

class splash extends StatefulWidget {
  @override
  _splashState createState() =>  _splashState();
}

class _splashState extends State<splash> {

  void initState() {
    super.initState();
    Timer(
      Duration(seconds: 2),
          () => Navigator.pushReplacement(
        context,
        MaterialPageRoute(builder: (context) => yournextpagename(),
      ),
    ));
  }

  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Stack(
          children: <Widget>[
            SizedBox.expand(
              child: Image.asset('imges/splash.png',fit: BoxFit.fill,),
            ),

          ],
        ),
      );
  }
}

答案 1 :(得分:0)

嘿,开发人员, 只需尝试这种方式,无需使用任何外部软件包...

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

class _SplashScreenState extends State<SplashScreenAnimate> {
  startTime() async {
    var _duration = new Duration(seconds: 8);
    return new Timer(_duration, navigationPage);
  }

  Future checkFirstSeen() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool _seen = (prefs.getBool('seen') ?? false);

    if (_seen)
      return false;
    else {
      prefs.setBool('seen', true);
      return true;
    }
  }

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

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      backgroundColor: Colors.white,
      body: new Center(
        child: new Image.asset('assets/images/splash_screen.png',
            height: MediaQuery.of(context).size.height, fit: BoxFit.fill),
      ),
    );
  }

  navigationPage() async {
    bool isFirstSeen = await checkFirstSeen();

    if (isFirstSeen) {
      return Navigator.pushNamed(context, '/onboardscreen');
    }

    if (kAdvanceConfig['IsRequiredLogin']) {
      return Navigator.pushReplacementNamed(context, '/login');
    }

    return Navigator.pushReplacementNamed(context, '/home');
  }
}```