feat: mobile database settings rework (#4016)

* feat: mobile database settings rework

* chore: clean
This commit is contained in:
Mathias Mogensen
2023-11-27 06:36:10 +02:00
committed by GitHub
parent 929508df16
commit 771dd9979f
25 changed files with 1517 additions and 499 deletions

View File

@ -1,7 +1,6 @@
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/mobile/presentation/database/card/card_property_edit/mobile_field_editor.dart';
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
import 'package:appflowy_backend/protobuf/flowy-database2/field_entities.pb.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@ -53,10 +52,6 @@ class _MobileCreateRowFieldScreenState
),
body: MobileFieldEditor(
viewId: widget.viewId,
typeOptionLoader: FieldTypeOptionLoader(
viewId: widget.viewId,
field: widget.typeOption.field_2,
),
fieldController: widget.fieldController,
field: widget.typeOption.field_2,
),

View File

@ -4,7 +4,6 @@ import 'package:appflowy/mobile/presentation/database/card/card_property_edit/mo
import 'package:appflowy/mobile/presentation/widgets/show_flowy_mobile_confirm_dialog.dart';
import 'package:appflowy/plugins/database_view/application/cell/cell_service.dart';
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
import 'package:appflowy/plugins/database_view/grid/application/row/row_detail_bloc.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@ -57,10 +56,6 @@ class CardPropertyEditScreen extends StatelessWidget {
),
body: MobileFieldEditor(
viewId: cellContext.viewId,
typeOptionLoader: FieldTypeOptionLoader(
viewId: cellContext.viewId,
field: cellContext.fieldInfo.field,
),
fieldController: fieldController,
field: cellContext.fieldInfo.field,
),

View File

@ -6,6 +6,9 @@ import 'package:appflowy/plugins/database_view/application/field/field_controlle
import 'package:appflowy/plugins/database_view/application/field/field_editor_bloc.dart';
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
import 'package:appflowy/plugins/database_view/grid/application/row/row_detail_bloc.dart';
import 'package:appflowy/plugins/database_view/widgets/setting/field_visibility_extension.dart';
import 'package:appflowy/workspace/presentation/widgets/toggle/toggle.dart';
import 'package:appflowy/workspace/presentation/widgets/toggle/toggle_style.dart';
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/widget/spacing.dart';
@ -17,18 +20,21 @@ class MobileFieldEditor extends StatelessWidget {
const MobileFieldEditor({
super.key,
required this.viewId,
required this.typeOptionLoader,
required this.field,
required this.fieldController,
});
final String viewId;
final FieldController fieldController;
final FieldTypeOptionLoader typeOptionLoader;
final FieldPB field;
@override
Widget build(BuildContext context) {
final typeOptionLoader = FieldTypeOptionLoader(
viewId: viewId,
field: field,
);
return BlocProvider(
create: (context) {
return FieldEditorBloc(
@ -49,42 +55,35 @@ class MobileFieldEditor extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// field name
// TODO(yijing): improve hint text
PropertyTitle(LocaleKeys.settings_user_name.tr()),
BlocSelector<FieldEditorBloc, FieldEditorState, String>(
selector: (state) => state.field.name,
builder: (context, fieldName) {
return MobileFieldNameTextField(
text: fieldName,
);
},
builder: (context, fieldName) =>
MobileFieldNameTextField(text: fieldName),
),
Row(
children: [
Expanded(
child:
PropertyTitle(LocaleKeys.grid_field_visibility.tr()),
child: PropertyTitle(
LocaleKeys.grid_field_visibility.tr(),
),
),
VisibilitySwitch(
isFieldHidden: state.field.visibility ==
FieldVisibility.AlwaysHidden,
onChanged: () {
context.read<RowDetailBloc>().add(
RowDetailEvent.toggleFieldVisibility(
state.field.id,
),
);
},
isVisible:
state.field.visibility?.isVisibleState() ?? false,
onChanged: () => context.read<RowDetailBloc>().add(
RowDetailEvent.toggleFieldVisibility(
state.field.id,
),
),
),
],
),
const VSpace(8),
// edit property type and settings
if (!typeOptionLoader.field.isPrimary)
MobileFieldTypeOptionEditor(
dataController: dataController,
),
MobileFieldTypeOptionEditor(dataController: dataController),
],
),
);
@ -97,11 +96,11 @@ class MobileFieldEditor extends StatelessWidget {
class VisibilitySwitch extends StatefulWidget {
const VisibilitySwitch({
super.key,
required this.isFieldHidden,
required this.isVisible,
this.onChanged,
});
final bool isFieldHidden;
final bool isVisible;
final Function? onChanged;
@override
@ -109,18 +108,17 @@ class VisibilitySwitch extends StatefulWidget {
}
class _VisibilitySwitchState extends State<VisibilitySwitch> {
late bool _isFieldHidden = widget.isFieldHidden;
late bool _isVisible = widget.isVisible;
@override
Widget build(BuildContext context) {
return Switch.adaptive(
activeColor: Theme.of(context).colorScheme.primary,
value: !_isFieldHidden,
onChanged: (bool value) {
setState(() {
_isFieldHidden = !_isFieldHidden;
widget.onChanged?.call();
});
return Toggle(
padding: EdgeInsets.zero,
value: _isVisible,
style: ToggleStyle.mobile,
onChanged: (newValue) {
widget.onChanged?.call();
setState(() => _isVisible = newValue);
},
);
}