Я создал метод сохранения и метод чтения для хранения учетных данных.
В приведенном ниже коде username
и password
будут сохранены в файле.
Код также указав путь к каталогу, где он будет храниться, но он не работает должным образом при нажатии на кнопку входа в систему. Код представляет собой экран входа в систему, который появляется, когда мы открываем приложение в первый раз. Страница входа в учетную запись пользователя откроется после заполнения учетных данных. Он никогда не будет запрашивать у пользователя логины, пока пользователь не очистит данные или не удалит приложение. В этом коде username
и password
- текстовое поле, это флажок на экране входа в систему, который будет действовать как поле запомнить меня. Он будет вызывать метод сохранения по щелчку, и теперь я хочу, чтобы этот флажок сохранял учетные данные только после нажатия кнопки входа в систему.
class LoginPageState extends State<LoginPage> {
TextEditingController username = new TextEditingController();
TextEditingController password = new TextEditingController();
bool checkValue = false;
String user ="username";
String pass="password";
@override
void initState() {
super.initState();
// call credentials method
readuser().then((String value) {
setState(() {
user="username";
user = value;
});
});
readpass().then((String value) {
setState(() {
pass="password";
pass = value;
});
});
}
bool checkingdata() {
if (user.length !=0 && pass.length != 0) {
return true;
} else {
return false;
}
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
elevation: 0.0,
backgroundColor: Colors.white12,
),
body: new SingleChildScrollView(
child: _body(),
scrollDirection: Axis.vertical,
),
);
}
Widget _body() {
return new Container(
padding: EdgeInsets.only(right: 20.0, left: 20.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
new Container(
margin: EdgeInsets.all(30.0),
child: new Image.asset(
"assets/images/flutter_icon.png",
height: 100.0,
),
),
new TextField(
onSubmitted: (_) {
setState(() {
user = username.text;``
});
},
controller: username,
decoration: InputDecoration(
hintText: "username",
hintStyle: new TextStyle(color: Colors.grey.withOpacity(0.3))),
),
new TextField(
controller: password,
obscureText: true,
onSubmitted: (_) {
setState(() {
pass = password.text;
});
},
decoration: InputDecoration(
hintText: "password",
hintStyle:
new TextStyle(color: Colors.grey.withOpacity(0.3)))),
new CheckboxListTile(
value: checkValue,
title: new Text("Remember me"),
controlAffinity: ListTileControlAffinity.leading,
onChanged: (bool value) { checkingdata();
_saved(user, pass);
},
),
new Container(
decoration:
new BoxDecoration(border: Border.all(color: Colors.black)),
child: new ListTile(
title: new Text(
"Login",
textAlign: TextAlign.center,
),
onTap: _saved(user, pass),
),
)
],
),
);
}
//for username
_saved (String text,String text2) async {
print("asggd");
final userfile = await _localFile;
//print("asd");
// Write the file.
_savedpass(text2);
print("asded");
return userfile.writeAsString(text);
}
//for password
_savedpass(String text) async {
final passfile = await _localFile;
// Write the file.
return passfile.writeAsString(text);
}
Future<String> readuser() async {
try {
final userfile = await _localFile;
// Read the file.
String contents = await userfile.readAsString();
return contents;
} catch (e) {
// If encountering an error, return 0.
//return "dfd";
}
}
Future<String> readpass() async {
try {
final userpass = await _localFile;
// Read the file.
String contents = await userpass.readAsString();
return contents;
} catch (e) {
// If encountering an error, return 0.
//return;
}
}Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
Future<File> get _localFile async {
var _localPath;
final path = await _localPath;
return File('$path/counter.txt');
}
}
Функция чтения используется для целей тестирования. Он напечатает учетные данные на главном экране. Я также хочу добавить еще один метод в этот код, который используется для проверки сохраненных учетных данных входа в систему из файла, чтобы в следующий раз при повторном использовании приложения он непосредственно открывал домашний экран.