Bis*_*Das 3 flutter woocommerce-rest-api
用户成功登录后,我想保持用户登录状态。我正在使用REST API来检索用户的用户名和密码。但是我想保存这些详细信息,以便用户可以保持登录状态。我目前的情况是我可以成功登录用户,但是当我重新启动应用程序时,我必须再次登录,因此我需要将用户的详细信息保存在共享首选项,以便用户可以在整个会话之前保持登录状态,直到注销为止。但是我无法执行此操作,因此请帮助我。提前致谢
这是我登录页面的代码。我删除了应该在列表视图中的UI内容,因为它们不相关。
Login.dart
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:restaurant_app/globalVar.dart';
import 'package:restaurant_app/homescreen.dart';
import 'package:restaurant_app/models/auth.dart';
import 'package:restaurant_app/signup.dart';
import 'package:http/http.dart' as http;
import 'package:restaurant_app/utils/authutils.dart';
import 'package:shared_preferences/shared_preferences.dart';
class SignIn extends StatefulWidget {
SignIn({ Key key, this.post }): super(key: key);
@override
_SignInState createState() => _SignInState();
}
class _SignInState extends State<SignIn> with SingleTickerProviderStateMixin
{
TabController controller;
TextEditingController _email = new TextEditingController();
TextEditingController _password = new TextEditingController();
bool loading;
final GlobalKey < ScaffoldState > _scaffoldKey = new GlobalKey<ScaffoldState>
();
@override
void initState() {
// TODO: implement initState
super.initState();
_fetchSessionAndNavigate();
controller = new TabController(length: 2, vsync: this);
loading = false;
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
controller.dispose();
setState(() {
loading = false;
});
_email.dispose();
_password.dispose();
}
final GlobalKey < FormState > _formKey = GlobalKey<FormState>();
bool _autoValidate = false;
_login(username, password) async {
setState(() {
loading = true;
});
var body = json.encode({
"username": username,
"password": password,
});
Map < String, String > headers = {
'Content-type': 'application/json',
'Accept': 'application/json',
};
await http
.post("${GlobalVar.Ip}/wp-json/jwt-auth/v1/token",
body: body, headers: headers)
.then((response) {
var body = json.decode(response.body);
//var response1;
if (response.statusCode == 200) {
// TODO: you need to store body['token'] to use in some authentication
loading = false;
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (BuildContext ctx) => HomePage()));
} else {
// TODO: alert message
final snackBar = SnackBar(
content: Text(body['message'].toString().trim()),
);
_scaffoldKey.currentState.showSnackBar(snackBar);
}
setState(() {
loading = false;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
resizeToAvoidBottomPadding: false,
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('images/art.png'),
fit: BoxFit.fill,
colorFilter: ColorFilter.mode(
Colors.white12.withOpacity(0.2), BlendMode.dstATop),
),
),
child: ListView();
}
Run Code Online (Sandbox Code Playgroud)
Shy*_*hil 16
Login如果用户详细信息已保存在存储器中,则可以导航到该页面,否则Home使用以下代码可以导航到该页面
Future<void> main() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var email = prefs.getString('email');
print(email);
runApp(MaterialApp(home: email == null ? Login() : Home()));
}
Run Code Online (Sandbox Code Playgroud)
成功登录后保存所需的用户详细信息
class Login extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () async {
//after the login REST api call && response code ==200
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('email', 'useremail@gmail.com');
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (BuildContext ctx) => Home()));
},
child: Text('Login'),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
清除注销详细信息
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: RaisedButton(
onPressed: () async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('email');
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (BuildContext ctx) => Login()));
},
child: Text('Logout'),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
确保WidgetFlutterBinding.ensureInitialized()是 main() 的第一行
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter/material.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
bool login = prefs.getBool("login");
print("login:" + login.toString());
runApp(MaterialApp(home: login == null ? LoginPage(title: 'My App') : HomePage()));
}
class LoginPage extends StatelessWidget { ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6359 次 |
| 最近记录: |