[READ ONLY MIRROR] Open Source TikTok alternative built on AT Protocol github.com/sprksocial/client
flutter atproto video dart
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

Avoid showing import follow screen when no follows (#34)

authored by

Davi Rodrigues and committed by
GitHub
544ec55b 6585d646

+29 -12
+29 -12
lib/screens/onboarding_screen.dart
··· 32 32 super.initState(); 33 33 _displayNameController = TextEditingController(); 34 34 _descriptionController = TextEditingController(); 35 + _displayNameController.addListener(_onCredentialsChanged); 36 + _descriptionController.addListener(_onCredentialsChanged); 35 37 _loadBskyProfile(); 36 38 } 37 39 38 40 @override 39 41 void dispose() { 42 + _displayNameController.removeListener(_onCredentialsChanged); 43 + _descriptionController.removeListener(_onCredentialsChanged); 40 44 _displayNameController.dispose(); 41 45 _descriptionController.dispose(); 42 46 super.dispose(); 47 + } 48 + 49 + void _onCredentialsChanged() { 50 + setState(() {}); 43 51 } 44 52 45 53 Future<void> _loadBskyProfile() async { ··· 159 167 ? NetworkImage(avatarUrl) as ImageProvider<Object> 160 168 : null; 161 169 170 + final originalDisplayName = _bskyProfile?['value']?['displayName'] as String?; 171 + final originalDescription = _bskyProfile?['value']?['description'] as String?; 172 + 173 + final bool canUndoDisplayName = 174 + originalDisplayName != null && originalDisplayName.isNotEmpty && _displayNameController.text != originalDisplayName; 175 + 176 + final bool canUndoDescription = 177 + originalDescription != null && originalDescription.isNotEmpty && _descriptionController.text != originalDescription; 178 + 162 179 return Scaffold( 163 180 backgroundColor: backgroundColor, 164 181 appBar: AppBar( ··· 222 239 controller: _displayNameController, 223 240 hintText: 'Display Name', 224 241 fillColor: backgroundColor, 225 - onUndo: () { 226 - if (_bskyProfile != null) { 227 - final value = _bskyProfile!['value'] as Map<String, dynamic>?; 228 - setState(() => _displayNameController.text = value?['displayName'] as String? ?? ''); 229 - } 230 - }, 242 + onUndo: 243 + canUndoDisplayName 244 + ? () { 245 + setState(() => _displayNameController.text = originalDisplayName); 246 + } 247 + : null, 231 248 validator: (value) { 232 249 if (value == null || value.trim().isEmpty) return 'Display Name is required'; 233 250 return null; ··· 239 256 hintText: 'Bio', 240 257 fillColor: backgroundColor, 241 258 maxLines: 3, 242 - onUndo: () { 243 - if (_bskyProfile != null) { 244 - final value = _bskyProfile!['value'] as Map<String, dynamic>?; 245 - setState(() => _descriptionController.text = value?['description'] as String? ?? ''); 246 - } 247 - }, 259 + onUndo: 260 + canUndoDescription 261 + ? () { 262 + setState(() => _descriptionController.text = originalDescription); 263 + } 264 + : null, 248 265 ), 249 266 const SizedBox(height: 24), 250 267 Align(