mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: grid width update (#4101)
* chore: enable checklist on mobile * fix: width of grid not updating properly * chore: fix sign-in button color and font
This commit is contained in:
@ -16,7 +16,7 @@ const _supportedFieldTypes = [
|
|||||||
FieldType.MultiSelect,
|
FieldType.MultiSelect,
|
||||||
FieldType.DateTime,
|
FieldType.DateTime,
|
||||||
FieldType.Checkbox,
|
FieldType.Checkbox,
|
||||||
// FieldType.Checklist,
|
FieldType.Checklist,
|
||||||
];
|
];
|
||||||
|
|
||||||
class FieldOptions extends StatelessWidget {
|
class FieldOptions extends StatelessWidget {
|
||||||
|
@ -57,7 +57,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
|
|||||||
didReceiveFieldUpdate: (fields) {
|
didReceiveFieldUpdate: (fields) {
|
||||||
emit(
|
emit(
|
||||||
state.copyWith(
|
state.copyWith(
|
||||||
fields: FieldList(fields),
|
fields: fields,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -176,7 +176,7 @@ class GridState with _$GridState {
|
|||||||
const factory GridState({
|
const factory GridState({
|
||||||
required String viewId,
|
required String viewId,
|
||||||
required Option<DatabasePB> grid,
|
required Option<DatabasePB> grid,
|
||||||
required FieldList fields,
|
required List<FieldInfo> fields,
|
||||||
required List<RowInfo> rowInfos,
|
required List<RowInfo> rowInfos,
|
||||||
required int rowCount,
|
required int rowCount,
|
||||||
required RowMetaPB? createdRow,
|
required RowMetaPB? createdRow,
|
||||||
@ -188,7 +188,7 @@ class GridState with _$GridState {
|
|||||||
}) = _GridState;
|
}) = _GridState;
|
||||||
|
|
||||||
factory GridState.initial(String viewId) => GridState(
|
factory GridState.initial(String viewId) => GridState(
|
||||||
fields: FieldList([]),
|
fields: [],
|
||||||
rowInfos: [],
|
rowInfos: [],
|
||||||
rowCount: 0,
|
rowCount: 0,
|
||||||
createdRow: null,
|
createdRow: null,
|
||||||
@ -201,8 +201,3 @@ class GridState with _$GridState {
|
|||||||
sorts: [],
|
sorts: [],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@freezed
|
|
||||||
class FieldList with _$FieldList {
|
|
||||||
factory FieldList(List<FieldInfo> fields) = _FieldList;
|
|
||||||
}
|
|
||||||
|
@ -169,25 +169,17 @@ class _GridPageContentState extends State<GridPageContent> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BlocBuilder<GridBloc, GridState>(
|
|
||||||
buildWhen: (previous, current) => previous.fields != current.fields,
|
|
||||||
builder: (context, state) {
|
|
||||||
final contentWidth = GridLayout.headerWidth(state.fields.fields);
|
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
_GridHeader(headerScrollController: headerScrollController),
|
_GridHeader(headerScrollController: headerScrollController),
|
||||||
_GridRows(
|
_GridRows(
|
||||||
viewId: state.viewId,
|
viewId: widget.view.id,
|
||||||
contentWidth: contentWidth,
|
|
||||||
scrollController: _scrollController,
|
scrollController: _scrollController,
|
||||||
),
|
),
|
||||||
const _GridFooter(),
|
const _GridFooter(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,21 +202,22 @@ class _GridHeader extends StatelessWidget {
|
|||||||
|
|
||||||
class _GridRows extends StatelessWidget {
|
class _GridRows extends StatelessWidget {
|
||||||
final String viewId;
|
final String viewId;
|
||||||
final double contentWidth;
|
|
||||||
final GridScrollController scrollController;
|
final GridScrollController scrollController;
|
||||||
|
|
||||||
const _GridRows({
|
const _GridRows({
|
||||||
required this.viewId,
|
required this.viewId,
|
||||||
required this.contentWidth,
|
|
||||||
required this.scrollController,
|
required this.scrollController,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
return BlocBuilder<GridBloc, GridState>(
|
||||||
|
buildWhen: (previous, current) => previous.fields != current.fields,
|
||||||
|
builder: (context, state) {
|
||||||
return Flexible(
|
return Flexible(
|
||||||
child: _WrapScrollView(
|
child: _WrapScrollView(
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
contentWidth: contentWidth,
|
contentWidth: GridLayout.headerWidth(state.fields),
|
||||||
child: BlocBuilder<GridBloc, GridState>(
|
child: BlocBuilder<GridBloc, GridState>(
|
||||||
buildWhen: (previous, current) => current.reason.maybeWhen(
|
buildWhen: (previous, current) => current.reason.maybeWhen(
|
||||||
reorderRows: () => true,
|
reorderRows: () => true,
|
||||||
@ -246,6 +239,8 @@ class _GridRows extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _renderList(
|
Widget _renderList(
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
|
import 'package:appflowy_backend/protobuf/flowy-database2/field_settings_entities.pbenum.dart';
|
||||||
import 'sizes.dart';
|
import 'sizes.dart';
|
||||||
|
|
||||||
class GridLayout {
|
class GridLayout {
|
||||||
@ -6,6 +7,11 @@ class GridLayout {
|
|||||||
if (fields.isEmpty) return 0;
|
if (fields.isEmpty) return 0;
|
||||||
|
|
||||||
final fieldsWidth = fields
|
final fieldsWidth = fields
|
||||||
|
.where(
|
||||||
|
(element) =>
|
||||||
|
element.visibility != null &&
|
||||||
|
element.visibility != FieldVisibility.AlwaysHidden,
|
||||||
|
)
|
||||||
.map((fieldInfo) => fieldInfo.fieldSettings!.width.toDouble())
|
.map((fieldInfo) => fieldInfo.fieldSettings!.width.toDouble())
|
||||||
.reduce((value, element) => value + element);
|
.reduce((value, element) => value + element);
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ class _GridPageContentState extends State<GridPageContent> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BlocConsumer<GridBloc, GridState>(
|
return BlocListener<GridBloc, GridState>(
|
||||||
listenWhen: (previous, current) =>
|
listenWhen: (previous, current) =>
|
||||||
previous.createdRow != current.createdRow,
|
previous.createdRow != current.createdRow,
|
||||||
listener: (context, state) {
|
listener: (context, state) {
|
||||||
@ -165,25 +165,19 @@ class _GridPageContentState extends State<GridPageContent> {
|
|||||||
);
|
);
|
||||||
bloc.add(const GridEvent.resetCreatedRow());
|
bloc.add(const GridEvent.resetCreatedRow());
|
||||||
},
|
},
|
||||||
buildWhen: (previous, current) => previous.fields != current.fields,
|
child: Stack(
|
||||||
builder: (context, state) {
|
|
||||||
final contentWidth = GridLayout.headerWidth(state.fields.fields);
|
|
||||||
|
|
||||||
return Stack(
|
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding:
|
padding: EdgeInsets.only(right: GridSize.leadingHeaderPadding),
|
||||||
EdgeInsets.only(right: GridSize.leadingHeaderPadding),
|
|
||||||
child: _GridHeader(
|
child: _GridHeader(
|
||||||
headerScrollController: headerScrollController,
|
headerScrollController: headerScrollController,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
_GridRows(
|
_GridRows(
|
||||||
viewId: state.viewId,
|
viewId: widget.view.id,
|
||||||
contentWidth: contentWidth,
|
|
||||||
scrollController: _scrollController,
|
scrollController: _scrollController,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -194,8 +188,7 @@ class _GridPageContentState extends State<GridPageContent> {
|
|||||||
child: getGridFabs(context),
|
child: getGridFabs(context),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
),
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,17 +212,19 @@ class _GridHeader extends StatelessWidget {
|
|||||||
|
|
||||||
class _GridRows extends StatelessWidget {
|
class _GridRows extends StatelessWidget {
|
||||||
final String viewId;
|
final String viewId;
|
||||||
final double contentWidth;
|
|
||||||
final GridScrollController scrollController;
|
final GridScrollController scrollController;
|
||||||
|
|
||||||
const _GridRows({
|
const _GridRows({
|
||||||
required this.viewId,
|
required this.viewId,
|
||||||
required this.contentWidth,
|
|
||||||
required this.scrollController,
|
required this.scrollController,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
return BlocBuilder<GridBloc, GridState>(
|
||||||
|
buildWhen: (previous, current) => previous.fields != current.fields,
|
||||||
|
builder: (context, state) {
|
||||||
|
final contentWidth = GridLayout.headerWidth(state.fields);
|
||||||
return Expanded(
|
return Expanded(
|
||||||
child: _WrapScrollView(
|
child: _WrapScrollView(
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
@ -250,16 +245,19 @@ class _GridRows extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
return ScrollConfiguration(
|
return ScrollConfiguration(
|
||||||
behavior: behavior,
|
behavior: behavior,
|
||||||
child: _renderList(context, state, rowInfos),
|
child: _renderList(context, contentWidth, state, rowInfos),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _renderList(
|
Widget _renderList(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
|
double contentWidth,
|
||||||
GridState state,
|
GridState state,
|
||||||
List<RowInfo> rowInfos,
|
List<RowInfo> rowInfos,
|
||||||
) {
|
) {
|
||||||
|
@ -46,19 +46,13 @@ class _GridHeaderSliverAdaptorState extends State<GridHeaderSliverAdaptor> {
|
|||||||
fieldController: fieldController,
|
fieldController: fieldController,
|
||||||
)..add(const GridHeaderEvent.initial());
|
)..add(const GridHeaderEvent.initial());
|
||||||
},
|
},
|
||||||
child: BlocBuilder<GridHeaderBloc, GridHeaderState>(
|
child: SingleChildScrollView(
|
||||||
buildWhen: (previous, current) =>
|
|
||||||
previous.fields.length != current.fields.length,
|
|
||||||
builder: (context, state) {
|
|
||||||
return SingleChildScrollView(
|
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
controller: widget.anchorScrollController,
|
controller: widget.anchorScrollController,
|
||||||
child: _GridHeader(
|
child: _GridHeader(
|
||||||
viewId: widget.viewId,
|
viewId: widget.viewId,
|
||||||
fieldController: fieldController,
|
fieldController: fieldController,
|
||||||
),
|
),
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -47,12 +47,7 @@ class _MobileChecklistCellEditScreenState
|
|||||||
child: _buildHeader(context),
|
child: _buildHeader(context),
|
||||||
),
|
),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
const Expanded(
|
const Expanded(child: _TaskList()),
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsets.symmetric(horizontal: 0.0),
|
|
||||||
child: _TaskList(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -169,7 +164,7 @@ class _ChecklistItemState extends State<_ChecklistItem> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
padding: const EdgeInsets.only(left: 5, right: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
height: 44,
|
height: 44,
|
||||||
child: Row(
|
child: Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
@ -55,7 +55,11 @@ class SignInAnonymousButton extends StatelessWidget {
|
|||||||
minimumSize: const Size(double.infinity, 56),
|
minimumSize: const Size(double.infinity, 56),
|
||||||
),
|
),
|
||||||
onPressed: onTap,
|
onPressed: onTap,
|
||||||
child: Text(LocaleKeys.signIn_loginStartWithAnonymous.tr()),
|
child: FlowyText(
|
||||||
|
LocaleKeys.signIn_loginStartWithAnonymous.tr(),
|
||||||
|
fontSize: 14,
|
||||||
|
color: Theme.of(context).colorScheme.onPrimary,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// SignInAnonymousButton in desktop
|
// SignInAnonymousButton in desktop
|
||||||
|
@ -62,7 +62,7 @@ class MobileAppearance extends BaseAppearance {
|
|||||||
: ColorScheme(
|
: ColorScheme(
|
||||||
brightness: brightness,
|
brightness: brightness,
|
||||||
primary: _primaryColor,
|
primary: _primaryColor,
|
||||||
onPrimary: Colors.white,
|
onPrimary: Colors.black,
|
||||||
// TODO(yijing): add color later
|
// TODO(yijing): add color later
|
||||||
secondary: const Color(0xff2d2d2d), //temp
|
secondary: const Color(0xff2d2d2d), //temp
|
||||||
onSecondary: Colors.white,
|
onSecondary: Colors.white,
|
||||||
@ -125,7 +125,7 @@ class MobileAppearance extends BaseAppearance {
|
|||||||
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
||||||
(Set<MaterialState> states) {
|
(Set<MaterialState> states) {
|
||||||
if (states.contains(MaterialState.disabled)) {
|
if (states.contains(MaterialState.disabled)) {
|
||||||
return const Color(0xFF57B5F8);
|
return _primaryColor;
|
||||||
}
|
}
|
||||||
return colorTheme.primary;
|
return colorTheme.primary;
|
||||||
},
|
},
|
||||||
@ -176,7 +176,7 @@ class MobileAppearance extends BaseAppearance {
|
|||||||
fontFamily: fontStyle.fontFamily,
|
fontFamily: fontStyle.fontFamily,
|
||||||
textTheme: TextTheme(
|
textTheme: TextTheme(
|
||||||
displayLarge: const TextStyle(
|
displayLarge: const TextStyle(
|
||||||
color: Color(0xFF57B5F8),
|
color: _primaryColor,
|
||||||
fontSize: 32,
|
fontSize: 32,
|
||||||
fontWeight: FontWeight.w700,
|
fontWeight: FontWeight.w700,
|
||||||
height: 1.20,
|
height: 1.20,
|
||||||
|
Reference in New Issue
Block a user