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

我是颤振和编程的新手。我开发了一个 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()),

            );

          },

        ),

      ),

    );

  }

}


哔哔one
浏览 98回答 1
1回答

潇湘沐

我将向您展示我在项目中做了什么,首先您需要安装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(),          ),        );      }    });  }
打开App,查看更多内容
随时随地看视频慕课网APP