Null safety

This commit is contained in:
Hillel Coren 2023-10-01 19:40:37 +03:00
parent a923482618
commit 09b90605c9
4 changed files with 35 additions and 40 deletions

View File

@ -890,6 +890,10 @@ Serializers _$serializers = (new Serializers().toBuilder()
const FullType( const FullType(
BuiltMap, const [const FullType(String), const FullType(String)]), BuiltMap, const [const FullType(String), const FullType(String)]),
() => new MapBuilder<String, String>()) () => new MapBuilder<String, String>())
..addBuilderFactory(
const FullType(
BuiltMap, const [const FullType(String), const FullType(String)]),
() => new MapBuilder<String, String>())
..addBuilderFactory( ..addBuilderFactory(
const FullType(BuiltMap, const [ const FullType(BuiltMap, const [
const FullType(String), const FullType(String),
@ -1006,13 +1010,7 @@ Serializers _$serializers = (new Serializers().toBuilder()
const FullType(String), const FullType(String),
const FullType(BuiltList, const [const FullType(String)]) const FullType(BuiltList, const [const FullType(String)])
]), ]),
() => new MapBuilder<String, BuiltList<String>>()) () => new MapBuilder<String, BuiltList<String>>()))
..addBuilderFactory(
const FullType(BuiltMap, const [
const FullType.nullable(String),
const FullType.nullable(String)
]),
() => new MapBuilder<String?, String?>()))
.build(); .build();
// ignore_for_file: deprecated_member_use_from_same_package,type=lint // ignore_for_file: deprecated_member_use_from_same_package,type=lint

View File

@ -43,7 +43,7 @@ abstract class ReportsUIState
String get customEndDate; String get customEndDate;
BuiltMap<String?, String?> get filters; BuiltMap<String, String> get filters;
bool get isGroupByFiltered => bool get isGroupByFiltered =>
filters.containsKey(group) && filters[group]!.isNotEmpty; filters.containsKey(group) && filters[group]!.isNotEmpty;

View File

