Migrated to flutter master channel, some adaptations to new m3 specs

This commit is contained in:
Anton Stubenbord
2022-12-20 00:27:59 +01:00
39 changed files with 554 additions and 442 deletions

View File

@@ -1,5 +1,4 @@
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_api/src/models/saved_view_model.dart';
import 'package:paperless_mobile/core/repository/saved_view_repository.dart';
import 'package:rxdart/rxdart.dart';
@@ -8,20 +7,21 @@ class SavedViewRepositoryImpl implements SavedViewRepository {
SavedViewRepositoryImpl(this._api);
final BehaviorSubject<Map<int, SavedView>> _subject =
BehaviorSubject.seeded({});
final BehaviorSubject<Map<int, SavedView>?> _subject = BehaviorSubject();
@override
Stream<Map<int, SavedView>> get savedViews =>
Stream<Map<int, SavedView>?> get savedViews =>
_subject.stream.asBroadcastStream();
@override
void clear() {}
void clear() {
_subject.add(const {});
}
@override
Future<SavedView> create(SavedView view) async {
final created = await _api.save(view);
final updatedState = {..._subject.value}
final updatedState = {..._subject.valueOrNull ?? {}}
..putIfAbsent(created.id!, () => created);
_subject.add(updatedState);
return created;
@@ -30,7 +30,7 @@ class SavedViewRepositoryImpl implements SavedViewRepository {
@override
Future<int> delete(SavedView view) async {
await _api.delete(view);
final updatedState = {..._subject.value}..remove(view.id);
final updatedState = {..._subject.valueOrNull ?? {}}..remove(view.id);
_subject.add(updatedState);
return view.id!;
}
@@ -38,7 +38,7 @@ class SavedViewRepositoryImpl implements SavedViewRepository {
@override
Future<SavedView?> find(int id) async {
final found = await _api.find(id);
final updatedState = {..._subject.value}
final updatedState = {..._subject.valueOrNull ?? {}}
..update(id, (_) => found, ifAbsent: () => found);
_subject.add(updatedState);
return found;
@@ -48,7 +48,7 @@ class SavedViewRepositoryImpl implements SavedViewRepository {
Future<Iterable<SavedView>> findAll([Iterable<int>? ids]) async {
final found = await _api.findAll(ids);
final updatedState = {
..._subject.value,
..._subject.valueOrNull ?? {},
...{for (final view in found) view.id!: view},
};
_subject.add(updatedState);

View File

@@ -1,4 +1,3 @@
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';

View File

@@ -1,7 +1,7 @@
import 'package:paperless_api/paperless_api.dart';
abstract class SavedViewRepository {
Stream<Map<int, SavedView>> get savedViews;
Stream<Map<int, SavedView>?> get savedViews;
Future<SavedView> create(SavedView view);
Future<SavedView?> find(int id);

View File

@@ -45,7 +45,7 @@ Note: If you have the GitHub Android app installed, the descriptions will not be
).padded(),
Text(
'Description',
style: Theme.of(context).textTheme.subtitle1,
style: Theme.of(context).textTheme.titleMedium,
).padded(),
FormBuilderTextField(
name: shortDescriptionKey,
@@ -70,7 +70,7 @@ Note: If you have the GitHub Android app installed, the descriptions will not be
children: [
Text(
'Stack Trace',
style: Theme.of(context).textTheme.subtitle1,
style: Theme.of(context).textTheme.titleMedium,
).paddedOnly(top: 8.0, left: 8.0, right: 8.0),
TextButton.icon(
label: const Text('Copy'),
@@ -81,11 +81,11 @@ Note: If you have the GitHub Android app installed, the descriptions will not be
),
Text(
'Since stack traces cannot be attached to the GitHub issue url, please copy the content of the stackTrace and paste it in the issue description. This will greatly increase the chance of quickly resolving the issue!',
style: Theme.of(context).textTheme.caption,
style: Theme.of(context).textTheme.bodySmall,
).padded(),
Text(
widget.stackTrace.toString(),
style: Theme.of(context).textTheme.overline,
style: Theme.of(context).textTheme.bodySmall,
).padded(),
]
],

View File

@@ -1,15 +1,10 @@
import 'dart:developer';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:form_builder_validators/form_builder_validators.dart';
import 'package:intl/intl.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/widgets/form_builder_fields/extended_date_range_form_field/form_builder_relative_date_range_field.dart';
import 'package:paperless_mobile/generated/l10n.dart';
import 'package:paperless_mobile/extensions/flutter_extensions.dart';
import 'package:paperless_mobile/generated/l10n.dart';
class ExtendedDateRangeDialog extends StatefulWidget {
final DateRangeQuery initialValue;
@@ -56,13 +51,13 @@ class _ExtendedDateRangeDialogState extends State<ExtendedDateRangeDialog> {
key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildDateRangeQueryTypeSelection(),
Text(
"Hint: You can either specify absolute values by selecting concrete dates, or you can specify a time range relative to the current date.",
style: Theme.of(context).textTheme.caption,
),
_buildDateRangeQueryTypeSelection(),
const SizedBox(height: 16),
style: Theme.of(context).textTheme.bodySmall,
).paddedOnly(top: 8, bottom: 16),
Builder(
builder: (context) {
switch (_selectedDateRangeType) {
@@ -106,21 +101,23 @@ class _ExtendedDateRangeDialogState extends State<ExtendedDateRangeDialog> {
}
Widget _buildDateRangeQueryTypeSelection() {
return Row(
children: [
ChoiceChip(
label: Text('Absolute'),
selected: _selectedDateRangeType == DateRangeType.absolute,
onSelected: (value) =>
setState(() => _selectedDateRangeType = DateRangeType.absolute),
).paddedOnly(right: 8.0),
ChoiceChip(
label: Text('Relative'),
selected: _selectedDateRangeType == DateRangeType.relative,
onSelected: (value) =>
setState(() => _selectedDateRangeType = DateRangeType.relative),
return SegmentedButton<DateRangeType>(
multiSelectionEnabled: false,
onSelectionChanged: (selection) =>
setState(() => _selectedDateRangeType = selection.first),
segments: [
ButtonSegment(
value: DateRangeType.absolute,
enabled: true,
label: Text("Absolute"),
),
ButtonSegment(
value: DateRangeType.relative,
enabled: true,
label: Text("Relative"),
),
],
selected: {_selectedDateRangeType},
);
}

View File

@@ -97,15 +97,15 @@ class _FormBuilderRelativeDateRangePickerState
),
],
),
RelativeDateRangePickerHelper(
field: field,
onChanged: (value) {
if (value is RelativeDateRangeQuery) {
setState(() => _offset = value.offset);
_offsetTextEditingController.text = _offset.toString();
}
},
),
// RelativeDateRangePickerHelper(
// field: field,
// onChanged: (value) {
// if (value is RelativeDateRangeQuery) {
// setState(() => _offset = value.offset);
// _offsetTextEditingController.text = _offset.toString();
// }
// },
// ),
],
),
);

View File

@@ -121,7 +121,7 @@ class HighlightedText extends StatelessWidget {
TextSpan _normalSpan(String value, BuildContext context) {
return TextSpan(
text: value,
style: style ?? Theme.of(context).textTheme.bodyText2,
style: style ?? Theme.of(context).textTheme.bodyMedium,
);
}
}