Successfully migrate the application to SQLIte!
This commit is contained in:
+28
-115
@@ -2,16 +2,36 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// Local
|
||||
import '/pages/expense.dart';
|
||||
import '/pages/income.dart';
|
||||
import '/pages/asset.dart';
|
||||
import '/pages/report.dart';
|
||||
import '/pages/settings.dart';
|
||||
import '/pages/help.dart';
|
||||
import '/db.dart';
|
||||
import '/pages/home.dart';
|
||||
|
||||
// SQLite
|
||||
import 'dart:io';
|
||||
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
const bool testing = true;
|
||||
|
||||
void main() {
|
||||
loadDB();
|
||||
// I see no good explanations of why to use this other package yet, but
|
||||
// trying this to see if it fixes the DB factory errors.
|
||||
// "Unhandled Exception: Bad state: databaseFactory not initialized databaseFactory is only initialized when using sqflite. When using `sqflite_common_ffi`You must call `databaseFactory = databaseFactoryFfi;` before using global openDatabase API
|
||||
// https://stackoverflow.com/questions/76158800/databasefactory-not-initialized-when-using-sqflite-in-flutter
|
||||
if (Platform.isWindows || Platform.isLinux) {
|
||||
// Initialize FFI
|
||||
sqfliteFfiInit();
|
||||
databaseFactory = databaseFactoryFfi;
|
||||
}
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
if (testing) {
|
||||
() async {
|
||||
Directory documentsDirectory = await getApplicationDocumentsDirectory();
|
||||
String path = join(documentsDirectory.path, 'com_hyperling_expense.db');
|
||||
await deleteDatabase(path);
|
||||
}();
|
||||
}
|
||||
|
||||
runApp(const MainApp());
|
||||
}
|
||||
|
||||
@@ -36,110 +56,3 @@ class MainApp extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
const HomePage({
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
State<HomePage> createState() => _HomePageState();
|
||||
}
|
||||
|
||||
class _HomePageState extends State<HomePage> {
|
||||
var pageSelected = 0;
|
||||
|
||||
refresh() {
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Widget page;
|
||||
Widget? dialog;
|
||||
switch (pageSelected) {
|
||||
case 0:
|
||||
page = ExpensePage();
|
||||
dialog = ExpenseInputDialog(
|
||||
notifyParent: refresh,
|
||||
);
|
||||
case 1:
|
||||
page = IncomePage();
|
||||
case 2:
|
||||
page = AssetPage();
|
||||
case 3:
|
||||
page = ProjectionPage();
|
||||
case 4:
|
||||
page = SettingsPage();
|
||||
case 5:
|
||||
page = HelpPage();
|
||||
default:
|
||||
throw UnimplementedError('No widget for page $pageSelected yet!');
|
||||
}
|
||||
|
||||
Future<void> addNewValue(BuildContext context) {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder: (_) => AlertDialog(content: dialog),
|
||||
);
|
||||
}
|
||||
|
||||
Widget? floatingButton;
|
||||
if (dialog != null) {
|
||||
floatingButton = IconButton(
|
||||
onPressed: () {
|
||||
addNewValue(context);
|
||||
},
|
||||
icon: Icon(Icons.add),
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
);
|
||||
}
|
||||
|
||||
return LayoutBuilder(builder: (context, constraints) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: Text("Expense Tracker")),
|
||||
drawer: NavigationRail(
|
||||
extended: true,
|
||||
destinations: [
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.payment),
|
||||
label: Text('Expenses'),
|
||||
),
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.account_balance),
|
||||
label: Text('Income'),
|
||||
),
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.attach_money),
|
||||
label: Text('Liquid Assets'),
|
||||
),
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.bar_chart),
|
||||
label: Text('Reports'),
|
||||
),
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.settings),
|
||||
label: Text('Settings'),
|
||||
),
|
||||
NavigationRailDestination(
|
||||
icon: Icon(Icons.help),
|
||||
label: Text('Help'),
|
||||
),
|
||||
],
|
||||
selectedIndex: pageSelected,
|
||||
onDestinationSelected: (value) {
|
||||
setState(() {
|
||||
pageSelected = value;
|
||||
Navigator.pop(context);
|
||||
});
|
||||
},
|
||||
),
|
||||
body: Container(
|
||||
color: Theme.of(context).colorScheme.primaryContainer,
|
||||
child: Center(child: page),
|
||||
),
|
||||
floatingActionButton: floatingButton,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user