@ -43,10 +43,8 @@ class _$ReportsUIStateSerializer
specifiedType: const FullType(String)), specifiedType: const FullType(String)),
'filters', 'filters',
serializers.serialize(object.filters, serializers.serialize(object.filters,
specifiedType: const FullType(BuiltMap, const [ specifiedType: const FullType(BuiltMap,
const FullType.nullable(String), const [const FullType(String), const FullType(String)])),
const FullType.nullable(String)
])),
]; ];
return result; return result;
@ -94,10 +92,8 @@ class _$ReportsUIStateSerializer
break; break;
case 'filters': case 'filters':
result.filters.replace(serializers.deserialize(value, result.filters.replace(serializers.deserialize(value,
specifiedType: const FullType(BuiltMap, const [ specifiedType: const FullType(BuiltMap,
const FullType.nullable(String), const [const FullType(String), const FullType(String)]))!);
const FullType.nullable(String)
]))!);
break; break;
} }
} }
@ -122,7 +118,7 @@ class _$ReportsUIState extends ReportsUIState {
@override @override
final String customEndDate; final String customEndDate;
@override @override
final BuiltMap<String?, String?> filters; final BuiltMap<String, String> filters;
factory _$ReportsUIState([void Function(ReportsUIStateBuilder)? updates]) => factory _$ReportsUIState([void Function(ReportsUIStateBuilder)? updates]) =>
(new ReportsUIStateBuilder()..update(updates))._build(); (new ReportsUIStateBuilder()..update(updates))._build();
@ -241,11 +237,10 @@ class ReportsUIStateBuilder
set customEndDate(String? customEndDate) => set customEndDate(String? customEndDate) =>
_$this._customEndDate = customEndDate; _$this._customEndDate = customEndDate;
MapBuilder<String?, String?>? _filters; MapBuilder<String, String>? _filters;
MapBuilder<String?, String?> get filters => MapBuilder<String, String> get filters =>
_$this._filters ??= new MapBuilder<String?, String?>(); _$this._filters ??= new MapBuilder<String, String>();
set filters(MapBuilder<String?, String?>? filters) => set filters(MapBuilder<String, String>? filters) => _$this._filters = filters;
_$this._filters = filters;
ReportsUIStateBuilder(); ReportsUIStateBuilder();

View File

@ -230,8 +230,10 @@ class ReportsScreen extends StatelessWidget {
filterColumns.first: '' filterColumns.first: ''
} }
: { : {
value: (reportState.filters[value] ?? '').isNotEmpty value: reportState.filters.containsKey(value) &&
? reportState.filters[value] (reportState.filters[value] ?? '')
.isNotEmpty
? reportState.filters[value]!
: DateRange.thisQuarter.toString(), : DateRange.thisQuarter.toString(),
if (filterColumns.isNotEmpty && if (filterColumns.isNotEmpty &&
filterColumns.first != value) filterColumns.first != value)
@ -552,9 +554,9 @@ class ReportDataTable extends StatefulWidget {
} }
class _ReportDataTableState extends State<ReportDataTable> { class _ReportDataTableState extends State<ReportDataTable> {
final Map<String, Map<String?, TextEditingController>> final Map<String, Map<String, TextEditingController>>
_textEditingControllers = {}; _textEditingControllers = {};
final Map<String, Map<String?, FocusNode>> _textEditingFocusNodes = {}; final Map<String, Map<String, FocusNode>> _textEditingFocusNodes = {};
late ReportDataTableSource dataTableSource; late ReportDataTableSource dataTableSource;
@override @override
@ -621,7 +623,7 @@ class _ReportDataTableState extends State<ReportDataTable> {
super.didChangeDependencies(); super.didChangeDependencies();
} }
void _onChanged(String? column, String value) { void _onChanged(String column, String value) {
widget.viewModel.onReportFiltersChanged( widget.viewModel.onReportFiltersChanged(
context, context,
widget.viewModel.reportState.filters widget.viewModel.reportState.filters
@ -804,9 +806,9 @@ class ReportDataTableSource extends AppDataTableSource {
ReportsScreenVM viewModel; ReportsScreenVM viewModel;
final BuildContext context; final BuildContext context;
final Map<String, Map<String?, TextEditingController>> textEditingControllers; final Map<String, Map<String, TextEditingController>> textEditingControllers;
final Map<String, Map<String?, FocusNode>> textEditingFocusNodes; final Map<String, Map<String, FocusNode>> textEditingFocusNodes;
final Function(String?, String) onFilterChanged; final Function(String, String) onFilterChanged;
@override @override
int get selectedRowCount => 0; int get selectedRowCount => 0;
@ -1023,7 +1025,7 @@ class ReportResult {
return true; return true;
} }
List<String?> sortedColumns(ReportsUIState reportState) { List<String> sortedColumns(ReportsUIState reportState) {
final data = columns.toList(); final data = columns.toList();
final group = reportState.group; final group = reportState.group;
@ -1078,16 +1080,16 @@ class ReportResult {
DataRow tableFilters( DataRow tableFilters(
BuildContext context, BuildContext context,
Map<String?, TextEditingController>? textEditingControllers, Map<String, TextEditingController>? textEditingControllers,
Map<String?, FocusNode>? textEditingFocusNodes, Map<String, FocusNode>? textEditingFocusNodes,
Function(String?, String) onFilterChanged) { Function(String, String) onFilterChanged) {
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);
final theme = Theme.of(context); final theme = Theme.of(context);
final store = StoreProvider.of<AppState>(context); final store = StoreProvider.of<AppState>(context);
final reportState = store.state.uiState.reportsUIState; final reportState = store.state.uiState.reportsUIState;
return DataRow(cells: [ return DataRow(cells: [
for (String? column in sortedColumns(reportState)) for (String column in sortedColumns(reportState))
if (textEditingControllers == null || if (textEditingControllers == null ||
!textEditingControllers.containsKey(column)) !textEditingControllers.containsKey(column))
DataCell(Text('')) DataCell(Text(''))
@ -1214,7 +1216,7 @@ class ReportResult {
focusNode: textEditingFocusNodes![column], focusNode: textEditingFocusNodes![column],
optionsBuilder: (TextEditingValue textEditingValue) { optionsBuilder: (TextEditingValue textEditingValue) {
final filter = textEditingValue.text.toLowerCase(); final filter = textEditingValue.text.toLowerCase();
final index = columns.indexOf(column!); final index = columns.indexOf(column);
final options = data final options = data
.where((row) => .where((row) =>
row[index] row[index]
@ -1329,7 +1331,7 @@ class ReportResult {
final row = data[index - 1]; final row = data[index - 1];
final cells = <DataCell>[]; final cells = <DataCell>[];
for (var j = 0; j < row.length; j++) { for (var j = 0; j < row.length; j++) {
final index = columns.indexOf(sorted[j]!); final index = columns.indexOf(sorted[j]);
final cell = row[index]; final cell = row[index];
final column = sorted[j]; final column = sorted[j];
cells.add( cells.add(
@ -1372,7 +1374,7 @@ class ReportResult {
} else if (columnType == ReportColumnType.number) { } else if (columnType == ReportColumnType.number) {
final currencyId = values!['${column}_currency_id']; final currencyId = values!['${column}_currency_id'];
value = formatNumber(values[column], context, value = formatNumber(values[column], context,
formatNumberType: column!.toLowerCase().contains('quantity') formatNumberType: column.toLowerCase().contains('quantity')
? FormatNumberType.double ? FormatNumberType.double
: FormatNumberType.money, : FormatNumberType.money,
currencyId: currencyId:
@ -1386,8 +1388,8 @@ class ReportResult {
return; return;
} }
if (column == groupBy) { if (column == groupBy) {
String? filter = group; String filter = group;
String? customStartDate = ''; String customStartDate = '';
String customEndDate = ''; String customEndDate = '';
if (getReportColumnType(column, context) == if (getReportColumnType(column, context) ==
ReportColumnType.dateTime || ReportColumnType.dateTime ||