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'; part 'card_bloc.freezed.dart';
class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> { class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
final String fieldId; final String groupFieldId;
final RowFFIService _rowService; final RowFFIService _rowService;
final CardDataController _dataController; final CardDataController _dataController;
BoardCardBloc({ BoardCardBloc({
required this.fieldId, required this.groupFieldId,
required String gridId, required String gridId,
required CardDataController dataController, required CardDataController dataController,
}) : _rowService = RowFFIService( }) : _rowService = RowFFIService(
@ -29,7 +29,7 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
super( super(
BoardCardState.initial( BoardCardState.initial(
dataController.rowPB, dataController.rowPB,
_makeCells(fieldId, dataController.loadData()), _makeCells(groupFieldId, dataController.loadData()),
), ),
) { ) {
on<BoardCardEvent>( on<BoardCardEvent>(
@ -69,7 +69,7 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
_dataController.addListener( _dataController.addListener(
onRowChanged: (cellMap, reason) { onRowChanged: (cellMap, reason) {
if (!isClosed) { if (!isClosed) {
final cells = _makeCells(fieldId, cellMap); final cells = _makeCells(groupFieldId, cellMap);
add(BoardCardEvent.didReceiveCells(cells, reason)); add(BoardCardEvent.didReceiveCells(cells, reason));
} }
}, },
@ -78,10 +78,11 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
} }
UnmodifiableListView<BoardCellEquatable> _makeCells( UnmodifiableListView<BoardCellEquatable> _makeCells(
String fieldId, GridCellMap originalCellMap) { String groupFieldId, GridCellMap originalCellMap) {
List<BoardCellEquatable> cells = []; List<BoardCellEquatable> cells = [];
for (final entry in originalCellMap.entries) { 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)); 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/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'define.dart';
class BoardDateCell extends StatefulWidget { class BoardDateCell extends StatefulWidget {
final String groupId; final String groupId;
final GridCellControllerBuilder cellControllerBuilder; final GridCellControllerBuilder cellControllerBuilder;
@ -44,10 +46,15 @@ class _BoardDateCellState extends State<BoardDateCell> {
} else { } else {
return Align( return Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: FlowyText.regular( child: Padding(
state.dateStr, padding: EdgeInsets.symmetric(
fontSize: 13, vertical: BoardSizes.cardCellVPadding,
color: context.read<AppTheme>().shader3, ),
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/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'define.dart';
class BoardNumberCell extends StatefulWidget { class BoardNumberCell extends StatefulWidget {
final String groupId; final String groupId;
final GridCellControllerBuilder cellControllerBuilder; final GridCellControllerBuilder cellControllerBuilder;
@ -43,9 +45,14 @@ class _BoardNumberCellState extends State<BoardNumberCell> {
} else { } else {
return Align( return Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: FlowyText.medium( child: Padding(
state.content, padding: EdgeInsets.symmetric(
fontSize: 14, 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/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'define.dart';
class BoardUrlCell extends StatefulWidget { class BoardUrlCell extends StatefulWidget {
final String groupId; final String groupId;
final GridCellControllerBuilder cellControllerBuilder; final GridCellControllerBuilder cellControllerBuilder;
@ -43,14 +45,19 @@ class _BoardUrlCellState extends State<BoardUrlCell> {
} else { } else {
return Align( return Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: RichText( child: Padding(
textAlign: TextAlign.left, padding: EdgeInsets.symmetric(
text: TextSpan( vertical: BoardSizes.cardCellVPadding,
text: state.content, ),
style: TextStyle( child: RichText(
color: theme.main2, textAlign: TextAlign.left,
fontSize: 14, text: TextSpan(
decoration: TextDecoration.underline, 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(); rowNotifier = EditableRowNotifier();
_cardBloc = BoardCardBloc( _cardBloc = BoardCardBloc(
gridId: widget.gridId, gridId: widget.gridId,
fieldId: widget.fieldId, groupFieldId: widget.fieldId,
dataController: widget.dataController, dataController: widget.dataController,
)..add(const BoardCardEvent.initial()); )..add(const BoardCardEvent.initial());
super.initState(); super.initState();
@ -56,7 +56,7 @@ class _BoardCardState extends State<BoardCard> {
value: _cardBloc, value: _cardBloc,
child: BlocBuilder<BoardCardBloc, BoardCardState>( child: BlocBuilder<BoardCardBloc, BoardCardState>(
buildWhen: (previous, current) { buildWhen: (previous, current) {
return previous.cells.length != current.cells.length; return previous.cells != current.cells;
}, },
builder: (context, state) { builder: (context, state) {
return BoardCardContainer( return BoardCardContainer(

View File

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

View File

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