Add scrollbars

This commit is contained in:
Hillel Coren 2021-03-09 21:06:06 +02:00
parent d44c2bf5e5
commit 67cd348a37
84 changed files with 364 additions and 318 deletions

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/data/models/serializers.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:flutter_json_widget/flutter_json_widget.dart';
import 'package:invoiceninja_flutter/ui/app/responsive_padding.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
class StateInspector extends StatefulWidget {
@ -48,8 +49,7 @@ class _StateInspectorState extends State<StateInspector> {
padding: const EdgeInsets.all(15),
child: Material(
child: ResponsivePadding(
child: ListView(
shrinkWrap: true,
child: ScrollableListView(
children: <Widget>[
TextFormField(
autofocus: true,

View File

@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/data/web_client.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/files.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -40,8 +41,7 @@ class DocumentGrid extends StatelessWidget {
final localization = AppLocalization.of(context);
final state = StoreProvider.of<AppState>(context).state;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: [
if (state.isEnterprisePlan)
Padding(

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
class AppForm extends StatelessWidget {
const AppForm({
@ -22,8 +23,7 @@ class AppForm extends StatelessWidget {
child: Form(
key: formKey,
child: child ??
ListView(
shrinkWrap: true,
ScrollableListView(
children: children,
),
),

View File

@ -1,8 +1,16 @@
import 'package:flutter/material.dart';
class ScrollableListView extends StatefulWidget {
const ScrollableListView({this.children});
const ScrollableListView({
Key key,
@required this.children,
this.scrollController,
this.padding,
}) : super(key: key);
final List<Widget> children;
final ScrollController scrollController;
final EdgeInsetsGeometry padding;
@override
_ScrollableListViewState createState() => _ScrollableListViewState();
@ -31,11 +39,12 @@ class _ScrollableListViewState extends State<ScrollableListView> {
onExit: (event) => setState(() => _isHovered = false),
child: Scrollbar(
child: ListView(
padding: widget.padding,
children: widget.children,
controller: _scrollController,
controller: widget.scrollController ?? _scrollController,
shrinkWrap: true,
),
controller: _scrollController,
controller: widget.scrollController ?? _scrollController,
isAlwaysShown: _isHovered,
),
);

View File

@ -6,6 +6,7 @@ import 'package:flutter_json_widget/flutter_json_widget.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/system_log_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -25,8 +26,7 @@ class _SystemLogViewerState extends State<SystemLogViewer> {
final localization = AppLocalization.of(context);
final state = StoreProvider.of<AppState>(context).state;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: [
ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {

View File

@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_toggle_buttons.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/password_field.dart';
import 'package:invoiceninja_flutter/ui/app/link_text.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/auth/login_vm.dart';
import 'package:invoiceninja_flutter/utils/colors.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -280,8 +281,7 @@ class _LoginState extends State<LoginView> {
),
),
),
ListView(
shrinkWrap: true,
ScrollableListView(
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 20.0, bottom: 20.0),

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -88,7 +89,7 @@ class ClientEditBillingAddressState extends State<ClientEditBillingAddress> {
final viewModel = widget.viewModel;
final client = viewModel.client;
return ListView(shrinkWrap: true, children: <Widget>[
return ScrollableListView(children: <Widget>[
FormCard(
children: <Widget>[
DecoratedFormField(

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/responsive_padding.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_contacts_vm.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -92,7 +93,7 @@ class _ClientEditContactsState extends State<ClientEditContacts> {
});
}
return ListView(
return ScrollableListView(
children: []
..addAll(contacts)
..add(Padding(

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/dynamic_selector.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/contacts.dart';
@ -125,8 +126,7 @@ class ClientEditDetailsState extends State<ClientEditDetails> {
final state = viewModel.state;
final client = viewModel.client;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -78,8 +79,7 @@ class ClientEditNotesState extends State<ClientEditNotes> {
final state = viewModel.state;
final client = viewModel.client;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/redux/payment_term/payment_term_selectors.d
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -83,8 +84,7 @@ class ClientEditSettingsState extends State<ClientEditSettings> {
final state = viewModel.state;
final client = viewModel.client;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -3,6 +3,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -89,7 +90,7 @@ class ClientEditShippingAddressState extends State<ClientEditShippingAddress> {
final viewModel = widget.viewModel;
final client = viewModel.client;
return ListView(shrinkWrap: true, children: <Widget>[
return ScrollableListView(children: <Widget>[
FormCard(
children: <Widget>[
DecoratedFormField(

View File

@ -6,6 +6,7 @@ import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/lists/app_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
@ -200,7 +201,7 @@ class _ClientViewDetailsState extends State<ClientViewDetails> {
return listTiles;
}
return ListView(
return ScrollableListView(
children: _buildDetailsList(),
);
}

View File

@ -41,7 +41,7 @@ class _ClientViewLedgerState extends State<ClientViewLedger> {
}
return ListView.separated(
shrinkWrap: true,
shrinkWrap: true,
padding: const EdgeInsets.symmetric(vertical: 16),
itemCount: ledgers.length + 1,
separatorBuilder: (context, index) => ListDivider(),

View File

@ -18,6 +18,7 @@ import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/gateways/token_meta.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/client/view/client_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/extensions.dart';
@ -108,7 +109,7 @@ class ClientOverview extends StatelessWidget {
value: client.customValue4);
}
return ListView(
return ScrollableListView(
children: <Widget>[
EntityHeader(
entity: client,

View File

@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/color_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/company_gateway/edit/company_gateway_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -101,7 +102,7 @@ class _CompanyGatewayEditState extends State<CompanyGatewayEdit>
focusNode: _focusNode,
tabController: _controller,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[
@ -137,7 +138,7 @@ class _CompanyGatewayEditState extends State<CompanyGatewayEdit>
),
],
),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(children: <Widget>[
if (companyGateway.gatewayId != kGatewayCustom)
@ -295,7 +296,7 @@ class _CompanyGatewayEditState extends State<CompanyGatewayEdit>
)
],
),
ListView(
ScrollableListView(
children: <Widget>[
if (gateway?.options != null && gateway.options.length > 1)
FormCard(

View File

@ -11,6 +11,7 @@ import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/system_log_viewer.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/company_gateway/view/company_gateway_view_vm.dart';
@ -138,7 +139,7 @@ class _CompanyGatewayOverview extends StatelessWidget {
}
}
return ListView(children: <Widget>[
return ScrollableListView(children: <Widget>[
EntityHeader(
entity: companyGateway,
label: localization.processed,

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
import 'package:invoiceninja_flutter/ui/app/responsive_padding.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -50,8 +51,7 @@ class _DashboardDateRangePickerState extends State<DashboardDateRangePicker> {
children: <Widget>[
Padding(
padding: const EdgeInsets.all(24.0),
child: ListView(
shrinkWrap: true,
child: ScrollableListView(
children: <Widget>[
Text(localization.dateRange,
style: Theme.of(context).textTheme.headline6),

View File

@ -10,6 +10,7 @@ import 'package:invoiceninja_flutter/redux/company/company_selectors.dart';
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/app_scrollbar.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/dashboard/dashboard_chart.dart';
import 'package:invoiceninja_flutter/ui/dashboard/dashboard_date_range_picker.dart';
import 'package:invoiceninja_flutter/ui/dashboard/dashboard_screen_vm.dart';
@ -402,42 +403,39 @@ class DashboardPanels extends StatelessWidget {
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 74),
child: AppScrollbar(
controller: scrollController,
child: ListView(
controller: scrollController,
children: <Widget>[
if (company.isModuleEnabled(EntityType.invoice))
_InvoiceChart(
viewModel: viewModel,
context: context,
onDateSelected: (entityIds) => viewModel
.onSelectionChanged(EntityType.invoice, entityIds)),
if (company.isModuleEnabled(EntityType.invoice))
_paymentChart(
context: context,
onDateSelected: (entityIds) => viewModel
.onSelectionChanged(EntityType.payment, entityIds)),
if (company.isModuleEnabled(EntityType.quote))
_quoteChart(
context: context,
onDateSelected: (entityIds) => viewModel
.onSelectionChanged(EntityType.quote, entityIds)),
if (company.isModuleEnabled(EntityType.task))
_taskChart(
context: context,
onDateSelected: (entityIds) => viewModel
.onSelectionChanged(EntityType.task, entityIds)),
if (company.isModuleEnabled(EntityType.expense))
_expenseChart(
context: context,
onDateSelected: (entityIds) => viewModel
.onSelectionChanged(EntityType.expense, entityIds)),
SizedBox(
height: 500,
)
],
),
child: ScrollableListView(
scrollController: scrollController,
children: <Widget>[
if (company.isModuleEnabled(EntityType.invoice))
_InvoiceChart(
viewModel: viewModel,
context: context,
onDateSelected: (entityIds) => viewModel.onSelectionChanged(
EntityType.invoice, entityIds)),
if (company.isModuleEnabled(EntityType.invoice))
_paymentChart(
context: context,
onDateSelected: (entityIds) => viewModel.onSelectionChanged(
EntityType.payment, entityIds)),
if (company.isModuleEnabled(EntityType.quote))
_quoteChart(
context: context,
onDateSelected: (entityIds) => viewModel.onSelectionChanged(
EntityType.quote, entityIds)),
if (company.isModuleEnabled(EntityType.task))
_taskChart(
context: context,
onDateSelected: (entityIds) => viewModel.onSelectionChanged(
EntityType.task, entityIds)),
if (company.isModuleEnabled(EntityType.expense))
_expenseChart(
context: context,
onDateSelected: (entityIds) => viewModel.onSelectionChanged(
EntityType.expense, entityIds)),
SizedBox(
height: 500,
)
],
),
),
ConstrainedBox(

View File

@ -13,6 +13,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_tab_bar.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/design_picker.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/variables.dart';
import 'package:invoiceninja_flutter/ui/design/edit/design_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/designs.dart';
@ -383,8 +384,7 @@ class _DesignSettingsState extends State<DesignSettings> {
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/document/edit/document_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -92,8 +93,7 @@ class _DocumentEditState extends State<DocumentEdit> {
body: Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
key: ValueKey(viewModel.document.id),
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -14,6 +14,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/project_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/expense/edit/expense_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -113,8 +114,7 @@ class ExpenseEditDetailsState extends State<ExpenseEditDetails> {
onSavePressed: viewModel.onSavePressed,
);
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/expense/edit/expense_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -71,8 +72,7 @@ class ExpenseEditNotesState extends State<ExpenseEditNotes> {
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/expense/edit/expense_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -108,8 +109,7 @@ class ExpenseEditSettingsState extends State<ExpenseEditSettings> {
final company = viewModel.company;
final expense = viewModel.expense;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/FieldGrid.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/expense/view/expense_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:flutter/material.dart';
@ -116,7 +117,7 @@ class ExpenseOverview extends StatelessWidget {
return listTiles;
}
return ListView(
return ScrollableListView(
children: <Widget>[
expense.isConverted
? EntityHeader(

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/color_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/expense_category/edit/expense_category_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -95,7 +96,7 @@ class _ExpenseCategoryEditState extends State<ExpenseCategoryEdit> {
body: Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/redux/expense_category/expense_category_sel
import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/expense_category/view/expense_category_view_vm.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -38,7 +39,7 @@ class _ExpenseCategoryViewState extends State<ExpenseCategoryView> {
isFilter: widget.isFilter,
entity: expenseCategory,
onBackPressed: () => viewModel.onBackPressed(),
body: ListView(
body: ScrollableListView(
children: <Widget>[
EntityHeader(
entity: expenseCategory,

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/group/edit/group_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -95,7 +96,7 @@ class _GroupEditState extends State<GroupEdit> {
key: _formKey,
child: Builder(
builder: (BuildContext context) {
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -11,6 +11,7 @@ import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
import 'package:invoiceninja_flutter/ui/app/document_grid.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/group/view/group_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -75,8 +76,7 @@ class _GroupViewState extends State<GroupView>
body: TabBarView(
controller: _controller,
children: [
ListView(
shrinkWrap: true,
ScrollableListView(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: 16, bottom: 16, right: 16),

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/client_model.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -39,8 +40,7 @@ class InvoiceEditContacts extends StatelessWidget {
});
}
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: contacts.map((contact) {
final invitation = invoice.getInvitationForContact(contact);
return _ContactListTile(

View File

@ -19,6 +19,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/discount_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/presenters/entity_presenter.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/credit/edit/credit_edit_items_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_details_vm.dart';
@ -205,7 +206,7 @@ class InvoiceEditDesktopState extends State<InvoiceEditDesktop>
companySettings: state.company.settings,
);
return ListView(
return ScrollableListView(
key: ValueKey('__invoice_${invoice.id}__'),
children: <Widget>[
Row(

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/design_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/discount_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:flutter/material.dart';
@ -135,7 +136,7 @@ class InvoiceEditDetailsState extends State<InvoiceEditDetails> {
final originalInvoice =
state.getEntity(invoice.entityType, invoice.id) as InvoiceEntity;
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -1,9 +1,9 @@
import 'package:invoiceninja_flutter/ui/app/app_scrollbar.dart';
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/invoice_item_view.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_items_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -29,19 +29,6 @@ class InvoiceEditItems extends StatefulWidget {
class _InvoiceEditItemsState extends State<InvoiceEditItems> {
int selectedItemIndex;
ScrollController _scrollController;
@override
void initState() {
super.initState();
_scrollController = ScrollController();
}
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
void _showInvoiceItemEditor(int lineItemIndex, BuildContext context) {
showDialog<ItemEditDetails>(
@ -83,19 +70,15 @@ class _InvoiceEditItemsState extends State<InvoiceEditItems> {
return HelpText(localization.clickPlusToAddItem);
}
return AppScrollbar(
controller: _scrollController,
child: ListView(
controller: _scrollController,
children: [
for (int i = 0; i < invoice.lineItems.length; i++)
InvoiceItemListTile(
invoice: invoice,
invoiceItem: invoice.lineItems[i],
onTap: () => _showInvoiceItemEditor(i, context),
)
],
),
return ScrollableListView(
children: [
for (int i = 0; i < invoice.lineItems.length; i++)
InvoiceItemListTile(
invoice: invoice,
invoiceItem: invoice.lineItems[i],
onTap: () => _showInvoiceItemEditor(i, context),
)
],
);
}
}

View File

@ -3,6 +3,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_notes_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -89,7 +90,7 @@ class InvoiceEditNotesState extends State<InvoiceEditNotes> {
companySettings: state.company.settings,
);
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -4,6 +4,7 @@ import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/invoice_model.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/invoice/view/invoice_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -19,8 +20,7 @@ class InvoiceViewContacts extends StatelessWidget {
Widget build(BuildContext context) {
final invoice = viewModel.invoice;
return ListView(
shrinkWrap: true,
return ScrollableListView(
padding: const EdgeInsets.all(8),
children: invoice.invitations
.map((invitation) => _InvitationListTile(

View File

@ -15,6 +15,7 @@ import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/invoice_item_view.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/invoice/view/invoice_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:flutter/material.dart';
@ -414,7 +415,7 @@ class InvoiceOverview extends StatelessWidget {
]);
}
return ListView(
return ScrollableListView(
children: widgets,
);
}

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/invoice/view/invoice_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -14,8 +15,7 @@ class InvoiceViewSchedule extends StatelessWidget {
final invoice = viewModel.invoice;
final localization = AppLocalization.of(context);
return ListView(
shrinkWrap: true,
return ScrollableListView(
padding: const EdgeInsets.all(16),
children: [
Row(

View File

@ -13,6 +13,7 @@ import 'package:invoiceninja_flutter/redux/static/static_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/payment/edit/payment_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -326,7 +327,7 @@ class _PaymentEditState extends State<PaymentEdit> {
: localization.editPayment,
onCancelPressed: (context) => viewModel.onCancelPressed(context),
onSavePressed: onSavePressed,
body: ListView(
body: ScrollableListView(
children: [body],
),
);

View File

@ -11,6 +11,7 @@ import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/payment/view/payment_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -80,7 +81,7 @@ class _PaymentViewState extends State<PaymentView> {
child: Column(
children: <Widget>[
Expanded(
child: ListView(
child: ScrollableListView(
children: <Widget>[
EntityHeader(
entity: payment,

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/payment_term/edit/payment_term_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -95,7 +96,7 @@ class _PaymentTermEditState extends State<PaymentTermEdit> {
body: Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/payment_term/view/payment_term_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -27,13 +28,15 @@ class _PaymentTermViewState extends State<PaymentTermView> {
return ViewScaffold(
entity: paymentTerm,
onBackPressed: () => viewModel.onBackPressed(),
body: ListView(children: [
EntityHeader(
entity: paymentTerm,
label: localization.name,
value: paymentTerm.name,
),
]),
body: ScrollableListView(
children: [
EntityHeader(
entity: paymentTerm,
label: localization.name,
value: paymentTerm.name,
),
],
),
);
}
}

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:flutter/foundation.dart';
@ -139,7 +140,7 @@ class _ProductEditState extends State<ProductEdit> {
body: AppForm(
formKey: _formKey,
focusNode: _focusNode,
child: ListView(
child: ScrollableListView(
key: ValueKey(widget.viewModel.product.id),
children: <Widget>[
FormCard(

View File

@ -3,6 +3,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/FieldGrid.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/product/view/product_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -62,7 +63,7 @@ class _ProductOverviewState extends State<ProductOverview> {
value: product.customValue2);
}
return ListView(
return ScrollableListView(
children: <Widget>[
EntityHeader(
entity: product,

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/project/edit/project_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -142,7 +143,7 @@ class _ProjectEditState extends State<ProjectEdit> {
body: Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
return ScrollableListView(
key: ValueKey(viewModel.project.id),
children: <Widget>[
FormCard(

View File

@ -11,6 +11,7 @@ import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/project/view/project_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -134,7 +135,7 @@ class _ProjectOverviewState extends State<ProjectOverview> {
return RefreshIndicator(
onRefresh: () => widget.viewModel.onRefreshed(context),
child: ListView(
child: ScrollableListView(
children: _buildView(),
),
);

View File

@ -21,6 +21,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
import 'package:invoiceninja_flutter/ui/app/history_drawer_vm.dart';
import 'package:invoiceninja_flutter/ui/app/menu_drawer_vm.dart';
import 'package:invoiceninja_flutter/ui/app/presenters/entity_presenter.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/reports/report_charts.dart';
import 'package:invoiceninja_flutter/ui/reports/reports_screen_vm.dart';
import 'package:invoiceninja_flutter/utils/dates.dart';
@ -247,7 +248,7 @@ class ReportsScreen extends StatelessWidget {
),
],
),
body: ListView(
body: ScrollableListView(
key: ValueKey(
'${viewModel.state.company.id}_${viewModel.state.isSaving}_${reportsState.report}_${reportsState.group}'),
children: <Widget>[

View File

@ -15,6 +15,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/account_management_vm.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -99,7 +100,7 @@ class _AccountManagementState extends State<AccountManagement>
tabController: _controller,
children: <Widget>[
_AccountOverview(viewModel: viewModel),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
// TODO change to kModules.keys
@ -123,7 +124,7 @@ class _AccountManagementState extends State<AccountManagement>
}).toList()),
],
),
ListView(
ScrollableListView(
children: [
FormCard(
children: [
@ -197,8 +198,7 @@ class _AccountOverview extends StatelessWidget {
final company = viewModel.company;
final companies = state.companies;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
AppHeader(
label: localization.plan,

View File

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/buy_now_buttons_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
@ -76,7 +77,7 @@ class _BuyNowButtonsState extends State<BuyNowButtons> {
),
body: Form(
key: _formKey,
child: ListView(
child: ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -13,6 +13,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/client_portal_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -205,7 +206,7 @@ class _ClientPortalState extends State<ClientPortal>
formKey: _formKey,
focusNode: _focusNode,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
/*
if (!state.settingsUIState.isFiltered)
@ -361,7 +362,7 @@ class _ClientPortalState extends State<ClientPortal>
)
],
),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[
@ -425,7 +426,7 @@ class _ClientPortalState extends State<ClientPortal>
),
],
),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[
@ -453,7 +454,7 @@ class _ClientPortalState extends State<ClientPortal>
),
],
),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -17,6 +17,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/resources/cached_image.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/company_details_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -239,7 +240,7 @@ class _CompanyDetailsState extends State<CompanyDetails>
formKey: _formKey,
tabController: _controller,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[
@ -339,7 +340,7 @@ class _CompanyDetailsState extends State<CompanyDetails>
],
),
AutofillGroup(
child: ListView(
child: ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[
@ -397,8 +398,7 @@ class _CompanyDetailsState extends State<CompanyDetails>
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: ListView(
shrinkWrap: true,
child: ScrollableListView(
children: <Widget>[
Builder(
builder: (context) {
@ -452,7 +452,7 @@ class _CompanyDetailsState extends State<CompanyDetails>
],
),
),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
crossAxisAlignment: CrossAxisAlignment.stretch,

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/custom_fields_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -97,7 +98,7 @@ class _CustomFieldsState extends State<CustomFields>
formKey: _formKey,
focusNode: _focusNode,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
CustomFieldsSettings(
viewModel: viewModel,
@ -105,7 +106,7 @@ class _CustomFieldsState extends State<CustomFields>
),
],
),
ListView(children: <Widget>[
ScrollableListView(children: <Widget>[
CustomFieldsSettings(
viewModel: viewModel,
fieldType: CustomFieldType.client,
@ -115,7 +116,7 @@ class _CustomFieldsState extends State<CustomFields>
fieldType: CustomFieldType.contact,
),
]),
ListView(
ScrollableListView(
children: <Widget>[
CustomFieldsSettings(
viewModel: viewModel,
@ -123,7 +124,7 @@ class _CustomFieldsState extends State<CustomFields>
),
],
),
ListView(children: <Widget>[
ScrollableListView(children: <Widget>[
CustomFieldsSettings(
viewModel: viewModel,
fieldType: CustomFieldType.invoice,
@ -134,13 +135,13 @@ class _CustomFieldsState extends State<CustomFields>
showChargeTaxes: true,
),
]),
ListView(children: <Widget>[
ScrollableListView(children: <Widget>[
CustomFieldsSettings(
viewModel: viewModel,
fieldType: CustomFieldType.payment,
),
]),
ListView(children: <Widget>[
ScrollableListView(children: <Widget>[
CustomFieldsSettings(
viewModel: viewModel,
fieldType: CustomFieldType.user,

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/redux/ui/pref_state.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/device_settings_list_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
@ -42,7 +43,7 @@ class _DeviceSettingsState extends State<DeviceSettings> {
),
body: Form(
key: _formKey,
child: ListView(
child: ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/generated_numbers_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -231,7 +232,7 @@ class _GeneratedNumbersState extends State<GeneratedNumbers>
formKey: _formKey,
focusNode: _focusNode,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[
@ -487,7 +488,7 @@ class _EntityNumberSettingsState extends State<EntityNumberSettings> {
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
return ListView(
return ScrollableListView(
children: [
FormCard(
children: <Widget>[

View File

@ -16,6 +16,7 @@ import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/import_export_vm.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/files.dart';
@ -69,7 +70,7 @@ class _ImportExportState extends State<ImportExport> {
body: AppForm(
formKey: _formKey,
focusNode: _focusNode,
child: ListView(
child: ScrollableListView(
children: [
if (_response == null)
_FileImport(
@ -399,10 +400,12 @@ class __FileMapperState extends State<_FileMapper> {
final state = StoreProvider.of<AppState>(context).state;
final credentials = state.credentials;
final url = '${credentials.url}/import';
final convertedMapping=<String,ImportRequestMapping>{};
final convertedMapping = <String, ImportRequestMapping>{};
for(MapEntry<String,Map<int,String>> e in _mapping.entries){
convertedMapping[e.key] = new ImportRequestMapping(BuiltMap(e.value));
for (MapEntry<String, Map<int, String>> e
in _mapping.entries) {
convertedMapping[e.key] =
new ImportRequestMapping(BuiltMap(e.value));
}
setState(() => _isLoading = true);

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/learn_more.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/integrations_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -80,7 +81,7 @@ class _IntegrationSettingsState extends State<IntegrationSettings> {
return EditScaffold(
title: localization.integrations,
onSavePressed: widget.viewModel.onSavePressed,
body: ListView(
body: ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -24,6 +24,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/color_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/design_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/learn_more.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/invoice_design_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/fonts.dart';
@ -108,7 +109,7 @@ class _InvoiceDesignState extends State<InvoiceDesign>
formKey: _formKey,
focusNode: _focusNode,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 16, bottom: 10, left: 16),
@ -229,7 +230,7 @@ class _InvoiceDesignState extends State<InvoiceDesign>
),
],
),
ListView(
ScrollableListView(
padding: const EdgeInsets.all(10),
children: <Widget>[
FormCard(

View File

@ -14,6 +14,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/learn_more.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/localization_vm.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
@ -128,7 +129,7 @@ class _LocalizationSettingsState extends State<LocalizationSettings>
focusNode: _focusNode,
tabController: _controller,
children: <Widget>[
ListView(
ScrollableListView(
children: [
FormCard(
children: <Widget>[
@ -249,7 +250,7 @@ class _LocalizationSettingsState extends State<LocalizationSettings>
),
],
),
ListView(
ScrollableListView(
children: [
FormCard(
crossAxisAlignment: CrossAxisAlignment.start,

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/app/app_scrollbar.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_filter.dart';
import 'package:invoiceninja_flutter/ui/app/lists/selected_indicator.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/settings_list_vm.dart';
import 'package:invoiceninja_flutter/utils/icons.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -50,7 +51,7 @@ class _SettingsListState extends State<SettingsList> {
}
if (!state.userCompany.isAdmin)
return ListView(
return ScrollableListView(
children: <Widget>[
SettingsListTile(
section: kSettingsUserDetails,
@ -68,144 +69,142 @@ class _SettingsListState extends State<SettingsList> {
filter: settingsUIState.filter,
);
return AppScrollbar(
controller: _scrollController,
child: ListView(
controller: _scrollController,
children: <Widget>[
if (settingsUIState.isFiltered)
Container(
color: Colors.orangeAccent,
child: ListFilterMessage(
filterEntityType: settingsUIState.entityType,
filterEntityId: settingsUIState.entityType == EntityType.group
? settingsUIState.group.id
: settingsUIState.client.id,
onPressed: settingsUIState.entityType == EntityType.client
? widget.viewModel.onViewClientPressed
: widget.viewModel.onViewGroupPressed,
onClearPressed: widget.viewModel.onClearSettingsFilterPressed,
isSettings: true,
),
),
return ScrollableListView(
scrollController: _scrollController,
children: <Widget>[
if (settingsUIState.isFiltered)
Container(
color: Theme.of(context).backgroundColor,
padding: const EdgeInsets.only(left: 19, top: 16, bottom: 16),
child: Text(
localization.basicSettings,
style: Theme.of(context).textTheme.bodyText2,
color: Colors.orangeAccent,
child: ListFilterMessage(
filterEntityType: settingsUIState.entityType,
filterEntityId: settingsUIState.entityType == EntityType.group
? settingsUIState.group.id
: settingsUIState.client.id,
onPressed: settingsUIState.entityType == EntityType.client
? widget.viewModel.onViewClientPressed
: widget.viewModel.onViewGroupPressed,
onClearPressed: widget.viewModel.onClearSettingsFilterPressed,
isSettings: true,
),
),
Container(
color: Theme.of(context).backgroundColor,
padding: const EdgeInsets.only(left: 19, top: 16, bottom: 16),
child: Text(
localization.basicSettings,
style: Theme.of(context).textTheme.bodyText2,
),
),
SettingsListTile(
section: kSettingsCompanyDetails,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsCompanyDetails,
section: kSettingsUserDetails,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsUserDetails,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsLocalization,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsOnlinePayments,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsLocalization,
section: kSettingsTaxSettings,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsOnlinePayments,
section: kSettingsProducts,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsTaxSettings,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsProducts,
viewModel: widget.viewModel,
),
if (state.company.isModuleEnabled(EntityType.task))
SettingsListTile(
section: kSettingsTasks,
viewModel: widget.viewModel,
),
if (showAll && state.company.isModuleEnabled(EntityType.expense))
SettingsListTile(
section: kSettingsExpenses,
viewModel: widget.viewModel,
),
// TODO Re-entable
/*
if (state.company.isModuleEnabled(EntityType.task))
SettingsListTile(
section: kSettingsTasks,
viewModel: widget.viewModel,
),
if (showAll && state.company.isModuleEnabled(EntityType.expense))
SettingsListTile(
section: kSettingsExpenses,
viewModel: widget.viewModel,
),
// TODO Re-entable
/*
if (showAll)
SettingsListTile(
section: kSettingsIntegrations,
viewModel: viewModel,
),
*/
if (showAll)
SettingsListTile(
section: kSettingsImportExport,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsDeviceSettings,
viewModel: widget.viewModel,
),
if (showAll && state.userCompany.isOwner)
SettingsListTile(
section: kSettingsAccountManagement,
viewModel: widget.viewModel,
),
Container(
color: Theme.of(context).backgroundColor,
padding: const EdgeInsets.only(left: 19, top: 16, bottom: 16),
child: Text(
localization.advancedSettings,
style: Theme.of(context).textTheme.bodyText2,
),
if (showAll)
SettingsListTile(
section: kSettingsImportExport,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsDeviceSettings,
viewModel: widget.viewModel,
),
if (showAll && state.userCompany.isOwner)
SettingsListTile(
section: kSettingsAccountManagement,
viewModel: widget.viewModel,
),
Container(
color: Theme.of(context).backgroundColor,
padding: const EdgeInsets.only(left: 19, top: 16, bottom: 16),
child: Text(
localization.advancedSettings,
style: Theme.of(context).textTheme.bodyText2,
),
),
SettingsListTile(
section: kSettingsInvoiceDesign,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsInvoiceDesign,
section: kSettingsCustomFields,
viewModel: widget.viewModel,
),
if (showAll)
SettingsListTile(
section: kSettingsCustomFields,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsGeneratedNumbers,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsEmailSettings,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsClientPortal,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsTemplatesAndReminders,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsGroupSettings,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsWorkflowSettings,
viewModel: widget.viewModel,
),
/*
SettingsListTile(
section: kSettingsGeneratedNumbers,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsEmailSettings,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsClientPortal,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsTemplatesAndReminders,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsGroupSettings,
viewModel: widget.viewModel,
),
SettingsListTile(
section: kSettingsWorkflowSettings,
viewModel: widget.viewModel,
),
/*
if (showAll)
SettingsListTile(
section: kSettingsBuyNowButtons,
viewModel: viewModel,
),
*/
/*
/*
SettingsListTile(
section: kSettingsCreditCardsAndBanks,
viewModel: viewModel,
@ -215,13 +214,12 @@ class _SettingsListState extends State<SettingsList> {
viewModel: viewModel,
),
*/
if (showAll)
SettingsListTile(
section: kSettingsUserManagement,
viewModel: widget.viewModel,
),
],
),
if (showAll)
SettingsListTile(
section: kSettingsUserManagement,
viewModel: widget.viewModel,
),
],
);
}
}
@ -507,7 +505,7 @@ class SettingsSearch extends StatelessWidget {
@override
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
return ListView(
return ScrollableListView(
children: <Widget>[
for (var section in map.keys)
for (int i = 0; i < map[section].length; i++)

View File

@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/variables.dart';
import 'package:invoiceninja_flutter/ui/settings/templates_and_reminders_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -245,7 +246,7 @@ class _TemplatesAndRemindersState extends State<TemplatesAndReminders>
formKey: _formKey,
focusNode: _focusNode,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
FormCard(children: <Widget>[
AppDropdownButton<EmailTemplate>(

View File

@ -15,6 +15,7 @@ import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/forms/notification_settings.dart';
import 'package:invoiceninja_flutter/ui/app/forms/password_field.dart';
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/user_details_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
@ -155,7 +156,7 @@ class _UserDetailsState extends State<UserDetails>
formKey: _formKey,
tabController: _controller,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
FormCard(children: <Widget>[
DecoratedFormField(
@ -270,7 +271,7 @@ class _UserDetailsState extends State<UserDetails>
),
],
),
ListView(
ScrollableListView(
children: <Widget>[
NotificationSettings(
user: user,

View File

@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/settings/workflow_vm.dart';
import 'package:invoiceninja_flutter/utils/icons.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -86,7 +87,7 @@ class _WorkflowSettingsState extends State<WorkflowSettings>
formKey: _formKey,
focusNode: _focusNode,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
FormCard(children: <Widget>[
BoolDropdownButton(
@ -129,7 +130,7 @@ class _WorkflowSettingsState extends State<WorkflowSettings>
),
],
),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -13,6 +13,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/dynamic_selector.dart';
import 'package:invoiceninja_flutter/ui/app/forms/project_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/time_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_items_desktop.dart';
import 'package:invoiceninja_flutter/ui/task/edit/task_edit_details_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -134,7 +135,7 @@ class _TaskEditDesktopState extends State<TaskEditDesktop> {
? client.currencyId
: company.currencyId);
return ListView(
return ScrollableListView(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/dynamic_selector.dart';
import 'package:invoiceninja_flutter/ui/app/forms/project_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/task/edit/task_edit_details_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -118,7 +119,7 @@ class _TaskEditDetailsState extends State<TaskEditDetails> {
? client.currencyId
: company.currencyId);
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/duration_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/time_picker.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
import 'package:invoiceninja_flutter/ui/app/responsive_padding.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/task/edit/task_edit_times_vm.dart';
import 'package:invoiceninja_flutter/ui/task/task_time_view.dart';
import 'package:flutter/material.dart';
@ -74,7 +75,7 @@ class _TaskEditTimesState extends State<TaskEditTimes> {
onTap: (context) => _showTaskTimeEditor(taskTime, context),
));
return ListView(
return ScrollableListView(
children: taskTimeWidgets.toList(),
);
}

View File

@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/task/task_time_view.dart';
import 'package:invoiceninja_flutter/ui/task/view/task_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -181,7 +182,7 @@ class _TaskOverviewState extends State<TaskOverview> {
return RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context),
child: ListView(
child: ScrollableListView(
children: _buildView(),
),
);

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/color_picker.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/task_status/edit/task_status_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -93,7 +94,7 @@ class _TaskStatusEditState extends State<TaskStatusEdit> {
body: Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/redux/task_status/task_status_selectors.dar
import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/task_status/view/task_status_view_vm.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -38,7 +39,7 @@ class _TaskStatusViewState extends State<TaskStatusView> {
isFilter: widget.isFilter,
entity: taskStatus,
onBackPressed: () => viewModel.onBackPressed(),
body: ListView(
body: ScrollableListView(
children: <Widget>[
EntityHeader(
entity: taskStatus,

View File

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/tax_rate/view/tax_rate_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -31,7 +32,7 @@ class _TaxRateViewState extends State<TaxRateView> {
isFilter: widget.isFilter,
entity: taxRate,
onBackPressed: () => viewModel.onBackPressed(),
body: ListView(children: [
body: ScrollableListView(children: [
EntityHeader(
entity: taxRate,
label: localization.name,

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/token/edit/token_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -90,7 +91,7 @@ class _TokenEditState extends State<TokenEdit> {
body: Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/data/models/token_model.dart';
import 'package:invoiceninja_flutter/redux/token/token_actions.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/token/view/token_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -36,7 +37,7 @@ class _TokenViewState extends State<TokenView> {
isFilter: widget.isFilter,
onBackPressed: () => viewModel.onBackPressed(),
entity: token,
body: ListView(
body: ScrollableListView(
children: <Widget>[
EntityHeader(
entity: token,

View File

@ -10,6 +10,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/notification_settings.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/user/edit/user_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -179,7 +180,7 @@ class _UserEditState extends State<UserEdit>
formKey: _formKey,
tabController: _controller,
children: <Widget>[
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[
@ -245,7 +246,7 @@ class _UserEditState extends State<UserEdit>
),
],
),
ListView(
ScrollableListView(
children: <Widget>[
NotificationSettings(
user: user,
@ -256,7 +257,7 @@ class _UserEditState extends State<UserEdit>
),
],
),
ListView(
ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -13,6 +13,7 @@ import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/user/view/user_view_vm.dart';
import 'package:flutter/material.dart';
@ -39,8 +40,7 @@ class UserView extends StatelessWidget {
isFilter: isFilter,
entity: user,
onBackPressed: () => viewModel.onBackPressed(),
body: ListView(
shrinkWrap: true,
body: ScrollableListView(
children: <Widget>[
if (user.emailVerifiedAt == null)
IconMessage(localization.emailSentToConfirmEmail,

View File

@ -3,6 +3,7 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -86,7 +87,7 @@ class VendorEditAddressState extends State<VendorEditAddress> {
final viewModel = widget.viewModel;
final vendor = viewModel.vendor;
return ListView(shrinkWrap: true, children: <Widget>[
return ScrollableListView(children: <Widget>[
FormCard(
children: <Widget>[
DecoratedFormField(

View File

@ -7,6 +7,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_contacts_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/contacts.dart';
@ -85,7 +86,7 @@ class _VendorEditContactsState extends State<VendorEditContacts> {
});
}
return ListView(
return ScrollableListView(
children: []
..addAll(contacts)
..add(Padding(

View File

@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/user_picker.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/contacts.dart';
@ -122,8 +123,7 @@ class VendorEditDetailsState extends State<VendorEditDetails> {
final viewModel = widget.viewModel;
final vendor = viewModel.vendor;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -3,6 +3,7 @@ import 'package:flutter/services.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -77,8 +78,7 @@ class VendorEditNotesState extends State<VendorEditNotes> {
final staticState = viewModel.state.staticState;
final vendor = viewModel.vendor;
return ListView(
shrinkWrap: true,
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/lists/app_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
@ -149,7 +150,7 @@ class _VendorViewDetailsState extends State<VendorViewDetails> {
return listTiles;
}
return ListView(
return ScrollableListView(
children: _buildDetailsList(),
);
}

View File

@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/ui/app/FieldGrid.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/vendor/view/vendor_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:flutter/material.dart';
@ -56,7 +57,7 @@ class VendorOverview extends StatelessWidget {
value: vendor.customValue2);
}
return ListView(
return ScrollableListView(
children: <Widget>[
EntityHeader(
entity: vendor,

View File

@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/webhook/edit/webhook_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
@ -93,7 +94,7 @@ class _WebhookEditState extends State<WebhookEdit> {
body: Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/webhook/webhook_actions.dart';
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
import 'package:invoiceninja_flutter/ui/webhook/view/webhook_view_vm.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -34,7 +35,7 @@ class _WebhookViewState extends State<WebhookView> {
isFilter: widget.isFilter,
onBackPressed: () => viewModel.onBackPressed(),
entity: webhook,
body: ListView(
body: ScrollableListView(
children: <Widget>[
EntityHeader(
entity: webhook,

View File

@ -1,6 +1,7 @@
// https://hillelcoren.com/2018/06/12/flutter-complex-forms-with-multiple-tabs-and-relationships/
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
// Sample entity classes
@ -229,7 +230,7 @@ class ContactsPageState extends State<ContactsPage>
),
));
return ListView(
return ScrollableListView(
children: items,
);
}

View File

@ -2,6 +2,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:redux/redux.dart';
import 'package:redux_logging/redux_logging.dart';
@ -251,7 +252,7 @@ class ContactsPage extends StatelessWidget {
//key: Key('__contact_${contact.id}__'),
index: store.state.client.contacts.indexOf(contact)));
return ListView(
return ScrollableListView(
children: []
..addAll(contacts)
..add(Padding(

View File

@ -92,7 +92,7 @@ class _StubEditState extends State<StubEdit> {
body:Form(
key: _formKey,
child: Builder(builder: (BuildContext context) {
return ListView(
return ScrollableListView(
children: <Widget>[
FormCard(
children: <Widget>[

View File

@ -27,7 +27,7 @@ class _StubViewState extends State<StubView> {
return ViewScaffold(
isFilter: widget.isFilter,
entity: stub,
body: ListView(
body: ScrollableListView(
children: <Widget>[
],
),