为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过php和mysql检查用户是否在flutter中登录?

如何通过php和mysql检查用户是否在flutter中登录?

PHP
哔哔one 2023-07-01 17:06:05
我是颤振和编程的新手。我开发了一个 flutter 模板 (github.com/mitesh77/Best-Flutter-UI-Templates) 并为其添加了一个启动屏幕。现在我想检查用户是否未登录,启动画面将不会加载并且用户会看到登录页面。我在新项目中尝试了这个(flutter-examples.com/flutter-online-user-registration-using-php-mysql-server)并且对我来说效果很好。但如何将其添加到下面的代码中。代码:void main() async {      WidgetsFlutterBinding.ensureInitialized();      await SystemChrome.setPreferredOrientations(<DeviceOrientation>[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown])          .then((_) => runApp(MyApp()));}/* This is First Screen */class FirstRoute extends StatelessWidget {  @override  Widget build(BuildContext context) {    return new SplashScreen(        seconds: 5,        navigateAfterSeconds: new AfterSplash(),        title: new Text('Hello',          style: new TextStyle(              fontWeight: FontWeight.w700,              fontFamily: 'IranYekan',              fontSize: 30.0          ),),        image: new Image.asset('assets/images/splashImage.png'),        backgroundColor: Colors.white,        styleTextUnderTheLoader: new TextStyle(),        photoSize: 110.0,        onClick: ()=>print("Flutter Egypt"),        loaderColor: Colors.blue    );  }}class AfterSplash extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text('First Route'),      ),      body: Center(        child: RaisedButton(          child: Text('Open route'),          onPressed: () {            // Navigate to second route when tapped.            Navigator.push(context, MaterialPageRoute(builder: (context) => NavigationHomeScreen()),            );          },        ),      ),    );  }}
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我将向您展示我在项目中做了什么,首先您需要安装Sharedprefrence,然后在 lib 文件夹中创建文件,创建名为 Utils 的文件夹,您可以提供任何您想要的名称,并在 Utils 文件夹中创建一个文件 sharedpreference.dart lib\Utils\

在此文件中的sharedpreference.dart中添加此行,ps:您可以使用此文件添加更多数据,例如,如果api返回userid类型的内容,您可以在此处指定,并且可以使用sharedprefrence在所有屏幕上访问数据

class SharedPrefrence {

     Future<bool> setLoggedIn(bool status) async {

            final SharedPreferences prefs = await SharedPreferences.getInstance();

            return prefs.setBool("logged_in", status);

          }

        

          Future<bool> getLogedIn() async {

            final SharedPreferences prefs = await SharedPreferences.getInstance();

            return prefs.getBool("logged_in") ?? false;

          }

        Future<bool> setUserId(String userId) async {

          final SharedPreferences prefs = await SharedPreferences.getInstance();

          return prefs.setString("user_id", userId);

       }

    

      Future<String> getUserId() async {

        final SharedPreferences prefs = await SharedPreferences.getInstance();

        return prefs.getString("user_id") ?? '';

      }

}

登录页面


这是示例登录功能,我在其中使用了首选项


void AppLogin(String username, String password) async {


    var response = await http.post(Urls.LOGIN,

        headers: {"Content-Type": "application/json"},

        body: json.encode({

          "User_Name": username,

          "Password": password,

        }));


    Map<String, dynamic> value = json.decode(response.body);

    if (response.statusCode == 200) {

      dialog.dismissProgressDialog(context);

      try {

        Map<String, dynamic> value = json.decode(response.body);

        SharedPrefrence().setLoggedIn(true);

        SharedPrefrence().setUserId(value['_id'].toString());


        Navigator.pushAndRemoveUntil(

            context,

            MaterialPageRoute(builder: (context) => DashboardScreen()),

            ModalRoute.withName("/login"));

      } catch (e) {

        e.toString();

      }

    }  else {

      dialog.dismissProgressDialog(context);

      var message = value['message'];

      CustomDialogs().showErrorAlert(context, message);

    }

  }

在您的初始屏幕中添加此函数,并在 initState 函数中调用函数 startTime,此时您的初始屏幕将显示 3 秒,然后它将调用 navigationPage ,在其中检查用户是否登录的登录状态的共享首选项如果没有,它将显示登录信息,如果已登录,它将重定向到 dahsboard 屏幕


 startTime() async {

    var _duration = new Duration(seconds: 3);

    return new Timer(_duration, navigationPage);

  }


  void navigationPage() {



    Future loginstatus = SharedPrefrence().getLogedIn();

    loginstatus.then((data) {

      if (data == true) {

        Navigator.pop(context, true);

        Navigator.pushAndRemoveUntil(

            context,

            MaterialPageRoute(builder: (context) => DashboardScreen()),

            ModalRoute.withName("/login"));

      } else {

        Navigator.pop(context, true);

        Navigator.push(

          context,

          MaterialPageRoute(

            builder: (context) => LoginScreen(),

          ),

        );

      }

    });

  }


查看完整回答
反对 回复 2023-07-01
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信