diff --git a/lib/PersonalInfo.dart b/lib/PersonalInfo.dart index 067bea0..4a32ef5 100644 --- a/lib/PersonalInfo.dart +++ b/lib/PersonalInfo.dart @@ -20,13 +20,18 @@ class PersonalInfo extends StatefulWidget { class _PersonalInfoState extends State { String _name = '', _phone = '', _gender = '', _address='', _email = '', _password = ''; bool _isEditing = false; //是否為編輯狀態 - final TextEditingController _emailController = - TextEditingController(); //email輸入text + final TextEditingController _nameController = TextEditingController(); + final TextEditingController _phoneController = TextEditingController(); + final TextEditingController _genderController = TextEditingController(); + final TextEditingController _addressController = TextEditingController(); + final TextEditingController _emailController = TextEditingController(); + final TextEditingController _passwordController = TextEditingController(); @override void initState() { //初始化 super.initState(); + print('狀態:$_isEditing'); _fetchData(); } @@ -36,23 +41,20 @@ class _PersonalInfoState extends State { final conn = await MySQLConnection.createConnection( host: '203.64.84.154', - //host: '10.0.2.2', //127.0.0.1 10.0.2.2 port: 33061, userName: 'root', password: 'Topic@2024', - //password: '0000', - databaseName: 'care', //testdb - //databaseName: 'testdb', + databaseName: 'care', ); await conn.connect(); try { print('ok'); - var result = await conn.execute( - 'SELECT * FROM HomeLogin WHERE homeemail = :email', - {'email': widget.email}, // 傳入參數 email + print('狀態:$_isEditing'); + var result = await conn.execute('SELECT * FROM HomeLogin WHERE homeemail = :email', + {'email': widget.email}, // 傳入參數 email ); if (result.rows.isNotEmpty) { //有資料 @@ -75,7 +77,17 @@ class _PersonalInfoState extends State { void _toggleEdit() { setState(() { + if (!_isEditing) { + // 當進入編輯模式時,將當前的資料賦予控制器 + _nameController.text = _name; + _phoneController.text = _phone; + _genderController.text = _gender; + _addressController.text = _address; + _emailController.text = _email; + _passwordController.text = _password; + } _isEditing = !_isEditing; + print('編輯狀態:$_isEditing'); }); } @@ -92,17 +104,42 @@ class _PersonalInfoState extends State { try { await conn.execute( - 'UPDATE HomeLogin SET homeemail = :email WHERE homeemail = :old_email', - {'email': _emailController.text, 'old_email': widget.email}, + 'UPDATE HomeLogin SET homeName = :homeName, homePhone = :homePhone, homeGender = :homeGender, homeAddress = :homeAddress, homeEmail = :new_email, homePassword = :homePassword WHERE homeEmail = :old_email', + { + 'homeName':_nameController.text, + 'homePhone': _phoneController.text, + 'homeGender': _genderController.text, + 'homeAddress': _addressController.text, + 'new_email': _emailController.text, + 'old_email': widget.email, // 用戶的舊 email 作為查找條件 + 'homePassword': _passwordController.text, + }, ); setState(() { + _name = _nameController.text; + _phone = _phoneController.text; + _gender = _genderController.text; + _address = _addressController.text; _email = _emailController.text; + _password = _passwordController.text; + + // 清空控制器內容 + _nameController.clear(); + _phoneController.clear(); + _genderController.clear(); + _addressController.clear(); + _emailController.clear(); + _passwordController.clear(); + _isEditing = false; // 退出編輯 + print('儲存狀態:$_isEditing'); }); } catch (e) { print('Error: $e'); } finally { await conn.close(); + await conn.close(); + print('finally儲存更新狀態:$_isEditing'); } } @@ -120,6 +157,8 @@ class _PersonalInfoState extends State { )); } + //頁面 + //頁面 @override Widget build(BuildContext context) { @@ -132,7 +171,7 @@ class _PersonalInfoState extends State { children: [ Container( height: 100, - color: Color(0xFFF5E3C3), //背景底色 + color: Color(0xFFF5E3C3),//背景底色 width: double.infinity, padding: EdgeInsets.all(10.0), child: Center( @@ -148,82 +187,97 @@ class _PersonalInfoState extends State { children: [ ListTile( - title: Text( - '姓名', - style: TextStyle(fontSize: 20), - ), + title: Text('姓名',style: TextStyle(fontSize: 20),), subtitle: Text(_name), - //trailing: Icon(Icons.arrow_forward_ios),//> - onTap: () { - //點了之後 - }, ), Divider(), ListTile( title: Text('手機'), - subtitle: Text(_phone), - //trailing: Icon(Icons.arrow_forward_ios), - onTap: () {}, + subtitle: _isEditing + ? TextField( + controller: _phoneController, + onChanged: (value) { + setState(() { + _phone = value; + }); + }, + ) + : Text(_phone), ), Divider(), ListTile( title: Text('性別'), - subtitle: Text(_gender), - //trailing: Icon(Icons.arrow_forward_ios), - onTap: () {}, + subtitle: _isEditing + ? TextField( + controller: _genderController, + onChanged: (value) { + setState(() { + _gender = value; + }); + }, + ) + : Text(_gender), ), Divider(), ListTile( title: Text('地址'), - subtitle: Text(_address), - //trailing: Icon(Icons.arrow_forward_ios), - onTap: () {}, + subtitle: _isEditing + ? TextField( + controller: _addressController, + onChanged: (value) { + setState(() { + _address = value; + }); + }, + ) + : Text(_address), ), Divider(), ListTile( title: Text('電子信箱'), subtitle: _isEditing ? TextField( - controller: _emailController, - autofocus: true, - onChanged: (value) { - setState(() { - _email = value; - }); - }, - ) + controller: _emailController, + onChanged: (value) { + setState(() { + _email = value; + }); + }, + ) : Text(_email), - //trailing: Icon(Icons.arrow_forward_ios), - onTap: () { - _toggleEdit(); // 切換到編輯狀態 - }, ), Divider(), ListTile( title: Text('密碼'), - subtitle: Text(_password), - //trailing: Icon(Icons.arrow_forward_ios), - onTap: () { - }, + subtitle: _isEditing + ? TextField( + controller: _passwordController, + onChanged: (value) { + setState(() { + _password = value; + }); + }, + ) + : Text(_password), ), Divider(), - SizedBox( - height: 20, - width: 60, - ), + SizedBox(height: 20,width: 60,), ElevatedButton( - onPressed: () {}, - child: Text('修改資料'), + onPressed: () { + if (_isEditing) { + _saveChanges(); // 儲存變更 + } else { + _toggleEdit(); // 進入編輯模式 + } + }, + child: Text(_isEditing ? '儲存變更' : '修改資料'), style: TextButton.styleFrom( backgroundColor: Color(0xFFF5E3C3), // 無背景颜色 textStyle: TextStyle(fontSize: 18), shadowColor: Colors.transparent, // 去除陰影 ), ), - SizedBox( - height: 10, - width: 60, - ), + SizedBox(height: 10,width: 60,), ElevatedButton( onPressed: () { _loginOut();