【发布时间】:2020-07-01 22:25:47
【问题描述】:
我的应用中有一个页面,其中包含一些关于如何使用该应用的图标和动画。
我想在安装后第一次启动时加载此页面,然后我希望应用程序的任何其他启动直接进入主页。
如何做到这一点?
我已经看到了一些将这个问题与启动画面混淆的线程,我只希望这个页面在安装后启动一次,然后再也不启动。
谢谢
【问题讨论】:
我的应用中有一个页面,其中包含一些关于如何使用该应用的图标和动画。
我想在安装后第一次启动时加载此页面,然后我希望应用程序的任何其他启动直接进入主页。
如何做到这一点?
我已经看到了一些将这个问题与启动画面混淆的线程,我只希望这个页面在安装后启动一次,然后再也不启动。
谢谢
【问题讨论】:
您必须创建启动屏幕并在此页面中检查共享首选项,该首选项告诉您是否已显示介绍页面 如果您显示该页面,您可以导航到主页,否则导航到介绍页面 在介绍页面中显示您想要显示的任何内容,并在介绍结束时设置 isIntroShowed 或共享首选项为 true 如下代码
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SplashScreen(),
);
}
}
class SplashScreen extends StatefulWidget {
SplashScreen({Key key}) : super(key: key);
@override
_SplashScreenState createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
@override
void initState() {
SharedPreferences.getInstance().then((prefs){
var isShowed =prefs.getBool("isIntroShowed");
if(isShowed!=null && isShowed)
{
//navigate to main page
}
else{
//navigate to intro page
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child: CircularProgressIndicator(),),
);
}
}
class IntroPage extends StatelessWidget {
const IntroPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child:FlatButton(child: Text('intro done'),onPressed: ()async{
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setBool('isIntroShowed', true);
// navigate to main content
},)
),
);
}
}
【讨论】: