Procházet zdrojové kódy

修改authProvider与userProvider数据同步

刘清 před 1 měsícem
rodič
revize
3ae7996e3f

+ 1
- 1
lib/presentation/navigation/bottom_nav_bar.dart Zobrazit soubor

@@ -73,7 +73,7 @@ class _BottomNavBarState extends State<BottomNavBar> {
73 73
         BottomNavigationBarItem(
74 74
           icon: Icon(Icons.newspaper_outlined),
75 75
           activeIcon: Icon(Icons.newspaper),
76
-          label: '资讯',
76
+          label: '推荐',
77 77
         ),
78 78
         BottomNavigationBarItem(
79 79
           icon: Icon(Icons.work_outline),

+ 5
- 0
lib/presentation/providers/auth_provider.dart Zobrazit soubor

@@ -112,4 +112,9 @@ class AuthProvider with ChangeNotifier {
112 112
     _error = null;
113 113
     notifyListeners();
114 114
   }
115
+
116
+  void updateUser(User? user) {
117
+    _user = user;
118
+    notifyListeners();
119
+  }
115 120
 }

+ 5
- 0
lib/presentation/providers/user_provider.dart Zobrazit soubor

@@ -59,4 +59,9 @@ class UserProvider with ChangeNotifier {
59 59
     _error = null;
60 60
     notifyListeners();
61 61
   }
62
+
63
+  void updateUser(User? user) {
64
+    _user = user;
65
+    notifyListeners();
66
+  }
62 67
 }

+ 5
- 0
lib/presentation/screens/auth/login_screen.dart Zobrazit soubor

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
2 2
 import 'package:provider/provider.dart';
3 3
 import '../../providers/auth_provider.dart';
4 4
 import '../../../core/constants/route_constants.dart';
5
+import '../../providers/user_provider.dart';
5 6
 import '../../widgets/common/app_button.dart';
6 7
 import '../../widgets/common/app_text_field.dart';
7 8
 import '../../widgets/common/loading_indicator.dart';
@@ -120,6 +121,10 @@ class _LoginScreenState extends State<LoginScreen> {
120 121
                           _passwordController.text,
121 122
                         );
122 123
                         if (authProvider.isAuthenticated) {
124
+                          // ✅ 同时更新 userProvider
125
+                          final userProvider = Provider.of<UserProvider>(context, listen: false);
126
+                          userProvider.updateUser(authProvider.user);
127
+
123 128
                           // widget.onSuccess?.call();
124 129
                           Navigator.of(context).pushReplacementNamed(RouteConstants.home);
125 130
                           // Navigator.of(context).pushNamedAndRemoveUntil(RouteConstants.home);

+ 1
- 1
lib/presentation/screens/home/home_screen.dart Zobrazit soubor

@@ -113,7 +113,7 @@ class HomeScreen extends StatelessWidget {
113 113
                 children: [
114 114
                   _buildFeatureCard(
115 115
                     icon: Icons.newspaper,
116
-                    title: '资讯',
116
+                    title: '推荐',
117 117
                     color: Colors.green,
118 118
                     onTap: () {
119 119
                       Navigator.of(context).pushNamed('/news');

+ 1
- 1
lib/presentation/screens/news/news_screen.dart Zobrazit soubor

@@ -8,7 +8,7 @@ class NewsScreen extends StatelessWidget {
8 8
   Widget build(BuildContext context) {
9 9
     return Scaffold(
10 10
       appBar: AppBar(
11
-        title: const Text('资讯'),
11
+        title: const Text('推荐'),
12 12
         actions: [
13 13
           IconButton(
14 14
             icon: const Icon(Icons.search),

+ 9
- 2
lib/presentation/screens/profile/profile_detail_screen.dart Zobrazit soubor

@@ -1,6 +1,7 @@
1 1
 import 'package:flutter/material.dart';
2 2
 import 'package:provider/provider.dart';
3 3
 import '../../../data/models/user.dart';
4
+import '../../providers/auth_provider.dart';
4 5
 import '../../providers/user_provider.dart';
5 6
 import '../../widgets/common/app_button.dart';
6 7
 import '../../widgets/common/app_text_field.dart';
@@ -24,7 +25,7 @@ class _ProfileDetailScreenState extends State<ProfileDetailScreen> {
24 25
     super.initState();
25 26
     final userProvider = Provider.of<UserProvider>(context, listen: false);
26 27
     _currentUser = userProvider.user ?? User(id: -1, email: '', username: '', createdAt: DateTime.now());
27
-    _nameController = TextEditingController(text: _currentUser.username);
28
+    _nameController = TextEditingController(text: _currentUser.fullName);
28 29
     _emailController = TextEditingController(text: _currentUser.email);
29 30
     _phoneController = TextEditingController(text: _currentUser.phone ?? '');
30 31
   }
@@ -183,13 +184,19 @@ class _ProfileDetailScreenState extends State<ProfileDetailScreen> {
183 184
                     
184 185
                     await userProvider.updateUserProfile(updatedUser);
185 186
                     
186
-                    if (userProvider.error == null) {
187
+                    if (userProvider.error == null && mounted) {
188
+                      // ✅ 同时更新 AuthProvider
189
+                      final authProvider = Provider.of<AuthProvider>(context, listen: false);
190
+                      authProvider.updateUser(userProvider.user);  // 使用接口返回的完整用户数据
191
+
187 192
                       ScaffoldMessenger.of(context).showSnackBar(
188 193
                         const SnackBar(
189 194
                           content: Text('个人信息已更新'),
190 195
                           duration: Duration(seconds: 2),
191 196
                         ),
192 197
                       );
198
+
199
+                      // ✅ 直接返回 - 数据已同步更新
193 200
                       Navigator.of(context).pop();
194 201
                     }
195 202
                   }

+ 16
- 18
lib/presentation/screens/profile/profile_screen.dart Zobrazit soubor

@@ -5,7 +5,6 @@ import '../../providers/auth_provider.dart';
5 5
 import '../../providers/user_provider.dart';
6 6
 import '../../navigation/bottom_nav_bar.dart';
7 7
 import 'profile_detail_screen.dart';
8
-import '../../widgets/custom/protected_widget.dart';
9 8
 
10 9
 class ProfileScreen extends StatelessWidget {
11 10
   const ProfileScreen({super.key});
@@ -23,19 +22,18 @@ class _ProfileContent extends StatefulWidget {
23 22
 }
24 23
 
25 24
 class _ProfileContentState extends State<_ProfileContent> {
26
-  @override
27
-  void initState() {
28
-    super.initState();
29
-    WidgetsBinding.instance.addPostFrameCallback((_) {
30
-      final userProvider = Provider.of<UserProvider>(context, listen: false);
31
-      userProvider.loadUserProfile();
32
-    });
33
-  }
25
+  // @override
26
+  // void initState() {
27
+  //   super.initState();
28
+  //   WidgetsBinding.instance.addPostFrameCallback((_) {
29
+  //     final userProvider = Provider.of<UserProvider>(context, listen: false);
30
+  //     userProvider.loadUserProfile();
31
+  //   });
32
+  // }
34 33
 
35 34
   @override
36 35
   Widget build(BuildContext context) {
37 36
     final authProvider = Provider.of<AuthProvider>(context);
38
-    // final userProvider = Provider.of<UserProvider>(context);
39 37
     
40 38
     return Scaffold(
41 39
       appBar: AppBar(
@@ -96,11 +94,11 @@ class _ProfileContentState extends State<_ProfileContent> {
96 94
                                   width: 2,
97 95
                                 ),
98 96
                               ),
99
-                              child: const Icon(
100
-                                Icons.edit,
101
-                                size: 16,
102
-                                color: Colors.white,
103
-                              ),
97
+                              // child: const Icon(
98
+                              //   Icons.edit,
99
+                              //   size: 16,
100
+                              //   color: Colors.white,
101
+                              // ),
104 102
                             ),
105 103
                           ),
106 104
                         ],
@@ -137,11 +135,11 @@ class _ProfileContentState extends State<_ProfileContent> {
137 135
                     Row(
138 136
                       mainAxisAlignment: MainAxisAlignment.center,
139 137
                       children: [
140
-                        _buildStatItem('关注', '128'),
138
+                        _buildStatItem('关注', '0'),
141 139
                         _buildVerticalDivider(),
142
-                        _buildStatItem('粉丝', '256'),
140
+                        _buildStatItem('粉丝', '0'),
143 141
                         _buildVerticalDivider(),
144
-                        _buildStatItem('积分', '1024'),
142
+                        _buildStatItem('积分', '0'),
145 143
                       ],
146 144
                     ),
147 145
                   ],