当前位置: 首页 > 知识库问答 >
问题:

Flutter app无法跳过老用户介绍画面

司徒志
2023-03-14

我是新手。我正在制作一个应用程序,它在应用程序第一次使用时,在第一个屏幕上输入一个电话号码。从下一次开始,我希望应用程序跳过第一个屏幕,直接进入下一个屏幕。但我无法实现此功能。请帮助。谢谢你。

import 'package:shared_preferences/shared_preferences.dart';

class PrefShare {
  String mob;
  bool isNew;

  Future<String> spNumberSetter(String no) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('phoneNumber', no);
  }

  Future<String> spNumberGetter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    mob = prefs.getString('phoneNumber');
  }

  Future<bool> spAppNew() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setBool('isLoggedIn', true);
  }

  Future<bool> spAppGetter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    isNew = prefs.getBool('isLoggedIn');
  }
}


//main
import 'package:emergency_messaging/button_screen.dart';
import 'package:flutter/material.dart';
import 'prefs.dart';

PrefShare prefShare = PrefShare();

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  prefShare.spAppGetter();
  bool status = prefShare.isNew ?? false;
  prefShare.spAppNew();
  runApp(
    MaterialApp(home: status == true ? ButtonScreen() : Home()),
  );
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  Widget build(BuildContext context) {
    String phoneNo;
    return SafeArea(
      child: Scaffold(
        backgroundColor: Color(0xff9ad3bc),
        floatingActionButton: FloatingActionButton(
          backgroundColor: Colors.black,
          child: Icon(
            Icons.arrow_forward,
            color: Color(0xff9ad3bc),
          ),
          onPressed: () {
            showDialog(
              context: context,
              builder: (context) {
                return AlertDialog(
                  title: Text("Confirmation"),
                  content: SingleChildScrollView(
                    child: ListBody(
                      children: <Widget>[
                        Text("The phone number entered is: $phoneNo"),
                      ],
                    ),
                  ),
                  actions: <Widget>[
                    FlatButton(
                      child: Text("Cancel"),
                      onPressed: () {
                        Navigator.pop(context);
                      },
                    ),
                    FlatButton(
                      child: Text("Continue"),
                      onPressed: () {
                        prefShare.spNumberSetter(phoneNo);
                        Navigator.push(
                            context,
                            MaterialPageRoute(
                                builder: (context) => ButtonScreen()));
                      },
                    ),
                  ],
                );
              },
            );
          },
        ),
        body: Padding(
          padding: EdgeInsets.all(8.0),
          child: Column(
            children: [
              SizedBox(
                height: 150.0,
              ),
              TextField(
                  style: TextStyle(color:  Colors.black,),
                  decoration: InputDecoration(

                    hintText: "Your emergency contact number",
                    hintStyle: TextStyle(color:  Colors.black,),
                    enabledBorder: UnderlineInputBorder(
                      borderSide: BorderSide(color:  Colors.black,),
                    ),
                    focusedBorder: UnderlineInputBorder(
                      borderSide: BorderSide(color:  Colors.black,),
                    ),
                  ),
                  keyboardType: TextInputType.phone,
                  autofocus: true,
                  cursorColor: Colors.black,
                  onChanged: (text) {
                    phoneNo = text;
                  },
                ),

            ],
          ),
        ),
      ),
    );
  }
}

共有1个答案

琴正初
2023-03-14

我认为您的问题来自以下方面:prefshare.spappgetter();

由于future spAppGetter()async{...} 是一个返回未来的异步函数,所以您应该使用await调用它,以便在调用bool status=prefshare.isnew之前确保spAppGetter已经完成??false;要做到这一点,您还应该将主函数标记为异步。您的主要功能如下所示:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await prefShare.spAppGetter();
  bool status = prefShare.isNew ?? false;
  prefShare.spAppNew();
  runApp(
    MaterialApp(home: status == true ? ButtonScreen() : Home()),
  );
}
 类似资料:
  • 本文向大家介绍javascipt:filter过滤介绍及使用,包括了javascipt:filter过滤介绍及使用的使用技巧和注意事项,需要的朋友参考一下 javascipt : filter  过滤 filter是new一个新的array,然后给他过滤后的对象,最后var list 起来

  • 主要内容:.loc[],.iloc[]在数据分析过程中,很多时候需要从数据表中提取出相应的数据,而这么做的前提是需要先“索引”出这一部分数据。虽然通过 Python 提供的索引操作符 和属性操作符 可以访问 Series 或者 DataFrame 中的数据,但这种方式只适应与少量的数据,为了解决这一问题,Pandas 提供了两种类型的索引方式来实现数据的访问。 本节就来讲解一下,如何在 Pandas 中使用 loc 函数和 iloc

  • 本文向大家介绍document.forms用法示例介绍,包括了document.forms用法示例介绍的使用技巧和注意事项,需要的朋友参考一下 概述 forms 返回一个集合 (一个HTMLCollection对象),包含了了当前文档中的所有form元素. 语法 var collection = document.forms; 例子 获取表单信息

  • 1.5 ABP总体介绍 - 多租户 1.5.1 什么是多租户 维基百科:“软件多租户是指一个软件架构的实例软件运行在一个服务器上,但存在多个租户。租户是一组共享一个公共的用户访问特定权限的软件实例。多租户架构,软件应用程序旨在提供每个租户专用的实例包括数据、配置、用户管理、租户个体功能和非功能属性。多租户与多实例架构,独立的软件实例代表不同的租户”操作多租户一般用来创建SaaS(软件即服务)应用程

  • 基本概念 人脸检测 人脸检测是指从一副静态的图像中检测并标记出人脸所在的区域, 并且给出表示人脸的矩形坐标(左上角坐标和右下角坐标, 其中图像左上角坐标是(0,0), 右下角坐标是(n,m), n,m分别为图像的像素宽度和高度)。在0.2, 0.3版的服务中增加了人脸的性别与年龄信息。 人脸检测有着广泛的用途, 比如(1): 智能驾驶辅助系统,能自动识别出道路前方的人脸, 并及时提醒驾驶人注意前方

  • 关于 Filter 的 API 有下面几个: Filter() Filter NumFilter() int FilterByIndex(index int) Filter SetFilter(filter ...Filter) Client | Service AddFilter(filter ...Filter) Client | Service RemoveFilterByIndex(ind