【问题标题】:Instruction page that only loads after installation仅在安装后加载的说明页面
【发布时间】:2020-07-01 22:25:47
【问题描述】:

我的应用中有一个页面,其中包含一些关于如何使用该应用的图标和动画。
我想在安装后第一次启动时加载此页面,然后我希望应用程序的任何其他启动直接进入主页。
如何做到这一点?
我已经看到了一些将这个问题与启动画面混淆的线程,我只希望这个页面在安装后启动一次,然后再也不启动。 谢谢

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    您必须创建启动屏幕并在此页面中检查共享首选项,该首选项告诉您是否已显示介绍页面 如果您显示该页面,您可以导航到主页,否则导航到介绍页面 在介绍页面中显示您想要显示的任何内容,并在介绍结束时设置 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
       },)
     ),
    );
    }
    }
    
    

    【讨论】:

    • 只有一件事,它在我的菜单栏中创建了一个后退按钮,以便在下次运行时返回到这个加载屏幕,而 android 上的后退按钮也将它带回这个屏幕。有什么办法可以解决这个问题?
    • 没关系,使用此链接:stackoverflow.com/questions/45916658/…。再次感谢您的帮助
    • 哦,我错过了,您可以使用 Fluatter navigator 的 pushAndRemoveUntil 方法进行导航
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多