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