fix: rebuild card when create new field from row detail page

This commit is contained in:
appflowy 2022-09-06 17:52:05 +08:00
parent 4a68020d67
commit 3ae28186e8
7 changed files with 48 additions and 25 deletions

View File

@ -13,12 +13,12 @@ import 'card_data_controller.dart';
part 'card_bloc.freezed.dart';
class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
final String fieldId;
final String groupFieldId;
final RowFFIService _rowService;
final CardDataController _dataController;
BoardCardBloc({
required this.fieldId,
required this.groupFieldId,
required String gridId,
required CardDataController dataController,
}) : _rowService = RowFFIService(
@ -29,7 +29,7 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
super(
BoardCardState.initial(
dataController.rowPB,
_makeCells(fieldId, dataController.loadData()),
_makeCells(groupFieldId, dataController.loadData()),
),
) {
on<BoardCardEvent>(
@ -69,7 +69,7 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
_dataController.addListener(
onRowChanged: (cellMap, reason) {
if (!isClosed) {
final cells = _makeCells(fieldId, cellMap);
final cells = _makeCells(groupFieldId, cellMap);
add(BoardCardEvent.didReceiveCells(cells, reason));
}
},
@ -78,10 +78,11 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
}
UnmodifiableListView<BoardCellEquatable> _makeCells(
String fieldId, GridCellMap originalCellMap) {
String groupFieldId, GridCellMap originalCellMap) {
List<BoardCellEquatable> cells = [];
for (final entry in originalCellMap.entries) {
if (entry.value.fieldId != fieldId) {
// Filter out the cell if it's fieldId equal to the groupFieldId
if (entry.value.fieldId != groupFieldId) {
cells.add(BoardCellEquatable(entry.value));
}
}

View File

@ -5,6 +5,8 @@ import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'define.dart';
class BoardDateCell extends StatefulWidget {
final String groupId;
final GridCellControllerBuilder cellControllerBuilder;
@ -44,10 +46,15 @@ class _BoardDateCellState extends State<BoardDateCell> {
} else {
return Align(
alignment: Alignment.centerLeft,
child: FlowyText.regular(
state.dateStr,
fontSize: 13,
color: context.read<AppTheme>().shader3,
child: Padding(
padding: EdgeInsets.symmetric(
vertical: BoardSizes.cardCellVPadding,
),
child: FlowyText.regular(
state.dateStr,
fontSize: 13,
color: context.read<AppTheme>().shader3,
),
),
);
}

View File

@ -4,6 +4,8 @@ import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'define.dart';
class BoardNumberCell extends StatefulWidget {
final String groupId;
final GridCellControllerBuilder cellControllerBuilder;
@ -43,9 +45,14 @@ class _BoardNumberCellState extends State<BoardNumberCell> {
} else {
return Align(
alignment: Alignment.centerLeft,
child: FlowyText.medium(
state.content,
fontSize: 14,
child: Padding(
padding: EdgeInsets.symmetric(
vertical: BoardSizes.cardCellVPadding,
),
child: FlowyText.medium(
state.content,
fontSize: 14,
),
),
);
}

View File

@ -4,6 +4,8 @@ import 'package:flowy_infra/theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'define.dart';
class BoardUrlCell extends StatefulWidget {
final String groupId;
final GridCellControllerBuilder cellControllerBuilder;
@ -43,14 +45,19 @@ class _BoardUrlCellState extends State<BoardUrlCell> {
} else {
return Align(
alignment: Alignment.centerLeft,
child: RichText(
textAlign: TextAlign.left,
text: TextSpan(
text: state.content,
style: TextStyle(
color: theme.main2,
fontSize: 14,
decoration: TextDecoration.underline,
child: Padding(
padding: EdgeInsets.symmetric(
vertical: BoardSizes.cardCellVPadding,
),
child: RichText(
textAlign: TextAlign.left,
text: TextSpan(
text: state.content,
style: TextStyle(
color: theme.main2,
fontSize: 14,
decoration: TextDecoration.underline,
),
),
),
),

View File

@ -44,7 +44,7 @@ class _BoardCardState extends State<BoardCard> {
rowNotifier = EditableRowNotifier();
_cardBloc = BoardCardBloc(
gridId: widget.gridId,
fieldId: widget.fieldId,
groupFieldId: widget.fieldId,
dataController: widget.dataController,
)..add(const BoardCardEvent.initial());
super.initState();
@ -56,7 +56,7 @@ class _BoardCardState extends State<BoardCard> {
value: _cardBloc,
child: BlocBuilder<BoardCardBloc, BoardCardState>(
buildWhen: (previous, current) {
return previous.cells.length != current.cells.length;
return previous.cells != current.cells;
},
builder: (context, state) {
return BoardCardContainer(

View File

@ -43,7 +43,8 @@ class _DateCellState extends GridCellState<GridDateCell> {
@override
void initState() {
final cellController = widget.cellControllerBuilder.build();
final cellController =
widget.cellControllerBuilder.build() as GridDateCellController;
_cellBloc = getIt<DateCellBloc>(param1: cellController)
..add(const DateCellEvent.initial());
super.initState();

View File

@ -243,7 +243,7 @@ where
let cell_data = cell_bytes.parser::<P>()?;
let mut changesets = self.add_row_if_match(row_rev, &cell_data);
let default_group_changeset = self.update_default_group(row_rev, &changesets);
tracing::info!("default_group_changeset: {}", default_group_changeset);
tracing::trace!("default_group_changeset: {}", default_group_changeset);
if !default_group_changeset.is_empty() {
changesets.push(default_group_changeset);
}