Fix imports
This commit is contained in:
parent
cc83239321
commit
1811c15b82
|
|
@ -2,7 +2,7 @@ import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import '../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
//import 'package:built_redux_sample/models/serializers.dart';
|
//import 'package:built_redux_sample/models/serializers.dart';
|
||||||
|
|
||||||
/// Loads and saves a List of Products using a text file stored on the device.
|
/// Loads and saves a List of Products using a text file stored on the device.
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@ import 'dart:async';
|
||||||
import 'dart:core';
|
import 'dart:core';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
import '../../data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
import '../../data/repositories/repositories.dart';
|
import 'package:invoiceninja/data/repositories/repositories.dart';
|
||||||
import '../../data/file_storage.dart';
|
import 'package:invoiceninja/data/file_storage.dart';
|
||||||
import '../../data/web_client.dart';
|
import 'package:invoiceninja/data/web_client.dart';
|
||||||
|
|
||||||
/// A class that glues together our local file storage and web client. It has a
|
/// A class that glues together our local file storage and web client. It has a
|
||||||
/// clear responsibility: Load Products and Persist products.
|
/// clear responsibility: Load Products and Persist products.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:core';
|
import 'dart:core';
|
||||||
|
|
||||||
import '../../data/models/entities.dart';
|
import 'package:invoiceninja/data/models/entities.dart';
|
||||||
|
|
||||||
/// A class that Loads and Persists products. The data layer of the app.
|
/// A class that Loads and Persists products. The data layer of the app.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import '../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
|
||||||
/// A class that is meant to represent a Web Service you would call to fetch
|
/// A class that is meant to represent a Web Service you would call to fetch
|
||||||
/// and persist Products to and from the cloud.
|
/// and persist Products to and from the cloud.
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ class NinjaKeys {
|
||||||
static Key snackbarAction(String id) => Key('__snackbar_action_${id}__');
|
static Key snackbarAction(String id) => Key('__snackbar_action_${id}__');
|
||||||
|
|
||||||
static final dashboard = const Key('__dashboard__');
|
static final dashboard = const Key('__dashboard__');
|
||||||
|
static final loginScreen = const Key('__login_screen__');
|
||||||
static final clientList = const Key('__client_list__');
|
static final clientList = const Key('__client_list__');
|
||||||
static final productHome = const Key('__product_home__');
|
static final productHome = const Key('__product_home__');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,10 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import 'redux/app/app_state.dart';
|
import 'redux/app/app_state.dart';
|
||||||
import 'ui/dashboard.dart';
|
import 'package:invoiceninja/ui/dashboard_screen.dart';
|
||||||
import 'ui/client/client_list.dart';
|
import 'package:invoiceninja/ui/client/client_list.dart';
|
||||||
import 'ui/product/product_home.dart';
|
import 'package:invoiceninja/ui/product/product_screen.dart';
|
||||||
|
import 'package:invoiceninja/ui/app/login_screen.dart';
|
||||||
import 'routes.dart';
|
import 'routes.dart';
|
||||||
import 'redux/product/product_actions.dart';
|
import 'redux/product/product_actions.dart';
|
||||||
import 'redux/product/product_middleware.dart';
|
import 'redux/product/product_middleware.dart';
|
||||||
|
|
@ -39,6 +40,13 @@ class InvoiceNinjaApp extends StatelessWidget {
|
||||||
theme: new ThemeData.dark(),
|
theme: new ThemeData.dark(),
|
||||||
title: 'Invoice Ninja',
|
title: 'Invoice Ninja',
|
||||||
routes: {
|
routes: {
|
||||||
|
NinjaRoutes.login: (context) {
|
||||||
|
return StoreBuilder<AppState>(
|
||||||
|
builder: (context, store) {
|
||||||
|
return LoginScreen();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
NinjaRoutes.dashboard: (context) {
|
NinjaRoutes.dashboard: (context) {
|
||||||
return StoreBuilder<AppState>(
|
return StoreBuilder<AppState>(
|
||||||
builder: (context, store) {
|
builder: (context, store) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import '../../redux/app/app_state.dart';
|
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||||
import '../../redux/app/loading_reducer.dart';
|
import 'package:invoiceninja/redux/app/loading_reducer.dart';
|
||||||
import '../../redux/product/product_reducer.dart';
|
import 'package:invoiceninja/redux/product/product_reducer.dart';
|
||||||
|
|
||||||
// We create the State reducer by combining many smaller reducers into one!
|
// We create the State reducer by combining many smaller reducers into one!
|
||||||
AppState appReducer(AppState state, action) {
|
AppState appReducer(AppState state, action) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
|
||||||
@immutable
|
@immutable
|
||||||
class AppState {
|
class AppState {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import '../../redux/product/product_actions.dart';
|
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||||
|
|
||||||
final loadingReducer = combineReducers<bool>([
|
final loadingReducer = combineReducers<bool>([
|
||||||
TypedReducer<bool, ProductsLoadedAction>(_setLoaded),
|
TypedReducer<bool, ProductsLoadedAction>(_setLoaded),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
|
||||||
class LoadProductsAction {}
|
class LoadProductsAction {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import '../../redux/product/product_actions.dart';
|
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||||
import '../../redux/app/app_state.dart';
|
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||||
import '../../data/repositories/repositories.dart';
|
import 'package:invoiceninja/data/repositories/repositories.dart';
|
||||||
import '../../data/repositories/product_repository.dart';
|
import 'package:invoiceninja/data/repositories/product_repository.dart';
|
||||||
import '../../data/file_storage.dart';
|
import 'package:invoiceninja/data/file_storage.dart';
|
||||||
import '../../redux/product/product_selectors.dart';
|
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||||
|
|
||||||
List<Middleware<AppState>> createStoreProductsMiddleware([
|
List<Middleware<AppState>> createStoreProductsMiddleware([
|
||||||
ProductsRepository repository = const ProductsRepositoryFlutter(
|
ProductsRepository repository = const ProductsRepositoryFlutter(
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import '../../redux/product/product_actions.dart';
|
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import '../../redux/product/product_selectors.dart';
|
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||||
|
|
||||||
final productsReducer = combineReducers<List<ProductEntity>>([
|
final productsReducer = combineReducers<List<ProductEntity>>([
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import '../../redux/app/app_state.dart';
|
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||||
import '../../utils/optional.dart';
|
import 'package:invoiceninja/utils/optional.dart';
|
||||||
|
|
||||||
|
|
||||||
bool isLoadingSelector(AppState state) => state.isLoading;
|
bool isLoadingSelector(AppState state) => state.isLoading;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
class NinjaRoutes {
|
class NinjaRoutes {
|
||||||
static final dashboard = "/";
|
static final login = "/";
|
||||||
|
static final dashboard = "/dashboard";
|
||||||
static final clientList = "/clientList";
|
static final clientList = "/clientList";
|
||||||
static final productList = "/productList";
|
static final productList = "/productList";
|
||||||
}
|
}
|
||||||
|
|
@ -2,8 +2,8 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import '../../redux/app/app_state.dart';
|
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||||
import '../../redux/product/product_selectors.dart';
|
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||||
|
|
||||||
class AppLoading extends StatelessWidget {
|
class AppLoading extends StatelessWidget {
|
||||||
final Function(BuildContext context, bool isLoading) builder;
|
final Function(BuildContext context, bool isLoading) builder;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class LoginScreen extends StatefulWidget {
|
||||||
|
static String tag = 'login-page';
|
||||||
|
@override
|
||||||
|
_LoginScreenState createState() => new _LoginScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LoginScreenState extends State<LoginScreen> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final email = TextFormField(
|
||||||
|
keyboardType: TextInputType.emailAddress,
|
||||||
|
autofocus: false,
|
||||||
|
validator: (value) {
|
||||||
|
if (value.isEmpty) {
|
||||||
|
return 'This field is required';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText: 'Email',
|
||||||
|
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final password = TextFormField(
|
||||||
|
autofocus: false,
|
||||||
|
obscureText: true,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText: 'Password',
|
||||||
|
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final loginButton = Padding(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 16.0),
|
||||||
|
child: Material(
|
||||||
|
//borderRadius: BorderRadius.circular(30.0),
|
||||||
|
shadowColor: Colors.lightBlueAccent.shade100,
|
||||||
|
elevation: 5.0,
|
||||||
|
child: MaterialButton(
|
||||||
|
minWidth: 200.0,
|
||||||
|
height: 42.0,
|
||||||
|
onPressed: () {
|
||||||
|
//Navigator.of(context).pushNamed(HomeScreen.tag);
|
||||||
|
},
|
||||||
|
color: Colors.lightBlueAccent,
|
||||||
|
child: Text('Log In', style: TextStyle(color: Colors.white)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
final forgotLabel = FlatButton(
|
||||||
|
child: Text(
|
||||||
|
'Forgot password?',
|
||||||
|
style: TextStyle(color: Colors.black54),
|
||||||
|
),
|
||||||
|
onPressed: () {},
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
//backgroundColor: Colors.white,
|
||||||
|
body: Center(
|
||||||
|
child: ListView(
|
||||||
|
shrinkWrap: true,
|
||||||
|
padding: EdgeInsets.only(left: 24.0, right: 24.0),
|
||||||
|
children: <Widget>[
|
||||||
|
SizedBox(height: 48.0),
|
||||||
|
email,
|
||||||
|
SizedBox(height: 8.0),
|
||||||
|
password,
|
||||||
|
SizedBox(height: 24.0),
|
||||||
|
loginButton,
|
||||||
|
//forgotLabel
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../../keys.dart';
|
import 'package:invoiceninja/keys.dart';
|
||||||
import '../../ui/app/sidebar.dart';
|
import 'package:invoiceninja/ui/app/sidebar.dart';
|
||||||
|
|
||||||
class ClientList extends StatelessWidget {
|
class ClientList extends StatelessWidget {
|
||||||
ClientList() : super(key: NinjaKeys.clientList);
|
ClientList() : super(key: NinjaKeys.clientList);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../keys.dart';
|
import 'package:invoiceninja/keys.dart';
|
||||||
import '../ui/app/sidebar.dart';
|
import 'package:invoiceninja/ui/app/sidebar.dart';
|
||||||
|
|
||||||
class Dashboard extends StatelessWidget {
|
class Dashboard extends StatelessWidget {
|
||||||
Dashboard() : super(key: NinjaKeys.dashboard);
|
Dashboard() : super(key: NinjaKeys.dashboard);
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
//import '../../containers/edit_product.dart';
|
//import 'package:invoiceninja/containers/edit_product.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
|
|
||||||
class DetailsScreen extends StatelessWidget {
|
class DetailsScreen extends StatelessWidget {
|
||||||
final ProductEntity product;
|
final ProductEntity product;
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,11 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import '../../redux/product/product_actions.dart';
|
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import '../../ui/product/product_details.dart';
|
import 'package:invoiceninja/ui/product/product_details.dart';
|
||||||
import '../../redux/product/product_selectors.dart';
|
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||||
import '../../redux/app/app_state.dart';
|
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||||
|
|
||||||
class ProductDetails extends StatelessWidget {
|
class ProductDetails extends StatelessWidget {
|
||||||
final int id;
|
final int id;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import '../../keys.dart';
|
import 'package:invoiceninja/keys.dart';
|
||||||
|
|
||||||
class ProductItem extends StatelessWidget {
|
class ProductItem extends StatelessWidget {
|
||||||
final DismissDirectionCallback onDismissed;
|
final DismissDirectionCallback onDismissed;
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../../ui/app/app_loading.dart';
|
import 'package:invoiceninja/ui/app/app_loading.dart';
|
||||||
import '../../ui/product/product_details_vm.dart';
|
import 'package:invoiceninja/ui/product/product_details_vm.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import '../../ui/app/loading_indicator.dart';
|
import 'package:invoiceninja/ui/app/loading_indicator.dart';
|
||||||
import '../../ui/product/product_item.dart';
|
import 'package:invoiceninja/ui/product/product_item.dart';
|
||||||
import '../../keys.dart';
|
import 'package:invoiceninja/keys.dart';
|
||||||
|
|
||||||
class ProductList extends StatelessWidget {
|
class ProductList extends StatelessWidget {
|
||||||
final List<ProductEntity> products;
|
final List<ProductEntity> products;
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import '../../redux/product/product_actions.dart';
|
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import '../../ui/product/product_list.dart';
|
import 'package:invoiceninja/ui/product/product_list.dart';
|
||||||
import '../../redux/product/product_selectors.dart';
|
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||||
import '../../redux/app/app_state.dart';
|
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||||
|
|
||||||
class FilteredProducts extends StatelessWidget {
|
class FilteredProducts extends StatelessWidget {
|
||||||
FilteredProducts({Key key}) : super(key: key);
|
FilteredProducts({Key key}) : super(key: key);
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@
|
||||||
// in the LICENSE file.
|
// in the LICENSE file.
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../../data/models/models.dart';
|
import 'package:invoiceninja/data/models/models.dart';
|
||||||
import '../../keys.dart';
|
import 'package:invoiceninja/keys.dart';
|
||||||
import '../../ui/product/product_list_vm.dart';
|
import 'package:invoiceninja/ui/product/product_list_vm.dart';
|
||||||
|
|
||||||
class ProductHome extends StatelessWidget {
|
class ProductHome extends StatelessWidget {
|
||||||
ProductHome() : super(key: NinjaKeys.productHome);
|
ProductHome() : super(key: NinjaKeys.productHome);
|
||||||
Loading…
Reference in New Issue