local storage login & logout & auto login:
code:
| import 'package:flutter/material.dart'; | |
| import 'package:shared_preferences/shared_preferences.dart'; | |
| void main() => runApp(MyApp()); | |
| class MyApp extends StatefulWidget { | |
| @override | |
| _MyAppState createState() => _MyAppState(); | |
| } | |
| class _MyAppState extends State<MyApp> { | |
| @override | |
| Widget build(BuildContext context) { | |
| return MaterialApp( | |
| title: 'Auto Login', | |
| theme: ThemeData( | |
| primarySwatch: Colors.blue, | |
| ), | |
| home: MyHomePage()); | |
| } | |
| } | |
| class MyHomePage extends StatefulWidget { | |
| @override | |
| _MyHomePageState createState() => _MyHomePageState(); | |
| } | |
| class _MyHomePageState extends State<MyHomePage> { | |
| TextEditingController nameController = TextEditingController(); | |
| bool isLoggedIn = false; | |
| String name = ''; | |
| @override | |
| void initState() { | |
| super.initState(); | |
| autoLogIn(); | |
| } | |
| void autoLogIn() async { | |
| final SharedPreferences prefs = await SharedPreferences.getInstance(); | |
| final String userId = prefs.getString('username'); | |
| if (userId != null) { | |
| setState(() { | |
| isLoggedIn = true; | |
| name = userId; | |
| }); | |
| return; | |
| } | |
| } | |
| Future<Null> logout() async { | |
| final SharedPreferences prefs = await SharedPreferences.getInstance(); | |
| prefs.setString('username', null); | |
| setState(() { | |
| name = ''; | |
| isLoggedIn = false; | |
| }); | |
| } | |
| Future<Null> loginUser() async { | |
| final SharedPreferences prefs = await SharedPreferences.getInstance(); | |
| prefs.setString('username', nameController.text); | |
| setState(() { | |
| name = nameController.text; | |
| isLoggedIn = true; | |
| }); | |
| nameController.clear(); | |
| } | |
| @override | |
| Widget build(BuildContext context) { | |
| return Scaffold( | |
| appBar: AppBar( | |
| title: Text('Auto Login Home Page'), | |
| ), | |
| body: Center( | |
| child: Column( | |
| mainAxisAlignment: MainAxisAlignment.center, | |
| children: <Widget>[ | |
| !isLoggedIn ? TextField( | |
| textAlign: TextAlign.center, | |
| controller: nameController, | |
| decoration: InputDecoration( | |
| border: InputBorder.none, hintText: 'Please enter your name'), | |
| ) : Text('You are logged in as $name'), | |
| SizedBox(height: 10.0), | |
| RaisedButton( | |
| onPressed: () { | |
| isLoggedIn ? logout() : loginUser(); | |
| }, | |
| child: isLoggedIn ? Text('Logout') : Text('Login'), | |
| ) | |
| ], | |
| ), | |
| ), // This trailing comma makes auto-formatting nicer for build methods. | |
| ); | |
| } | |
| } |
0 Comments