This commit is contained in:
Hillel Coren 2018-12-13 16:38:33 +02:00
parent 233f7ea460
commit ff896f491f
13 changed files with 76 additions and 77 deletions

View File

@ -21,15 +21,14 @@ import 'package:invoiceninja_flutter/redux/product/product_state.dart';
import 'package:invoiceninja_flutter/redux/client/client_state.dart'; import 'package:invoiceninja_flutter/redux/client/client_state.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_state.dart'; import 'package:invoiceninja_flutter/redux/invoice/invoice_state.dart';
// STARTER: import - do not remove comment // STARTER: import - do not remove comment
import 'package:invoiceninja_flutter/data/models/project_model.dart';
import 'package:invoiceninja_flutter/redux/project/project_state.dart'; import 'package:invoiceninja_flutter/redux/project/project_state.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_state.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_state.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_state.dart'; import 'package:invoiceninja_flutter/redux/quote/quote_state.dart';
part 'serializers.g.dart'; part 'serializers.g.dart';
@SerializersFor(const [ @SerializersFor(const [
@ -81,8 +80,6 @@ part 'serializers.g.dart';
ProjectEntity, ProjectEntity,
PaymentEntity, PaymentEntity,
]) ])
final Serializers serializers = final Serializers serializers =
(_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build(); (_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

View File

@ -9,12 +9,12 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/data/web_client.dart'; import 'package:invoiceninja_flutter/data/web_client.dart';
class ProjectRepository { class ProjectRepository {
final WebClient webClient;
const ProjectRepository({ const ProjectRepository({
this.webClient = const WebClient(), this.webClient = const WebClient(),
}); });
final WebClient webClient;
Future<ProjectEntity> loadItem( Future<ProjectEntity> loadItem(
CompanyEntity company, AuthState auth, int entityId) async { CompanyEntity company, AuthState auth, int entityId) async {
final dynamic response = await webClient.get( final dynamic response = await webClient.get(

View File

@ -6,13 +6,13 @@ import 'package:invoiceninja_flutter/ui/app/buttons/refresh_icon_button.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
class ProjectEdit extends StatefulWidget { class ProjectEdit extends StatefulWidget {
final ProjectEditVM viewModel;
const ProjectEdit({ const ProjectEdit({
Key key, Key key,
@required this.viewModel, @required this.viewModel,
}) : super(key: key); }) : super(key: key);
final ProjectEditVM viewModel;
@override @override
_ProjectEditState createState() => _ProjectEditState(); _ProjectEditState createState() => _ProjectEditState();
} }
@ -33,7 +33,7 @@ class _ProjectEditState extends State<ProjectEdit> {
_controllers.forEach((controller) => controller.removeListener(_onChanged)); _controllers.forEach((controller) => controller.removeListener(_onChanged));
final project = widget.viewModel.project; //final project = widget.viewModel.project;
// STARTER: read value - do not remove comment // STARTER: read value - do not remove comment
_controllers.forEach((controller) => controller.addListener(_onChanged)); _controllers.forEach((controller) => controller.addListener(_onChanged));

View File

@ -9,11 +9,11 @@ import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
import 'package:invoiceninja_flutter/data/models/project_model.dart'; import 'package:invoiceninja_flutter/data/models/project_model.dart';
import 'package:invoiceninja_flutter/ui/project/edit/project_edit.dart'; import 'package:invoiceninja_flutter/ui/project/edit/project_edit.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
class ProjectEditScreen extends StatelessWidget { class ProjectEditScreen extends StatelessWidget {
const ProjectEditScreen({Key key}) : super(key: key);
static const String route = '/project/edit'; static const String route = '/project/edit';
ProjectEditScreen({Key key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -31,14 +31,6 @@ class ProjectEditScreen extends StatelessWidget {
} }
class ProjectEditVM { class ProjectEditVM {
final ProjectEntity project;
final Function(ProjectEntity) onChanged;
final Function(BuildContext) onSavePressed;
final bool isSaving;
final ProjectEntity origProject;
final Function onBackPressed;
final bool isLoading;
ProjectEditVM({ ProjectEditVM({
@required this.project, @required this.project,
@required this.onChanged, @required this.onChanged,
@ -81,4 +73,12 @@ class ProjectEditVM {
}, },
); );
} }
final ProjectEntity project;
final Function(ProjectEntity) onChanged;
final Function(BuildContext) onSavePressed;
final bool isSaving;
final ProjectEntity origProject;
final Function onBackPressed;
final bool isLoading;
} }

View File

@ -8,8 +8,6 @@ import 'package:invoiceninja_flutter/ui/project/project_list_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
class ProjectList extends StatelessWidget { class ProjectList extends StatelessWidget {
final ProjectListVM viewModel;
const ProjectList({ const ProjectList({
Key key, Key key,
@required this.viewModel, @required this.viewModel,
@ -116,4 +114,6 @@ class ProjectList extends StatelessWidget {
}), }),
); );
} }
final ProjectListVM viewModel;
} }

View File

@ -6,15 +6,6 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart'; import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
class ProjectListItem extends StatelessWidget { class ProjectListItem extends StatelessWidget {
final UserEntity user;
final Function(EntityAction) onEntityAction;
final GestureTapCallback onTap;
final GestureTapCallback onLongPress;
//final ValueChanged<bool> onCheckboxChanged;
final ProjectEntity project;
final String filter;
static final projectItemKey = (int id) => Key('__project_item_${id}__');
const ProjectListItem({ const ProjectListItem({
@required this.user, @required this.user,
@ -26,6 +17,16 @@ class ProjectListItem extends StatelessWidget {
@required this.filter, @required this.filter,
}); });
final UserEntity user;
final Function(EntityAction) onEntityAction;
final GestureTapCallback onTap;
final GestureTapCallback onLongPress;
//final ValueChanged<bool> onCheckboxChanged;
final ProjectEntity project;
final String filter;
static final projectItemKey = (int id) => Key('__project_item_${id}__');
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final filterMatch = filter != null && filter.isNotEmpty final filterMatch = filter != null && filter.isNotEmpty

View File

@ -30,17 +30,6 @@ class ProjectListBuilder extends StatelessWidget {
} }
class ProjectListVM { class ProjectListVM {
final UserEntity user;
final List<int> projectList;
final BuiltMap<int, ProjectEntity> projectMap;
final String filter;
final bool isLoading;
final bool isLoaded;
final Function(BuildContext, ProjectEntity) onProjectTap;
final Function(BuildContext, ProjectEntity, DismissDirection) onDismissed;
final Function(BuildContext) onRefreshed;
final Function(BuildContext, ProjectEntity, EntityAction) onEntityAction;
ProjectListVM({ ProjectListVM({
@required this.user, @required this.user,
@required this.projectList, @required this.projectList,
@ -132,4 +121,15 @@ class ProjectListVM {
} }
}); });
} }
final UserEntity user;
final List<int> projectList;
final BuiltMap<int, ProjectEntity> projectMap;
final String filter;
final bool isLoading;
final bool isLoaded;
final Function(BuildContext, ProjectEntity) onProjectTap;
final Function(BuildContext, ProjectEntity, DismissDirection) onDismissed;
final Function(BuildContext) onRefreshed;
final Function(BuildContext, ProjectEntity, EntityAction) onEntityAction;
} }

View File

@ -9,12 +9,13 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/data/web_client.dart'; import 'package:invoiceninja_flutter/data/web_client.dart';
class StubRepository { class StubRepository {
final WebClient webClient;
const StubRepository({ const StubRepository({
this.webClient = const WebClient(), this.webClient = const WebClient(),
}); });
final WebClient webClient;
Future<StubEntity> loadItem( Future<StubEntity> loadItem(
CompanyEntity company, AuthState auth, int entityId) async { CompanyEntity company, AuthState auth, int entityId) async {
final dynamic response = await webClient.get( final dynamic response = await webClient.get(

View File

@ -6,13 +6,13 @@ import 'package:invoiceninja_flutter/ui/app/buttons/refresh_icon_button.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
class StubEdit extends StatefulWidget { class StubEdit extends StatefulWidget {
final StubEditVM viewModel;
const StubEdit({ const StubEdit({
Key key, Key key,
@required this.viewModel, @required this.viewModel,
}) : super(key: key); }) : super(key: key);
final StubEditVM viewModel;
@override @override
_StubEditState createState() => _StubEditState(); _StubEditState createState() => _StubEditState();
} }

View File

@ -9,11 +9,10 @@ import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart';
import 'package:invoiceninja_flutter/data/models/stub_model.dart'; import 'package:invoiceninja_flutter/data/models/stub_model.dart';
import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit.dart'; import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
class StubEditScreen extends StatelessWidget { class StubEditScreen extends StatelessWidget {
const StubEditScreen({Key key}) : super(key: key);
static const String route = '/stub/edit'; static const String route = '/stub/edit';
StubEditScreen({Key key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -31,12 +30,6 @@ class StubEditScreen extends StatelessWidget {
} }
class StubEditVM { class StubEditVM {
final StubEntity stub;
final Function(StubEntity) onChanged;
final Function(BuildContext) onSavePressed;
final Function onBackPressed;
final bool isLoading;
StubEditVM({ StubEditVM({
@required this.stub, @required this.stub,
@required this.onChanged, @required this.onChanged,
@ -77,4 +70,10 @@ class StubEditVM {
}, },
); );
} }
final StubEntity stub;
final Function(StubEntity) onChanged;
final Function(BuildContext) onSavePressed;
final Function onBackPressed;
final bool isLoading;
} }

View File

@ -8,8 +8,6 @@ import 'package:invoiceninja_flutter/ui/stub/stub_list_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
class StubList extends StatelessWidget { class StubList extends StatelessWidget {
final StubListVM viewModel;
const StubList({ const StubList({
Key key, Key key,
@required this.viewModel, @required this.viewModel,
@ -116,4 +114,6 @@ class StubList extends StatelessWidget {
}), }),
); );
} }
final StubListVM viewModel;
} }

View File

@ -6,15 +6,6 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart'; import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart';
class StubListItem extends StatelessWidget { class StubListItem extends StatelessWidget {
final UserEntity user;
final Function(EntityAction) onEntityAction;
final GestureTapCallback onTap;
final GestureTapCallback onLongPress;
//final ValueChanged<bool> onCheckboxChanged;
final StubEntity stub;
final String filter;
static final stubItemKey = (int id) => Key('__stub_item_${id}__');
const StubListItem({ const StubListItem({
@required this.user, @required this.user,
@ -26,6 +17,16 @@ class StubListItem extends StatelessWidget {
@required this.filter, @required this.filter,
}); });
final UserEntity user;
final Function(EntityAction) onEntityAction;
final GestureTapCallback onTap;
final GestureTapCallback onLongPress;
//final ValueChanged<bool> onCheckboxChanged;
final StubEntity stub;
final String filter;
static final stubItemKey = (int id) => Key('__stub_item_${id}__');
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final filterMatch = filter != null && filter.isNotEmpty final filterMatch = filter != null && filter.isNotEmpty

View File

@ -30,17 +30,6 @@ class StubListBuilder extends StatelessWidget {
} }
class StubListVM { class StubListVM {
final UserEntity user;
final List<int> stubList;
final BuiltMap<int, StubEntity> stubMap;
final String filter;
final bool isLoading;
final bool isLoaded;
final Function(BuildContext, StubEntity) onStubTap;
final Function(BuildContext, StubEntity, DismissDirection) onDismissed;
final Function(BuildContext) onRefreshed;
final Function(BuildContext, StubEntity, EntityAction) onEntityAction;
StubListVM({ StubListVM({
@required this.user, @required this.user,
@required this.stubList, @required this.stubList,
@ -132,4 +121,15 @@ class StubListVM {
} }
}); });
} }
final UserEntity user;
final List<int> stubList;
final BuiltMap<int, StubEntity> stubMap;
final String filter;
final bool isLoading;
final bool isLoaded;
final Function(BuildContext, StubEntity) onStubTap;
final Function(BuildContext, StubEntity, DismissDirection) onDismissed;
final Function(BuildContext) onRefreshed;
final Function(BuildContext, StubEntity, EntityAction) onEntityAction;
} }