Dashboard overview
This commit is contained in:
parent
d9246376bd
commit
c6b08a6d00
|
|
@ -1011,6 +1011,8 @@ abstract class UserSettingsEntity
|
|||
period: DashboardUISettings.PERIOD_CURRENT,
|
||||
),
|
||||
]),
|
||||
dashboardFieldsPerRowMobile: 1,
|
||||
dashboardFieldsPerRowDesktop: 2,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -1039,6 +1041,12 @@ abstract class UserSettingsEntity
|
|||
@BuiltValueField(wireName: 'dashboard_fields')
|
||||
BuiltList<DashboardField> get dashboardFields;
|
||||
|
||||
@BuiltValueField(wireName: 'dashboard_fields_per_row_mobile')
|
||||
int get dashboardFieldsPerRowMobile;
|
||||
|
||||
@BuiltValueField(wireName: 'dashboard_fields_per_row_desktop')
|
||||
int get dashboardFieldsPerRowDesktop;
|
||||
|
||||
List<String> getTableColumns(EntityType entityType) {
|
||||
if (tableColumns != null && tableColumns.containsKey('$entityType')) {
|
||||
return tableColumns['$entityType'].toList();
|
||||
|
|
@ -1063,6 +1071,8 @@ abstract class UserSettingsEntity
|
|||
period: DashboardUISettings.PERIOD_CURRENT,
|
||||
),
|
||||
]))
|
||||
..dashboardFieldsPerRowMobile = 1
|
||||
..dashboardFieldsPerRowDesktop = 2
|
||||
..includeDeletedClients = false;
|
||||
|
||||
static Serializer<UserSettingsEntity> get serializer =>
|
||||
|
|
|
|||
|
|
@ -1186,6 +1186,12 @@ class _$UserSettingsEntitySerializer
|
|||
serializers.serialize(object.dashboardFields,
|
||||
specifiedType: const FullType(
|
||||
BuiltList, const [const FullType(DashboardField)])),
|
||||
'dashboard_fields_per_row_mobile',
|
||||
serializers.serialize(object.dashboardFieldsPerRowMobile,
|
||||
specifiedType: const FullType(int)),
|
||||
'dashboard_fields_per_row_desktop',
|
||||
serializers.serialize(object.dashboardFieldsPerRowDesktop,
|
||||
specifiedType: const FullType(int)),
|
||||
];
|
||||
Object value;
|
||||
value = object.accentColor;
|
||||
|
|
@ -1242,6 +1248,14 @@ class _$UserSettingsEntitySerializer
|
|||
BuiltList, const [const FullType(DashboardField)]))
|
||||
as BuiltList<Object>);
|
||||
break;
|
||||
case 'dashboard_fields_per_row_mobile':
|
||||
result.dashboardFieldsPerRowMobile = serializers.deserialize(value,
|
||||
specifiedType: const FullType(int)) as int;
|
||||
break;
|
||||
case 'dashboard_fields_per_row_desktop':
|
||||
result.dashboardFieldsPerRowDesktop = serializers.deserialize(value,
|
||||
specifiedType: const FullType(int)) as int;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3623,6 +3637,10 @@ class _$UserSettingsEntity extends UserSettingsEntity {
|
|||
final bool includeDeletedClients;
|
||||
@override
|
||||
final BuiltList<DashboardField> dashboardFields;
|
||||
@override
|
||||
final int dashboardFieldsPerRowMobile;
|
||||
@override
|
||||
final int dashboardFieldsPerRowDesktop;
|
||||
|
||||
factory _$UserSettingsEntity(
|
||||
[void Function(UserSettingsEntityBuilder) updates]) =>
|
||||
|
|
@ -3634,7 +3652,9 @@ class _$UserSettingsEntity extends UserSettingsEntity {
|
|||
this.reportSettings,
|
||||
this.numberYearsActive,
|
||||
this.includeDeletedClients,
|
||||
this.dashboardFields})
|
||||
this.dashboardFields,
|
||||
this.dashboardFieldsPerRowMobile,
|
||||
this.dashboardFieldsPerRowDesktop})
|
||||
: super._() {
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
tableColumns, 'UserSettingsEntity', 'tableColumns');
|
||||
|
|
@ -3646,6 +3666,10 @@ class _$UserSettingsEntity extends UserSettingsEntity {
|
|||
includeDeletedClients, 'UserSettingsEntity', 'includeDeletedClients');
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
dashboardFields, 'UserSettingsEntity', 'dashboardFields');
|
||||
BuiltValueNullFieldError.checkNotNull(dashboardFieldsPerRowMobile,
|
||||
'UserSettingsEntity', 'dashboardFieldsPerRowMobile');
|
||||
BuiltValueNullFieldError.checkNotNull(dashboardFieldsPerRowDesktop,
|
||||
'UserSettingsEntity', 'dashboardFieldsPerRowDesktop');
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -3666,7 +3690,9 @@ class _$UserSettingsEntity extends UserSettingsEntity {
|
|||
reportSettings == other.reportSettings &&
|
||||
numberYearsActive == other.numberYearsActive &&
|
||||
includeDeletedClients == other.includeDeletedClients &&
|
||||
dashboardFields == other.dashboardFields;
|
||||
dashboardFields == other.dashboardFields &&
|
||||
dashboardFieldsPerRowMobile == other.dashboardFieldsPerRowMobile &&
|
||||
dashboardFieldsPerRowDesktop == other.dashboardFieldsPerRowDesktop;
|
||||
}
|
||||
|
||||
int __hashCode;
|
||||
|
|
@ -3675,11 +3701,17 @@ class _$UserSettingsEntity extends UserSettingsEntity {
|
|||
return __hashCode ??= $jf($jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc($jc($jc(0, accentColor.hashCode), tableColumns.hashCode),
|
||||
reportSettings.hashCode),
|
||||
numberYearsActive.hashCode),
|
||||
includeDeletedClients.hashCode),
|
||||
dashboardFields.hashCode));
|
||||
$jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc($jc(0, accentColor.hashCode),
|
||||
tableColumns.hashCode),
|
||||
reportSettings.hashCode),
|
||||
numberYearsActive.hashCode),
|
||||
includeDeletedClients.hashCode),
|
||||
dashboardFields.hashCode),
|
||||
dashboardFieldsPerRowMobile.hashCode),
|
||||
dashboardFieldsPerRowDesktop.hashCode));
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -3690,7 +3722,9 @@ class _$UserSettingsEntity extends UserSettingsEntity {
|
|||
..add('reportSettings', reportSettings)
|
||||
..add('numberYearsActive', numberYearsActive)
|
||||
..add('includeDeletedClients', includeDeletedClients)
|
||||
..add('dashboardFields', dashboardFields))
|
||||
..add('dashboardFields', dashboardFields)
|
||||
..add('dashboardFieldsPerRowMobile', dashboardFieldsPerRowMobile)
|
||||
..add('dashboardFieldsPerRowDesktop', dashboardFieldsPerRowDesktop))
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -3731,6 +3765,16 @@ class UserSettingsEntityBuilder
|
|||
set dashboardFields(ListBuilder<DashboardField> dashboardFields) =>
|
||||
_$this._dashboardFields = dashboardFields;
|
||||
|
||||
int _dashboardFieldsPerRowMobile;
|
||||
int get dashboardFieldsPerRowMobile => _$this._dashboardFieldsPerRowMobile;
|
||||
set dashboardFieldsPerRowMobile(int dashboardFieldsPerRowMobile) =>
|
||||
_$this._dashboardFieldsPerRowMobile = dashboardFieldsPerRowMobile;
|
||||
|
||||
int _dashboardFieldsPerRowDesktop;
|
||||
int get dashboardFieldsPerRowDesktop => _$this._dashboardFieldsPerRowDesktop;
|
||||
set dashboardFieldsPerRowDesktop(int dashboardFieldsPerRowDesktop) =>
|
||||
_$this._dashboardFieldsPerRowDesktop = dashboardFieldsPerRowDesktop;
|
||||
|
||||
UserSettingsEntityBuilder() {
|
||||
UserSettingsEntity._initializeBuilder(this);
|
||||
}
|
||||
|
|
@ -3744,6 +3788,8 @@ class UserSettingsEntityBuilder
|
|||
_numberYearsActive = $v.numberYearsActive;
|
||||
_includeDeletedClients = $v.includeDeletedClients;
|
||||
_dashboardFields = $v.dashboardFields.toBuilder();
|
||||
_dashboardFieldsPerRowMobile = $v.dashboardFieldsPerRowMobile;
|
||||
_dashboardFieldsPerRowDesktop = $v.dashboardFieldsPerRowDesktop;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
|
|
@ -3775,7 +3821,17 @@ class UserSettingsEntityBuilder
|
|||
includeDeletedClients,
|
||||
'UserSettingsEntity',
|
||||
'includeDeletedClients'),
|
||||
dashboardFields: dashboardFields.build());
|
||||
dashboardFields: dashboardFields.build(),
|
||||
dashboardFieldsPerRowMobile:
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
dashboardFieldsPerRowMobile,
|
||||
'UserSettingsEntity',
|
||||
'dashboardFieldsPerRowMobile'),
|
||||
dashboardFieldsPerRowDesktop:
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
dashboardFieldsPerRowDesktop,
|
||||
'UserSettingsEntity',
|
||||
'dashboardFieldsPerRowDesktop'));
|
||||
} catch (_) {
|
||||
String _$failedField;
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -143,6 +143,21 @@ Reducer<UserCompanyEntity> userCompanyEntityReducer = combineReducers([
|
|||
(userCompany, action) => userCompany.rebuild(
|
||||
(b) => b..settings.dashboardFields.replace(action.dashboardFields)),
|
||||
),
|
||||
TypedReducer<UserCompanyEntity, UpdateDashboardFieldSettingss>(
|
||||
(userCompany, action) {
|
||||
if (action.numberFieldsPerRowDesktop != null) {
|
||||
return userCompany.rebuild((b) => b
|
||||
..settings.dashboardFieldsPerRowDesktop =
|
||||
action.numberFieldsPerRowDesktop);
|
||||
} else if (action.numberFieldsPerRowDesktop != null) {
|
||||
return userCompany.rebuild((b) => b
|
||||
..settings.dashboardFieldsPerRowMobile =
|
||||
action.numberFieldsPerRowMobile);
|
||||
}
|
||||
|
||||
return userCompany;
|
||||
},
|
||||
),
|
||||
]);
|
||||
|
||||
UserCompanyEntity loadCompanySuccessReducer(
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ class UpdateDashboardSettings implements PersistUI {
|
|||
this.currencyId,
|
||||
this.includeTaxes,
|
||||
this.groupBy,
|
||||
this.numberFieldsPerRow,
|
||||
});
|
||||
|
||||
DashboardSettings settings;
|
||||
|
|
@ -30,7 +29,6 @@ class UpdateDashboardSettings implements PersistUI {
|
|||
String currencyId;
|
||||
bool includeTaxes;
|
||||
String groupBy;
|
||||
final int numberFieldsPerRow;
|
||||
}
|
||||
|
||||
class UpdateDashboardFields implements PersistUI {
|
||||
|
|
@ -41,6 +39,16 @@ class UpdateDashboardFields implements PersistUI {
|
|||
BuiltList<DashboardField> dashboardFields;
|
||||
}
|
||||
|
||||
class UpdateDashboardFieldSettingss implements PersistUI {
|
||||
UpdateDashboardFieldSettingss({
|
||||
this.numberFieldsPerRowMobile,
|
||||
this.numberFieldsPerRowDesktop,
|
||||
});
|
||||
|
||||
final int numberFieldsPerRowMobile;
|
||||
final int numberFieldsPerRowDesktop;
|
||||
}
|
||||
|
||||
class UpdateDashboardSelection implements PersistUI {
|
||||
UpdateDashboardSelection({
|
||||
this.entityType,
|
||||
|
|
|
|||
|
|
@ -65,9 +65,6 @@ DashboardUISettings dashboardSettingsReducer(
|
|||
return state.rebuild((b) => b..currencyId = action.currencyId);
|
||||
} else if (action.groupBy != null) {
|
||||
return state.rebuild((b) => b..groupBy = action.groupBy);
|
||||
} else if (action.numberFieldsPerRow != null) {
|
||||
return state
|
||||
.rebuild((b) => b..numberFieldsPerRow = action.numberFieldsPerRow);
|
||||
}
|
||||
} else if (action is SelectCompany) {
|
||||
//return state.rebuild((b) => b..currencyId = action.company.currencyId);
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ abstract class DashboardUISettings
|
|||
currencyId: kCurrencyAll,
|
||||
includeTaxes: true,
|
||||
groupBy: kReportGroupDay,
|
||||
numberFieldsPerRow: 2,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -108,8 +107,6 @@ abstract class DashboardUISettings
|
|||
|
||||
String get groupBy;
|
||||
|
||||
int get numberFieldsPerRow;
|
||||
|
||||
bool matchesCurrency(String match) {
|
||||
if (currencyId == null ||
|
||||
currencyId.isEmpty ||
|
||||
|
|
@ -141,9 +138,8 @@ abstract class DashboardUISettings
|
|||
}
|
||||
|
||||
// ignore: unused_element
|
||||
static void _initializeBuilder(DashboardUISettingsBuilder builder) => builder
|
||||
..groupBy = kReportGroupDay
|
||||
..numberFieldsPerRow = 2;
|
||||
static void _initializeBuilder(DashboardUISettingsBuilder builder) =>
|
||||
builder..groupBy = kReportGroupDay;
|
||||
|
||||
static Serializer<DashboardUISettings> get serializer =>
|
||||
_$dashboardUISettingsSerializer;
|
||||
|
|
|
|||
|
|
@ -128,9 +128,6 @@ class _$DashboardUISettingsSerializer
|
|||
'groupBy',
|
||||
serializers.serialize(object.groupBy,
|
||||
specifiedType: const FullType(String)),
|
||||
'numberFieldsPerRow',
|
||||
serializers.serialize(object.numberFieldsPerRow,
|
||||
specifiedType: const FullType(int)),
|
||||
];
|
||||
|
||||
return result;
|
||||
|
|
@ -193,10 +190,6 @@ class _$DashboardUISettingsSerializer
|
|||
result.groupBy = serializers.deserialize(value,
|
||||
specifiedType: const FullType(String)) as String;
|
||||
break;
|
||||
case 'numberFieldsPerRow':
|
||||
result.numberFieldsPerRow = serializers.deserialize(value,
|
||||
specifiedType: const FullType(int)) as int;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -378,8 +371,6 @@ class _$DashboardUISettings extends DashboardUISettings {
|
|||
final bool includeTaxes;
|
||||
@override
|
||||
final String groupBy;
|
||||
@override
|
||||
final int numberFieldsPerRow;
|
||||
|
||||
factory _$DashboardUISettings(
|
||||
[void Function(DashboardUISettingsBuilder) updates]) =>
|
||||
|
|
@ -396,8 +387,7 @@ class _$DashboardUISettings extends DashboardUISettings {
|
|||
this.offset,
|
||||
this.currencyId,
|
||||
this.includeTaxes,
|
||||
this.groupBy,
|
||||
this.numberFieldsPerRow})
|
||||
this.groupBy})
|
||||
: super._() {
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
dateRange, 'DashboardUISettings', 'dateRange');
|
||||
|
|
@ -421,8 +411,6 @@ class _$DashboardUISettings extends DashboardUISettings {
|
|||
includeTaxes, 'DashboardUISettings', 'includeTaxes');
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
groupBy, 'DashboardUISettings', 'groupBy');
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
numberFieldsPerRow, 'DashboardUISettings', 'numberFieldsPerRow');
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -448,8 +436,7 @@ class _$DashboardUISettings extends DashboardUISettings {
|
|||
offset == other.offset &&
|
||||
currencyId == other.currencyId &&
|
||||
includeTaxes == other.includeTaxes &&
|
||||
groupBy == other.groupBy &&
|
||||
numberFieldsPerRow == other.numberFieldsPerRow;
|
||||
groupBy == other.groupBy;
|
||||
}
|
||||
|
||||
int __hashCode;
|
||||
|
|
@ -464,19 +451,17 @@ class _$DashboardUISettings extends DashboardUISettings {
|
|||
$jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc($jc(0, dateRange.hashCode),
|
||||
customStartDate.hashCode),
|
||||
customEndDate.hashCode),
|
||||
enableComparison.hashCode),
|
||||
compareDateRange.hashCode),
|
||||
compareCustomStartDate.hashCode),
|
||||
compareCustomEndDate.hashCode),
|
||||
offset.hashCode),
|
||||
currencyId.hashCode),
|
||||
includeTaxes.hashCode),
|
||||
groupBy.hashCode),
|
||||
numberFieldsPerRow.hashCode));
|
||||
$jc($jc(0, dateRange.hashCode),
|
||||
customStartDate.hashCode),
|
||||
customEndDate.hashCode),
|
||||
enableComparison.hashCode),
|
||||
compareDateRange.hashCode),
|
||||
compareCustomStartDate.hashCode),
|
||||
compareCustomEndDate.hashCode),
|
||||
offset.hashCode),
|
||||
currencyId.hashCode),
|
||||
includeTaxes.hashCode),
|
||||
groupBy.hashCode));
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -492,8 +477,7 @@ class _$DashboardUISettings extends DashboardUISettings {
|
|||
..add('offset', offset)
|
||||
..add('currencyId', currencyId)
|
||||
..add('includeTaxes', includeTaxes)
|
||||
..add('groupBy', groupBy)
|
||||
..add('numberFieldsPerRow', numberFieldsPerRow))
|
||||
..add('groupBy', groupBy))
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -552,11 +536,6 @@ class DashboardUISettingsBuilder
|
|||
String get groupBy => _$this._groupBy;
|
||||
set groupBy(String groupBy) => _$this._groupBy = groupBy;
|
||||
|
||||
int _numberFieldsPerRow;
|
||||
int get numberFieldsPerRow => _$this._numberFieldsPerRow;
|
||||
set numberFieldsPerRow(int numberFieldsPerRow) =>
|
||||
_$this._numberFieldsPerRow = numberFieldsPerRow;
|
||||
|
||||
DashboardUISettingsBuilder() {
|
||||
DashboardUISettings._initializeBuilder(this);
|
||||
}
|
||||
|
|
@ -575,7 +554,6 @@ class DashboardUISettingsBuilder
|
|||
_currencyId = $v.currencyId;
|
||||
_includeTaxes = $v.includeTaxes;
|
||||
_groupBy = $v.groupBy;
|
||||
_numberFieldsPerRow = $v.numberFieldsPerRow;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
|
|
@ -615,8 +593,7 @@ class DashboardUISettingsBuilder
|
|||
offset: BuiltValueNullFieldError.checkNotNull(offset, 'DashboardUISettings', 'offset'),
|
||||
currencyId: BuiltValueNullFieldError.checkNotNull(currencyId, 'DashboardUISettings', 'currencyId'),
|
||||
includeTaxes: BuiltValueNullFieldError.checkNotNull(includeTaxes, 'DashboardUISettings', 'includeTaxes'),
|
||||
groupBy: BuiltValueNullFieldError.checkNotNull(groupBy, 'DashboardUISettings', 'groupBy'),
|
||||
numberFieldsPerRow: BuiltValueNullFieldError.checkNotNull(numberFieldsPerRow, 'DashboardUISettings', 'numberFieldsPerRow'));
|
||||
groupBy: BuiltValueNullFieldError.checkNotNull(groupBy, 'DashboardUISettings', 'groupBy'));
|
||||
replace(_$result);
|
||||
return _$result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -326,6 +326,7 @@ class DashboardPanels extends StatelessWidget {
|
|||
final company = state.company;
|
||||
final localization = AppLocalization.of(context);
|
||||
final settings = viewModel.dashboardUIState.settings;
|
||||
final userCompanySettings = state.userCompany.settings;
|
||||
final runningTasks = _runningTasks(context);
|
||||
|
||||
if (!state.staticState.isLoaded) {
|
||||
|
|
@ -572,7 +573,10 @@ class DashboardPanels extends StatelessWidget {
|
|||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
child: StaggeredGrid.count(
|
||||
crossAxisCount: settings.numberFieldsPerRow,
|
||||
crossAxisCount: isMobile(context)
|
||||
? userCompanySettings.dashboardFieldsPerRowMobile
|
||||
: userCompanySettings
|
||||
.dashboardFieldsPerRowDesktop,
|
||||
crossAxisSpacing: 8,
|
||||
mainAxisSpacing: 12,
|
||||
children: state.userCompany.settings.dashboardFields
|
||||
|
|
@ -982,7 +986,7 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
|
|||
final groupMap = state.groupState.map;
|
||||
final company = state.company;
|
||||
final settings = state.dashboardUIState.settings;
|
||||
final dashboardFields = state.userCompany.settings.dashboardFields;
|
||||
final userCompanySettings = state.userCompany.settings;
|
||||
|
||||
final hasMultipleCurrencies =
|
||||
memoizedHasMultipleCurrencies(company, clientMap, groupMap);
|
||||
|
|
@ -1140,7 +1144,8 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
|
|||
setState(() {});
|
||||
},
|
||||
children: [
|
||||
for (var dashboardField in dashboardFields)
|
||||
for (var dashboardField
|
||||
in userCompanySettings.dashboardFields)
|
||||
ListTile(
|
||||
key: ValueKey(
|
||||
'__${dashboardField.field}_${dashboardField.period}_'),
|
||||
|
|
@ -1151,7 +1156,8 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
|
|||
icon: Icon(Icons.close),
|
||||
onPressed: () {
|
||||
store.dispatch(UpdateDashboardFields(
|
||||
dashboardFields: dashboardFields
|
||||
dashboardFields: userCompanySettings
|
||||
.dashboardFields
|
||||
.rebuild((b) => b..remove(dashboardField))));
|
||||
setState(() {});
|
||||
},
|
||||
|
|
@ -1171,10 +1177,17 @@ class __DashboardSettingsState extends State<_DashboardSettings> {
|
|||
SizedBox(height: 16),
|
||||
AppDropdownButton<int>(
|
||||
labelText: localization.fieldsPerRow,
|
||||
value: settings.numberFieldsPerRow,
|
||||
value: isMobile(context)
|
||||
? userCompanySettings.dashboardFieldsPerRowMobile
|
||||
: userCompanySettings.dashboardFieldsPerRowDesktop,
|
||||
onChanged: (dynamic value) {
|
||||
store.dispatch(
|
||||
UpdateDashboardSettings(numberFieldsPerRow: value));
|
||||
if (isMobile(context)) {
|
||||
store.dispatch(UpdateDashboardFieldSettingss(
|
||||
numberFieldsPerRowMobile: value));
|
||||
} else {
|
||||
store.dispatch(UpdateDashboardFieldSettingss(
|
||||
numberFieldsPerRowDesktop: value));
|
||||
}
|
||||
setState(() {});
|
||||
},
|
||||
items: List<int>.generate(8, (i) => i + 1)
|
||||
|
|
|
|||
Loading…
Reference in New Issue