Fix imports
This commit is contained in:
parent
cc83239321
commit
1811c15b82
|
|
@ -2,7 +2,7 @@ import 'dart:async';
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import '../data/models/models.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
//import 'package:built_redux_sample/models/serializers.dart';
|
||||
|
||||
/// 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 'package:meta/meta.dart';
|
||||
|
||||
import '../../data/models/entities.dart';
|
||||
import '../../data/repositories/repositories.dart';
|
||||
import '../../data/file_storage.dart';
|
||||
import '../../data/web_client.dart';
|
||||
import 'package:invoiceninja/data/models/entities.dart';
|
||||
import 'package:invoiceninja/data/repositories/repositories.dart';
|
||||
import 'package:invoiceninja/data/file_storage.dart';
|
||||
import 'package:invoiceninja/data/web_client.dart';
|
||||
|
||||
/// A class that glues together our local file storage and web client. It has a
|
||||
/// clear responsibility: Load Products and Persist products.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'dart:async';
|
||||
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.
|
||||
///
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
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
|
||||
/// and persist Products to and from the cloud.
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ class NinjaKeys {
|
|||
static Key snackbarAction(String id) => Key('__snackbar_action_${id}__');
|
||||
|
||||
static final dashboard = const Key('__dashboard__');
|
||||
static final loginScreen = const Key('__login_screen__');
|
||||
static final clientList = const Key('__client_list__');
|
||||
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:redux/redux.dart';
|
||||
import 'redux/app/app_state.dart';
|
||||
import 'ui/dashboard.dart';
|
||||
import 'ui/client/client_list.dart';
|
||||
import 'ui/product/product_home.dart';
|
||||
import 'package:invoiceninja/ui/dashboard_screen.dart';
|
||||
import 'package:invoiceninja/ui/client/client_list.dart';
|
||||
import 'package:invoiceninja/ui/product/product_screen.dart';
|
||||
import 'package:invoiceninja/ui/app/login_screen.dart';
|
||||
import 'routes.dart';
|
||||
import 'redux/product/product_actions.dart';
|
||||
import 'redux/product/product_middleware.dart';
|
||||
|
|
@ -39,6 +40,13 @@ class InvoiceNinjaApp extends StatelessWidget {
|
|||
theme: new ThemeData.dark(),
|
||||
title: 'Invoice Ninja',
|
||||
routes: {
|
||||
NinjaRoutes.login: (context) {
|
||||
return StoreBuilder<AppState>(
|
||||
builder: (context, store) {
|
||||
return LoginScreen();
|
||||
},
|
||||
);
|
||||
},
|
||||
NinjaRoutes.dashboard: (context) {
|
||||
return StoreBuilder<AppState>(
|
||||
builder: (context, store) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import '../../redux/app/app_state.dart';
|
||||
import '../../redux/app/loading_reducer.dart';
|
||||
import '../../redux/product/product_reducer.dart';
|
||||
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja/redux/app/loading_reducer.dart';
|
||||
import 'package:invoiceninja/redux/product/product_reducer.dart';
|
||||
|
||||
// We create the State reducer by combining many smaller reducers into one!
|
||||
AppState appReducer(AppState state, action) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:meta/meta.dart';
|
||||
import '../../data/models/models.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
|
||||
@immutable
|
||||
class AppState {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:redux/redux.dart';
|
||||
import '../../redux/product/product_actions.dart';
|
||||
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||
|
||||
final loadingReducer = combineReducers<bool>([
|
||||
TypedReducer<bool, ProductsLoadedAction>(_setLoaded),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import '../../data/models/models.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
|
||||
class LoadProductsAction {}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
import '../../redux/product/product_actions.dart';
|
||||
import '../../redux/app/app_state.dart';
|
||||
import '../../data/repositories/repositories.dart';
|
||||
import '../../data/repositories/product_repository.dart';
|
||||
import '../../data/file_storage.dart';
|
||||
import '../../redux/product/product_selectors.dart';
|
||||
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja/data/repositories/repositories.dart';
|
||||
import 'package:invoiceninja/data/repositories/product_repository.dart';
|
||||
import 'package:invoiceninja/data/file_storage.dart';
|
||||
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||
|
||||
List<Middleware<AppState>> createStoreProductsMiddleware([
|
||||
ProductsRepository repository = const ProductsRepositoryFlutter(
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:redux/redux.dart';
|
||||
import '../../redux/product/product_actions.dart';
|
||||
import '../../data/models/models.dart';
|
||||
import '../../redux/product/product_selectors.dart';
|
||||
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||
|
||||
final productsReducer = combineReducers<List<ProductEntity>>([
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import '../../data/models/models.dart';
|
||||
import '../../redux/app/app_state.dart';
|
||||
import '../../utils/optional.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja/utils/optional.dart';
|
||||
|
||||
|
||||
bool isLoadingSelector(AppState state) => state.isLoading;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
class NinjaRoutes {
|
||||
static final dashboard = "/";
|
||||
static final login = "/";
|
||||
static final dashboard = "/dashboard";
|
||||
static final clientList = "/clientList";
|
||||
static final productList = "/productList";
|
||||
}
|
||||
|
|
@ -2,8 +2,8 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
import '../../redux/app/app_state.dart';
|
||||
import '../../redux/product/product_selectors.dart';
|
||||
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||
|
||||
class AppLoading extends StatelessWidget {
|
||||
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 '../../keys.dart';
|
||||
import '../../ui/app/sidebar.dart';
|
||||
import 'package:invoiceninja/keys.dart';
|
||||
import 'package:invoiceninja/ui/app/sidebar.dart';
|
||||
|
||||
class ClientList extends StatelessWidget {
|
||||
ClientList() : super(key: NinjaKeys.clientList);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import '../keys.dart';
|
||||
import '../ui/app/sidebar.dart';
|
||||
import 'package:invoiceninja/keys.dart';
|
||||
import 'package:invoiceninja/ui/app/sidebar.dart';
|
||||
|
||||
class Dashboard extends StatelessWidget {
|
||||
Dashboard() : super(key: NinjaKeys.dashboard);
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
//import '../../containers/edit_product.dart';
|
||||
import '../../data/models/models.dart';
|
||||
//import 'package:invoiceninja/containers/edit_product.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
|
||||
class DetailsScreen extends StatelessWidget {
|
||||
final ProductEntity product;
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
import '../../redux/product/product_actions.dart';
|
||||
import '../../data/models/models.dart';
|
||||
import '../../ui/product/product_details.dart';
|
||||
import '../../redux/product/product_selectors.dart';
|
||||
import '../../redux/app/app_state.dart';
|
||||
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
import 'package:invoiceninja/ui/product/product_details.dart';
|
||||
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||
|
||||
class ProductDetails extends StatelessWidget {
|
||||
final int id;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../data/models/models.dart';
|
||||
import '../../keys.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
import 'package:invoiceninja/keys.dart';
|
||||
|
||||
class ProductItem extends StatelessWidget {
|
||||
final DismissDirectionCallback onDismissed;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../ui/app/app_loading.dart';
|
||||
import '../../ui/product/product_details_vm.dart';
|
||||
import '../../data/models/models.dart';
|
||||
import '../../ui/app/loading_indicator.dart';
|
||||
import '../../ui/product/product_item.dart';
|
||||
import '../../keys.dart';
|
||||
import 'package:invoiceninja/ui/app/app_loading.dart';
|
||||
import 'package:invoiceninja/ui/product/product_details_vm.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
import 'package:invoiceninja/ui/app/loading_indicator.dart';
|
||||
import 'package:invoiceninja/ui/product/product_item.dart';
|
||||
import 'package:invoiceninja/keys.dart';
|
||||
|
||||
class ProductList extends StatelessWidget {
|
||||
final List<ProductEntity> products;
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
import '../../redux/product/product_actions.dart';
|
||||
import '../../data/models/models.dart';
|
||||
import '../../ui/product/product_list.dart';
|
||||
import '../../redux/product/product_selectors.dart';
|
||||
import '../../redux/app/app_state.dart';
|
||||
import 'package:invoiceninja/redux/product/product_actions.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
import 'package:invoiceninja/ui/product/product_list.dart';
|
||||
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
||||
import 'package:invoiceninja/redux/app/app_state.dart';
|
||||
|
||||
class FilteredProducts extends StatelessWidget {
|
||||
FilteredProducts({Key key}) : super(key: key);
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
// in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../data/models/models.dart';
|
||||
import '../../keys.dart';
|
||||
import '../../ui/product/product_list_vm.dart';
|
||||
import 'package:invoiceninja/data/models/models.dart';
|
||||
import 'package:invoiceninja/keys.dart';
|
||||
import 'package:invoiceninja/ui/product/product_list_vm.dart';
|
||||
|
||||
class ProductHome extends StatelessWidget {
|
||||
ProductHome() : super(key: NinjaKeys.productHome);
|
||||
Loading…
Reference in New Issue