Skip to content

Commit

Permalink
splitr
Browse files Browse the repository at this point in the history
  • Loading branch information
BhasherBEL committed Jun 6, 2023
1 parent 0d4a6b0 commit 99d85a0
Show file tree
Hide file tree
Showing 42 changed files with 143 additions and 141 deletions.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# Shared
# Splitr

:warning: This is a beta version. Use it at your own risk!

Shared is a free and open-source app that lets you create multiple projects, add and track expenses, split expenses unevenly between members, and settle up balances between group members. It's a great alternative to other expense tracking apps, especially for groups who need to manage expenses together.
Splitr is a free and open-source app that lets you create multiple projects, add and track expenses, split expenses unevenly between members, and settle up balances between group members. It's a great alternative to other expense tracking apps, especially for groups who need to manage expenses together.

## Installation

This is currently a beta version. To get the app, you have to build it yourself with flutter or download the latest beta version [here](https://github.com/BhasherBEL/Shared/releases).
This is currently a beta version. To get the app, you have to build it yourself with flutter or download the latest beta version [here](https://github.com/BhasherBEL/Splitr/releases).


## Screenshots

| | | |
|:-------------------------:|:-------------------------:|:-------------------------:|
![Project](https://raw.githubusercontent.com/BhasherBEL/Shared/master/metadata/en-US/images/phoneScreenshots/1.png) | ![Refund](https://raw.githubusercontent.com/BhasherBEL/Shared/master/metadata/en-US/images/phoneScreenshots/2.png) | ![New project](https://raw.githubusercontent.com/BhasherBEL/Shared/master/metadata/en-US/images/phoneScreenshots/3.png) |
![Project](https://raw.githubusercontent.com/BhasherBEL/Splitr/master/metadata/en-US/images/phoneScreenshots/1.png) | ![Refund](https://raw.githubusercontent.com/BhasherBEL/Splitr/master/metadata/en-US/images/phoneScreenshots/2.png) | ![New project](https://raw.githubusercontent.com/BhasherBEL/Splitr/master/metadata/en-US/images/phoneScreenshots/3.png) |

## Features

Expand All @@ -31,4 +31,4 @@ This is currently a beta version. To get the app, you have to build it yourself

## License

Shared is licensed under the [MIT License](LICENCE.md).
Splitr is licensed under the [MIT License](LICENCE.md).
2 changes: 1 addition & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ android {

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "be.bhasher.shared"
applicationId "be.bhasher.splitr"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion flutter.minSdkVersion
Expand Down
2 changes: 1 addition & 1 deletion android/app/src/debug/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="be.bhasher.shared">
package="be.bhasher.splitr">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
Expand Down
12 changes: 6 additions & 6 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="be.bhasher.shared">
package="be.bhasher.splitr">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="Shared"
android:label="Splitr"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
Expand All @@ -29,10 +29,10 @@
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="shared.bhasher.com" />
<data android:scheme="http" android:host="www.shared.bhasher.com" />
<data android:scheme="https" android:host="shared.bhasher.com" />
<data android:scheme="https" android:host="www.shared.bhasher.com" />
<data android:scheme="http" android:host="splitr.bhasher.com" />
<data android:scheme="http" android:host="www.splitr.bhasher.com" />
<data android:scheme="https" android:host="splitr.bhasher.com" />
<data android:scheme="https" android:host="www.splitr.bhasher.com" />
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package be.bhasher.shared
package be.bhasher.splitr

import io.flutter.embedding.android.FlutterActivity

Expand Down
2 changes: 1 addition & 1 deletion android/app/src/profile/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="be.bhasher.shared">
package="be.bhasher.splitr">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
Expand Down
4 changes: 2 additions & 2 deletions lib/components/pages/instances/instance_tile.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:shared/model/app_data.dart';
import 'package:shared/model/instance.dart';

import '../../../model/app_data.dart';
import '../../../model/instance.dart';
import '../../../utils/dialogs/confirm_box.dart';
import '../../../utils/navigator/navigator.dart';
import '../new_instance/new_instance_page.dart';
Expand Down
11 changes: 6 additions & 5 deletions lib/components/pages/instances/instances_list_page.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import 'package:flutter/material.dart';
import 'package:shared/components/pages/instances/instance_tile.dart';
import 'package:shared/components/pages/new_instance/new_instance_page.dart';
import 'package:shared/model/app_data.dart';
import 'package:shared/model/instance.dart';
import 'package:shared/utils/navigator/navigator.dart';

import '../../../model/app_data.dart';
import '../../../model/instance.dart';
import '../../../utils/navigator/navigator.dart';
import '../new_instance/new_instance_page.dart';
import 'instance_tile.dart';

class InstancesListPage extends StatefulWidget {
const InstancesListPage({super.key});
Expand Down
8 changes: 4 additions & 4 deletions lib/components/pages/new_instance/new_instance_page.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:pocketbase/pocketbase.dart';
import 'package:shared/components/pages/new_instance/new_instance_selector.dart';
import 'package:shared/model/app_data.dart';
import 'package:shared/model/connectors/provider.dart';
import 'package:shared/model/instance.dart';

import '../../../model/app_data.dart';
import '../../../model/connectors/pocketbase/provider.dart';
import '../../../model/connectors/provider.dart';
import '../../../model/instance.dart';
import 'new_instance_selector.dart';

class NewInstancePage extends StatelessWidget {
NewInstancePage({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:shared/components/pages/new_instance/new_instance_page.dart';

import 'new_instance_page.dart';

class NewInstancePocketbase extends StatefulWidget {
const NewInstancePocketbase(this.instanceData, {super.key});
Expand Down
7 changes: 4 additions & 3 deletions lib/components/pages/new_instance/new_instance_selector.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:shared/components/pages/new_instance/new_instance_page.dart';
import 'package:shared/components/pages/new_instance/new_instance_pocketbase.dart';
import 'package:shared/utils/tiles/header_tile.dart';

import '../../../utils/tiles/header_tile.dart';
import 'new_instance_page.dart';
import 'new_instance_pocketbase.dart';

class NewInstanceSelector extends StatefulWidget {
const NewInstanceSelector(this.instanceData, {super.key});
Expand Down
10 changes: 5 additions & 5 deletions lib/components/pages/new_project/new_project_page.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import 'package:flutter/material.dart';
import 'package:select_form_field/select_form_field.dart';
import 'package:shared/components/pages/instances/instances_list_page.dart';
import 'package:shared/model/app_data.dart';
import 'package:shared/utils/navigator/navigator.dart';
import 'package:shared/utils/string.dart';
import 'package:shared/utils/switches/text_switch.dart';
import 'package:splitr/utils/string.dart';

import '../../../model/app_data.dart';
import '../../../model/instance.dart';
import '../../../model/project.dart';
import '../../../model/project_data.dart';
import '../../../utils/navigator/navigator.dart';
import '../../../utils/switches/text_switch.dart';
import '../../../utils/tiles/header_tile.dart';
import '../../../utils/tiles/participant_tile.dart';
import '../instances/instances_list_page.dart';

class NewProjectPage extends StatefulWidget {
const NewProjectPage({super.key, this.project, required this.projectData});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:shared/model/participant.dart';

import '../../../../model/participant.dart';
import '../../../../model/project.dart';
import 'refund_page_part.dart';

Expand Down
7 changes: 4 additions & 3 deletions lib/components/pages/project/balances/refund_page_part.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:shared/model/participant.dart';
import 'package:shared/model/project.dart';
import 'package:shared/utils/tiles/header_tile.dart';

import '../../../../model/participant.dart';
import '../../../../model/project.dart';
import '../../../../utils/tiles/header_tile.dart';

List<Widget> getRefundPageTiles({
required final Project project,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:shared/utils/colors.dart';
import 'package:shared/utils/string.dart';
import 'package:tuple/tuple.dart';

import '../../../model/item.dart';
import '../../../model/project.dart';
import '../../../utils/time.dart';
import 'expenses/new_entry.dart';
import '../../../../utils/string.dart';
import '../../../../model/item.dart';
import '../../../../model/project.dart';
import '../../../../utils/colors.dart';
import '../../../../utils/time.dart';
import 'new_entry.dart';

class ItemList extends StatefulWidget {
const ItemList(this.project, {super.key});
Expand Down
13 changes: 6 additions & 7 deletions lib/components/pages/project/project_page.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:share_plus/share_plus.dart';
import 'package:shared/components/pages/project/balances/balancing_page_part.dart';
import 'package:shared/components/pages/projects_list/projects_list_page.dart';
import 'package:shared/screens/new_project_screen.dart';
import 'package:shared/utils/dialogs/confirm_box.dart';

import '../../../model/project.dart';
import '../../../screens/new_project_screen.dart';
import '../projects_list/projects_list_page.dart';
import 'balances/balancing_page_part.dart';
import 'expenses/new_entry.dart';
import 'item_list.dart';
import 'expenses/item_list.dart';

class ProjectPage extends StatefulWidget {
const ProjectPage(this.project, {super.key});
Expand Down Expand Up @@ -108,13 +107,13 @@ class _ProjectPageState extends State<ProjectPage> {
actions: [
TextButton(
onPressed: () => Share.share(
'Join my shared project!\n\nInstance: ${Uri.encodeComponent(widget.project.provider.instance.name)}\nCode: ${widget.project.code}',
'Join my Splitr project!\n\nInstance: ${Uri.encodeComponent(widget.project.provider.instance.name)}\nCode: ${widget.project.code}',
),
child: const Text("Share code"),
),
TextButton(
onPressed: () => Share.share(
'Join my shared project!\nhttps://shared.bhasher.com/join?instance=${Uri.encodeComponent(widget.project.provider.instance.name)}&code=${widget.project.code}',
'Join my Splitr project!\nhttps://splitr.bhasher.com/join?instance=${Uri.encodeComponent(widget.project.provider.instance.name)}&code=${widget.project.code}',
),
child: const Text("Share link"),
),
Expand Down
6 changes: 3 additions & 3 deletions lib/components/pages/projects_list/projects_list.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:shared/components/pages/project/project_page.dart';
import 'package:shared/screens/new_project_screen.dart';
import 'package:shared/utils/navigator/navigator.dart';

import '../../../model/app_data.dart';
import '../../../model/project.dart';
import '../../../screens/new_project_screen.dart';
import '../../../utils/navigator/navigator.dart';
import '../project/project_page.dart';

class ProjectsList extends StatefulWidget {
const ProjectsList({super.key});
Expand Down
7 changes: 4 additions & 3 deletions lib/components/pages/projects_list/projects_list_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:shared/components/pages/projects_list/projects_list.dart';
import 'package:shared/screens/new_project_screen.dart';

import '../../../screens/new_project_screen.dart';
import 'projects_list.dart';

class ProjectsListPage extends StatefulWidget {
const ProjectsListPage({super.key});
Expand All @@ -17,7 +18,7 @@ class _ProjectsListPageState extends State<ProjectsListPage> {
centerTitle: true,
elevation: 4,
title: const Text(
"Shared",
"Splitr",
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
Expand Down
14 changes: 7 additions & 7 deletions lib/db/shared_database.dart → lib/db/splitr_database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,30 @@ import 'dart:async';
import 'dart:convert';

import 'package:path/path.dart';
import 'package:shared/model/connectors/local/deleted.dart';
import 'package:shared/model/connectors/local/instance.dart';
import 'package:shared/model/instance.dart';
import 'package:sqflite/sqflite.dart';

import '../model/connectors/local/deleted.dart';
import '../model/connectors/local/instance.dart';
import '../model/connectors/local/item.dart';
import '../model/connectors/local/item_part.dart';
import '../model/connectors/local/participant.dart';
import '../model/connectors/local/project.dart';
import '../model/instance.dart';
import '../model/item.dart';
import '../model/item_part.dart';
import '../model/participant.dart';
import '../model/project.dart';

class SharedDatabase {
static final SharedDatabase instance = SharedDatabase._init();
class SplitrDatabase {
static final SplitrDatabase instance = SplitrDatabase._init();

static Database? _database;

SharedDatabase._init();
SplitrDatabase._init();

Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDB('shared.db');
_database = await _initDB('splitr.db');

return _database!;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:shared/screens/setup_screen.dart';
import 'model/app_data.dart';
import 'screens/main_screen.dart';
import 'screens/setup_screen.dart';
import 'screens/splash_screen.dart';

void main() async {
Expand Down
9 changes: 4 additions & 5 deletions lib/model/app_data.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import 'package:app_links/app_links.dart';
import 'package:dynamic_color/dynamic_color.dart';
import 'package:flutter/material.dart';
import 'package:shared/model/instance.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sqflite/sqflite.dart';

import '../db/shared_database.dart';
import '../db/splitr_database.dart';
import '../screens/main_screen.dart';
import '../screens/new_project_screen.dart';
import 'connectors/local/instance.dart';
import 'instance.dart';
import 'project.dart';

class AppData {
Expand Down Expand Up @@ -48,7 +47,7 @@ class AppData {
static init() async {
hasBeenInit = true;
sharedPreferences = await SharedPreferences.getInstance();
db = await SharedDatabase.instance.database;
db = await SplitrDatabase.instance.database;

if (!sharedPreferences.containsKey("firstRun")) {
firstRun = true;
Expand Down Expand Up @@ -95,7 +94,7 @@ class _NewProjectFromLink extends StatelessWidget {
Widget build(BuildContext context) {
return DynamicColorBuilder(builder: (lightColorScheme, darkColorScheme) {
return MaterialApp(
title: 'Shared',
title: 'Splitr',
theme: defaultTheme,
darkTheme: defaultDarkTheme,
themeMode: ThemeMode.system,
Expand Down
19 changes: 12 additions & 7 deletions lib/model/bill_data.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:shared/model/item_part.dart';
import 'package:shared/model/participant.dart';
import 'package:shared/model/project.dart';
import 'item_part.dart';
import 'participant.dart';
import 'project.dart';

import 'item.dart';

Expand Down Expand Up @@ -78,12 +78,17 @@ shares: ${shares.entries.map((e) => "${e.key.pseudo}:${e.value}").join(",")}""";
}
item!.itemParts = [];
}
shares.forEach((p, s) {
await item!.conn.save();
for (var a in shares.entries) {
Participant p = a.key;
BillPart s = a.value;
if (s.fixed != null || s.share != null) {
item!.itemParts.add(ItemPart(
item: item!, participant: p, rate: s.share, amount: s.fixed));
ItemPart ip = ItemPart(
item: item!, participant: p, rate: s.share, amount: s.fixed);
item!.itemParts.add(ip);
await ip.conn.save();
}
});
}

return item!;
}
Expand Down
Loading

0 comments on commit 99d85a0

Please sign in to comment.