IOTConnect-Flutter/lib/Widget2.dart
2024-07-19 17:05:11 +08:00

167 lines
5.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart'; // 导入 Flutter UI 工具包
import 'package:shared_preferences/shared_preferences.dart'; // 导入共享首选项包
import 'package:http/http.dart' as http; // 导入 HTTP 请求包
import 'dart:convert'; // 导入 JSON 编解码包
class Widget2 extends StatefulWidget { // 声明 Widget2 组件,继承 StatefulWidget
@override
_Widget2State createState() => _Widget2State(); // 创建状态对象
}
class _Widget2State extends State<Widget2> { // Widget2 的状态类
bool _autoUpdate = false; // 是否自动更新的设置
int _userId = 0; // 用户ID
Map<String, dynamic> _userInfo = {}; // 用户信息
bool _isLoading = true; // 是否正在加载
@override
void initState() { // 初始化状态
super.initState();
_loadSettings(); // 加载设置
_loadUserInfo(); // 加载用户信息
}
Future<void> _loadSettings() async { // 加载设置
final prefs = await SharedPreferences.getInstance(); // 获取共享首选项实例
setState(() {
_autoUpdate = prefs.getBool('autoUpdate') ?? false; // 更新自动更新设置
});
}
Future<void> _saveSettings() async { // 保存设置
final prefs = await SharedPreferences.getInstance(); // 获取共享首选项实例
prefs.setBool('autoUpdate', _autoUpdate); // 保存自动更新设置
}
Future<void> _loadUserInfo() async { // 加载用户信息
final prefs = await SharedPreferences.getInstance(); // 获取共享首选项实例
_userId = prefs.getInt('userId') ?? 0; // 获取用户ID
if (_userId != 0) { // 如果用户ID不为0
final response = await http.get(
Uri.parse('$_userId'), // 发送请求获取用户信息
);
final responseData = jsonDecode(response.body); // 解析响应数据
if (responseData['success']) { // 如果请求成功
setState(() {
_userInfo = responseData['user']; // 更新用户信息
_isLoading = false; // 设置为加载完成
});
} else {
_showErrorDialog('获取用户信息失败'); // 显示错误对话框
}
} else {
setState(() {
_isLoading = false; // 设置为加载完成
});
}
}
void _showErrorDialog(String message) { // 显示错误对话框
showDialog(
context: context,
builder: (ctx) => AlertDialog(
title: Text('Error'), // 对话框标题
content: Text(message), // 对话框内容
actions: <Widget>[
TextButton(
child: Text('OK'), // 确认按钮
onPressed: () {
Navigator.of(ctx).pop(); // 关闭对话框
},
)
],
),
);
}
@override
Widget build(BuildContext context) { // 构建 Widget2 组件
return _isLoading
? Center(child: CircularProgressIndicator()) // 如果正在加载,显示加载指示器
: Padding(
padding: const EdgeInsets.all(16.0), // 添加内边距
child: ListView(
children: <Widget>[
Card(
child: ListTile(
leading: CircleAvatar(
backgroundImage: _userInfo['avatarUrl'] != null
? NetworkImage(_userInfo['avatarUrl']) // 如果用户头像存在,显示网络图片
: null,
radius: 30,
child: _userInfo['avatarUrl'] == null
? Icon(Icons.person, size: 30) // 如果用户头像不存在,显示默认图标
: null,
),
title: Text('用户名: ${_userInfo['username'] ?? '未提供'}'), // 显示用户名
subtitle: Text('积分: ${_userInfo['points'] ?? 0}'), // 显示积分
),
),
SizedBox(height: 20), // 添加间距
Card(
child: ListTile(
leading: Icon(Icons.update), // 图标
title: Text('自动检查更新'), // 标题
subtitle: Text('当前v1.0.992,点击检查更新'), // 子标题
trailing: Switch(
value: _autoUpdate, // 开关的当前值
onChanged: (value) { // 开关值变化事件处理
setState(() {
_autoUpdate = value; // 更新自动更新设置
});
_saveSettings(); // 保存设置
},
),
),
),
Card(
child: ListTile(
leading: Icon(Icons.phone_android), // 图标
title: Text('Android 设置'), // 标题
trailing: Icon(Icons.chevron_right), // 右侧箭头图标
onTap: () {
// 添加导航或功能
},
),
),
Card(
child: ExpansionTile(
leading: Icon(Icons.more_horiz), // 图标
title: Text('更多'), // 标题
children: <Widget>[
ListTile(
title: Text('子选项 1'), // 子选项1
onTap: () {
// 添加功能
},
),
ListTile(
title: Text('子选项 2'), // 子选项2
onTap: () {
// 添加功能
},
),
],
),
),
Card(
child: ListTile(
leading: Icon(Icons.exit_to_app), // 图标
title: Text('退出登录'), // 标题
trailing: Icon(Icons.chevron_right), // 右侧箭头图标
onTap: () async {
final prefs = await SharedPreferences.getInstance(); // 获取共享首选项实例
await prefs.remove('loggedIn'); // 移除登录状态
await prefs.remove('userId'); // 移除用户ID
Navigator.pushReplacementNamed(context, '/'); // 导航到首页
},
),
),
],
),
);
}
}