pikapika/lib/screens/AccountScreen.dart

187 lines
5.0 KiB
Dart
Raw Normal View History

2021-09-29 23:57:09 +00:00
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
2021-11-11 03:00:38 +00:00
import 'package:pikapika/basic/Common.dart';
import 'package:pikapika/basic/Method.dart';
2022-02-28 08:46:31 +00:00
import 'package:pikapika/basic/config/Themes.dart';
2021-11-11 03:00:38 +00:00
import 'package:pikapika/basic/enum/ErrorTypes.dart';
import 'package:pikapika/screens/RegisterScreen.dart';
import 'package:pikapika/screens/components/NetworkSetting.dart';
2021-09-29 23:57:09 +00:00
import 'AppScreen.dart';
import 'DownloadListScreen.dart';
import 'components/ContentLoading.dart';
// 账户设置
class AccountScreen extends StatefulWidget {
2022-03-17 03:31:25 +00:00
const AccountScreen({Key? key}) : super(key: key);
2021-09-29 23:57:09 +00:00
@override
_AccountScreenState createState() => _AccountScreenState();
}
class _AccountScreenState extends State<AccountScreen> {
late bool _logging = false;
late String _username = "";
late String _password = "";
@override
void initState() {
_loadProperties();
super.initState();
}
Future _loadProperties() async {
var username = await method.getUsername();
var password = await method.getPassword();
setState(() {
_username = username;
_password = password;
});
}
@override
Widget build(BuildContext context) {
if (_logging) {
return _buildLogging();
}
return _buildGui();
}
Widget _buildLogging() {
return Scaffold(
body: ContentLoading(label: '登录中'),
);
}
Widget _buildGui() {
return Scaffold(
appBar: AppBar(
title: Text('配置选项'),
actions: [
IconButton(
onPressed: () {
chooseTheme(context);
},
2022-03-19 04:12:27 +00:00
icon: const Text('主题'),
2021-09-29 23:57:09 +00:00
),
IconButton(
onPressed: _toDownloadList,
2022-03-19 04:12:27 +00:00
icon: const Icon(Icons.download_rounded),
2021-09-29 23:57:09 +00:00
),
IconButton(
onPressed: _logIn,
2022-03-19 04:12:27 +00:00
icon: const Icon(Icons.save),
2021-09-29 23:57:09 +00:00
),
],
),
body: ListView(
children: [
ListTile(
2022-03-19 04:12:27 +00:00
title: const Text("账号"),
2021-09-29 23:57:09 +00:00
subtitle: Text(_username == "" ? "未设置" : _username),
onTap: () async {
String? input = await displayTextInputDialog(
context,
2021-12-15 04:22:40 +00:00
src: _username,
title: '账号',
hint: '请输入账号',
2021-09-29 23:57:09 +00:00
);
if (input != null) {
await method.setUsername(input);
setState(() {
_username = input;
});
}
},
),
ListTile(
2022-03-19 04:12:27 +00:00
title: const Text("密码"),
2021-12-15 15:44:05 +00:00
subtitle: Text(_password == "" ? "未设置" : '\u2022' * 10),
2021-09-29 23:57:09 +00:00
onTap: () async {
String? input = await displayTextInputDialog(
context,
2021-12-15 04:22:40 +00:00
src: _password,
title: '密码',
hint: '请输入密码',
isPasswd: true,
2021-09-29 23:57:09 +00:00
);
if (input != null) {
await method.setPassword(input);
setState(() {
_password = input;
});
}
},
),
2022-03-19 04:12:27 +00:00
const NetworkSetting(),
2021-09-29 23:57:09 +00:00
Row(
children: [
Expanded(
child: Container(
2022-03-19 04:12:27 +00:00
padding: const EdgeInsets.all(15),
2021-09-29 23:57:09 +00:00
child: Text.rich(TextSpan(
text: '没有账号,我要注册',
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
decoration: TextDecoration.underline,
),
recognizer: TapGestureRecognizer()
..onTap = () => Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
RegisterScreen()),
).then((value) => _loadProperties()),
)),
),
),
],
),
],
),
);
}
_logIn() async {
setState(() {
_logging = true;
});
try {
await method.login();
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => AppScreen()),
);
} catch (e, s) {
print("$e\n$s");
setState(() {
_logging = false;
});
2022-02-28 08:46:31 +00:00
var message = "请检查账号密码或网络环境";
2021-10-22 02:24:39 +00:00
switch (errorType("$e")) {
case ERROR_TYPE_NETWORK:
message = "网络不通";
break;
case ERROR_TYPE_TIME:
message = "请检查设备时间";
break;
}
2022-02-28 08:46:31 +00:00
if ("$e".contains("email") && "$e".contains("password")) {
message = "请检查账号密码";
}
2021-09-29 23:57:09 +00:00
alertDialog(
context,
'登录失败',
2021-10-22 02:24:39 +00:00
"$message\n$e",
2021-09-29 23:57:09 +00:00
);
}
}
_toDownloadList() {
Navigator.push(
context,
2022-03-19 04:12:27 +00:00
MaterialPageRoute(builder: (context) => const DownloadListScreen()),
2021-09-29 23:57:09 +00:00
);
}
}