ユーザーが羽ばたきで正常にログインした後もユーザーをログインしたままにしておきたい。 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();
}
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 { ...