diff --git a/lib/ui/dashboard/dashboard_activity.dart b/lib/ui/dashboard/dashboard_activity.dart new file mode 100644 index 000000000..6b2e5f458 --- /dev/null +++ b/lib/ui/dashboard/dashboard_activity.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_vm.dart'; + +class DashboardActivity extends StatelessWidget { + + const DashboardActivity({ + Key key, + @required this.viewModel, + }) : super(key: key); + + final DashboardVM viewModel; + + @override + Widget build(BuildContext context) { + if (!viewModel.dashboardState.isLoaded) { + return LoadingIndicator(); + } + + final activities = viewModel.dashboardState.data.activities; + + return ListView.builder( + itemCount: activities.length, + itemBuilder: (BuildContext context, index) { + final activity = activities[index]; + return ListTile( + title: Text(activity.key), + ); + }, + ); + } +} diff --git a/lib/ui/dashboard/dashboard_overview.dart b/lib/ui/dashboard/dashboard_overview.dart new file mode 100644 index 000000000..618ebb326 --- /dev/null +++ b/lib/ui/dashboard/dashboard_overview.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_vm.dart'; + +class DashboardOverview extends StatelessWidget { + + const DashboardOverview({ + Key key, + @required this.viewModel, + }) : super(key: key); + + final DashboardVM viewModel; + + @override + Widget build(BuildContext context) { + if (!viewModel.dashboardState.isLoaded) { + return LoadingIndicator(); + } + + return new Container(); + } +} diff --git a/lib/ui/dashboard/dashboard_panels.dart b/lib/ui/dashboard/dashboard_panels.dart index ce39cf1bc..449b1f982 100644 --- a/lib/ui/dashboard/dashboard_panels.dart +++ b/lib/ui/dashboard/dashboard_panels.dart @@ -1,3 +1,5 @@ +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_activity.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_overview.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; diff --git a/lib/ui/dashboard/dashboard_screen.dart b/lib/ui/dashboard/dashboard_screen.dart index aa8b67501..9d1d85578 100644 --- a/lib/ui/dashboard/dashboard_screen.dart +++ b/lib/ui/dashboard/dashboard_screen.dart @@ -9,6 +9,9 @@ class DashboardScreen extends StatelessWidget { @override Widget build(BuildContext context) { + return DashboardBuilder(); + + /* return Scaffold( appBar: AppBar( title: Text(AppLocalization.of(context).dashboard), @@ -16,5 +19,6 @@ class DashboardScreen extends StatelessWidget { drawer: AppDrawerBuilder(), body: DashboardBuilder(), ); + */ } } diff --git a/lib/ui/dashboard/dashboard_view.dart b/lib/ui/dashboard/dashboard_view.dart new file mode 100644 index 000000000..fd4d063a3 --- /dev/null +++ b/lib/ui/dashboard/dashboard_view.dart @@ -0,0 +1,94 @@ +import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/ui/app/app_drawer_vm.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_activity.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_overview.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_panels.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_vm.dart'; +import 'package:invoiceninja_flutter/utils/localization.dart'; + +class DashboardView extends StatefulWidget { + final DashboardVM viewModel; + + const DashboardView({ + Key key, + @required this.viewModel, + }) : super(key: key); + + @override + _DashboardViewState createState() => new _DashboardViewState(); +} + +class _DashboardViewState extends State + with SingleTickerProviderStateMixin { + TabController _controller; + + @override + void initState() { + super.initState(); + _controller = TabController(vsync: this, length: 2); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final localization = AppLocalization.of(context); + + return Scaffold( + drawer: AppDrawerBuilder(), + appBar: AppBar( + title: Text(AppLocalization.of(context).dashboard), + bottom: TabBar( + controller: _controller, + tabs: [ + Tab( + text: localization.overview, + ), + Tab( + text: localization.activity, + ), + ], + ), + ), + body: CustomTabBarView( + viewModel: widget.viewModel, + controller: _controller, + ), + ); + } +} + + +class CustomTabBarView extends StatelessWidget { + const CustomTabBarView({ + @required this.viewModel, + @required this.controller, + }); + + final DashboardVM viewModel; + final TabController controller; + + @override + Widget build(BuildContext context) { + return TabBarView( + controller: controller, + children: [ + RefreshIndicator( + onRefresh: () => viewModel.onRefreshed(context), + //child: DashboardOverview(viewModel: viewModel), + child: DashboardPanels( + viewModel: viewModel, + ), + ), + RefreshIndicator( + onRefresh: () => viewModel.onRefreshed(context), + child: DashboardActivity(viewModel: viewModel), + ), + ], + ); + } +} diff --git a/lib/ui/dashboard/dashboard_vm.dart b/lib/ui/dashboard/dashboard_vm.dart index 7df348e26..177670d30 100644 --- a/lib/ui/dashboard/dashboard_vm.dart +++ b/lib/ui/dashboard/dashboard_vm.dart @@ -6,6 +6,7 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/redux/dashboard/dashboard_actions.dart'; import 'package:invoiceninja_flutter/ui/app/snackbar_row.dart'; +import 'package:invoiceninja_flutter/ui/dashboard/dashboard_view.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:redux/redux.dart'; import 'package:invoiceninja_flutter/ui/dashboard/dashboard_panels.dart'; @@ -20,7 +21,7 @@ class DashboardBuilder extends StatelessWidget { return StoreConnector( converter: DashboardVM.fromStore, builder: (context, vm) { - return DashboardPanels( + return DashboardView( viewModel: vm ); }, diff --git a/lib/utils/localization.dart b/lib/utils/localization.dart index afef4e182..d35b6e05d 100644 --- a/lib/utils/localization.dart +++ b/lib/utils/localization.dart @@ -175,6 +175,7 @@ class AppLocalization { 'restart_app_to_apply_change': 'Restart the app to apply the change', 'refresh_data': 'Refresh Data', 'blank_contact': 'Blank Contact', + 'activity': 'Activity', 'payment': 'Payment', 'payments': 'Payments', @@ -360,6 +361,7 @@ class AppLocalization { String get restartAppToApplyChange => _localizedValues[locale.languageCode]['restart_app_to_apply_change']; String get refreshData => _localizedValues[locale.languageCode]['refresh_data']; String get blankContact => _localizedValues[locale.languageCode]['blank_contact']; + String get activity => _localizedValues[locale.languageCode]['activity']; String get payment => _localizedValues[locale.languageCode]['payment']; String get payments => _localizedValues[locale.languageCode]['payments'];