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

Flutter 当我实现启动屏幕时,应用程序会崩溃,flutter,dart,flutter-dependencies,Flutter,Dart,Flutter Dependencies,我尝试了两种不同的方法来实现splashscreen。 1) 通过更改launch_background.xml中的代码,可以很好地工作,但只会破坏图像。喜欢它显示小图像到非常大的尺寸。当我应用真正的闪屏图像应用程序时,它会崩溃,但应用程序与其他图像的效果很好,但每个图像中的图像大小都有问题。所以我需要知道如何将图像的大小设置到这个文件中,以及如何避免应用程序崩溃 2) 我使用的闪屏软件包,也有一个问题,在这个图像大小是非常非常非常小,在屏幕的中心,我想有它作为完整的背景 <item>

我尝试了两种不同的方法来实现splashscreen。 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'),

    );
  }
}
类splash扩展StatefulWidget{
@凌驾
_splashState createState()=>\u splashState();
}
类的状态扩展了状态{
@凌驾
小部件构建(构建上下文){
返回飞溅屏(
秒:4,
navigateAfterSeconds:MyApp(),
image:image.asset('imges/bg.png'),
);
}
}
嘿,开发者, 只需尝试这种方式,无需使用任何外部软件包…

  @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');
  }
}```


@覆盖
_SplashScreenState createState()=>\u SplashScreenState();
}
类的状态扩展了状态{
startTime()异步{
var_持续时间=新的持续时间(秒:8);
返回新计时器(_持续时间,导航页面);
}
Future checkFirstSeen()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
bool_seen=(prefs.getBool('seen')??false);
如果(看到)
返回false;
否则{
prefs.setBool('seed',true);
返回true;
}
}
@凌驾
void initState(){
super.initState();
开始时间();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
背景颜色:Colors.white,
正文:新中心(
子项:new Image.asset('assets/images/splash_screen.png',
高度:MediaQuery.of(context).size.height,fit:BoxFit.fill),
),
);
}
navigationPage()异步{
bool isFirstSeen=等待checkFirstSeen();
如果(第一次看到){
返回Navigator.pushName(上下文“/onboardscreen”);
}
如果(kAdvanceConfig['IsRequiredLogin']){
返回Navigator.pushreplacementname(上下文'/login');
}
返回Navigator.pushReplacementNamed(上下文'/home');
}
}```

我也有类似的问题,只是我更喜欢定制启动屏幕,并根据需要提供任何类型的功能。 这是我试过的样品,对你很有用。确保使用
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,),
            ),

          ],
        ),
      );
  }
}
void main(){
runApp(材料应用程序)(
主页:splash(),
));
}
类splash扩展StatefulWidget{
@凌驾
_splashState createState()=>\u splashState();
}
类的状态扩展了状态{
void initState(){
super.initState();
计时器(
持续时间(秒:2),
()=>Navigator.pushReplacement(
上下文
MaterialPage路由(生成器:(上下文)=>yournextpagename(),
),
));
}
);
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:堆栈(
儿童:[
SizedBox.expand(
子项:Image.asset('imges/splash.png',fit:BoxFit.fill,),
),
],
),
);
}
}

是的,我确实找到了另一个解决方案,但我面临一个问题。让我试试这个。哪种类型的问题?你能分享代码吗?我会修改的。