web-dev-qa-db-ja.com

共有設定を使用して、ユーザーをばらばらにログインさせておく方法は?

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

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 { ...
0
Wilmer