Dashboard

This commit is contained in:
unknown 2018-08-02 12:56:09 +03:00
parent 6b05865390
commit 728a06c720
7 changed files with 158 additions and 1 deletions

View File

@ -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),
);
},
);
}
}

View File

@ -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();
}
}

View File

@ -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';

View File

@ -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(),
);
*/
}
}

View File

@ -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<DashboardView>
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: <Widget>[
RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context),
//child: DashboardOverview(viewModel: viewModel),
child: DashboardPanels(
viewModel: viewModel,
),
),
RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context),
child: DashboardActivity(viewModel: viewModel),
),
],
);
}
}

View File

@ -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<AppState, DashboardVM>(
converter: DashboardVM.fromStore,
builder: (context, vm) {
return DashboardPanels(
return DashboardView(
viewModel: vm
);
},

View File

@ -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'];