generated from dellevin/template
代码优化2
This commit is contained in:
@@ -53,7 +53,6 @@ class BookListItem extends StatelessWidget {
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
border: Border.all(color: colors.outline, width: 0.5),
|
||||
),
|
||||
clipBehavior: Clip.antiAlias,
|
||||
child: FadeInLocalImage(
|
||||
|
||||
@@ -28,13 +28,13 @@ class CustomBottomNavBar extends StatelessWidget {
|
||||
borderRadius: BorderRadius.circular(28),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.black.withOpacity(isDark ? 0.3 : 0.08),
|
||||
color: Colors.black.withValues(alpha: isDark ? 0.3 : 0.08),
|
||||
blurRadius: 20,
|
||||
offset: const Offset(0, 4),
|
||||
spreadRadius: 0,
|
||||
),
|
||||
BoxShadow(
|
||||
color: Colors.black.withOpacity(isDark ? 0.15 : 0.04),
|
||||
color: Colors.black.withValues(alpha: isDark ? 0.15 : 0.04),
|
||||
blurRadius: 8,
|
||||
offset: const Offset(0, 2),
|
||||
spreadRadius: -2,
|
||||
@@ -156,6 +156,7 @@ class CustomBottomNavBar extends StatelessWidget {
|
||||
|
||||
void _showAddDialog(BuildContext context, AppProvider provider) {
|
||||
final colors = Theme.of(context).colorScheme;
|
||||
final outerContext = context;
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
backgroundColor: colors.surface,
|
||||
@@ -209,7 +210,7 @@ class CustomBottomNavBar extends StatelessWidget {
|
||||
};
|
||||
final currentStatus = statusMap[provider.movieStatusIndex] ?? 'want_to_watch';
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
outerContext,
|
||||
'/movie-form',
|
||||
arguments: {'initialStatus': currentStatus},
|
||||
);
|
||||
@@ -229,7 +230,7 @@ class CustomBottomNavBar extends StatelessWidget {
|
||||
};
|
||||
final currentStatus = statusMap[provider.bookStatusIndex] ?? 'want_to_read';
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
outerContext,
|
||||
'/book-form',
|
||||
arguments: {'initialStatus': currentStatus},
|
||||
);
|
||||
@@ -242,7 +243,7 @@ class CustomBottomNavBar extends StatelessWidget {
|
||||
subtitle: '记录你的想法和笔记',
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
Navigator.pushNamed(context, '/note-form');
|
||||
Navigator.pushNamed(outerContext, '/note-form');
|
||||
},
|
||||
),
|
||||
],
|
||||
|
||||
@@ -53,7 +53,6 @@ class MovieListItem extends StatelessWidget {
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(color: colors.outline, width: 0.5),
|
||||
),
|
||||
clipBehavior: Clip.antiAlias,
|
||||
child: FadeInLocalImage(
|
||||
|
||||
@@ -39,7 +39,6 @@ class _NoteListItemContent extends StatelessWidget {
|
||||
decoration: BoxDecoration(
|
||||
color: colors.surfaceContainerHigh,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(color: colors.outlineVariant, width: 0.5),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -61,7 +60,6 @@ class _NoteListItemContent extends StatelessWidget {
|
||||
decoration: BoxDecoration(
|
||||
color: colors.surface,
|
||||
borderRadius: BorderRadius.circular(3),
|
||||
border: Border.all(color: colors.outlineVariant, width: 0.5),
|
||||
),
|
||||
child: Text(
|
||||
'MD',
|
||||
@@ -157,7 +155,6 @@ class _NoteListItemContent extends StatelessWidget {
|
||||
decoration: BoxDecoration(
|
||||
color: colors.surface,
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
border: Border.all(color: colors.outlineVariant, width: 0.5),
|
||||
),
|
||||
child: Text(
|
||||
tag,
|
||||
|
||||
@@ -56,6 +56,19 @@ class _NotePlusEditorState extends State<NotePlusEditor> {
|
||||
});
|
||||
}
|
||||
|
||||
/// 清理已删除 block 对应的控制器和焦点节点
|
||||
void _cleanupStaleEntries(List<NoteBlock> currentBlocks) {
|
||||
final currentIds = currentBlocks.map((b) => b.id).toSet();
|
||||
final staleIds = _controllers.keys.where((id) => !currentIds.contains(id)).toList();
|
||||
for (final id in staleIds) {
|
||||
_controllers.remove(id)?.dispose();
|
||||
}
|
||||
final staleFocusIds = _focusNodes.keys.where((id) => !currentIds.contains(id)).toList();
|
||||
for (final id in staleFocusIds) {
|
||||
_focusNodes.remove(id)?.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
void _onControllerChanged(NoteBlock block) {
|
||||
final provider = context.read<NotePlusProvider>();
|
||||
final idx = provider.blocks.indexWhere((b) => b.id == block.id);
|
||||
@@ -230,6 +243,9 @@ class _NotePlusEditorState extends State<NotePlusEditor> {
|
||||
builder: (context, provider, _) {
|
||||
final blocks = provider.blocks;
|
||||
|
||||
// 清理已删除 block 对应的控制器和焦点节点,防止内存泄漏
|
||||
_cleanupStaleEntries(blocks);
|
||||
|
||||
return ListView.builder(
|
||||
controller: _scrollController,
|
||||
itemCount: blocks.length,
|
||||
|
||||
Reference in New Issue
Block a user