Compare commits
5 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ce078eb4f7 | |||
|
|
1d3d2b0f10 | ||
|
|
4060702a10 | ||
| 4bc0a85c0c | |||
|
|
8d2462464e |
8 changed files with 101 additions and 94 deletions
66
CONTRIBUTING.md
Normal file
66
CONTRIBUTING.md
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
# Contributing to MIH Project
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to the MIH Project! To help us maintain a clean, stable, and secure codebase, please review and follow these contribution guidelines.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Important Repository Notice (GitHub Users)
|
||||||
|
|
||||||
|
> ⚠️ **CRITICAL NOTE:** If you are viewing or found this repository on GitHub, please be aware that this is a **read-only mirror** used strictly for backup purposes.
|
||||||
|
>
|
||||||
|
> **No Pull Requests (PRs) or Issues will be accepted or reviewed on GitHub.**
|
||||||
|
|
||||||
|
To contribute, you must use our active development repository hosted on **MIH Git**:
|
||||||
|
🔗 [Active MIH Git Repo](https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project)
|
||||||
|
|
||||||
|
Please conduct all development, issue tracking, and collaboration on the MIH Git platform.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Branching Strategy & Pull/Merge Request Rules
|
||||||
|
|
||||||
|
To ensure production stability, we enforce strict branching rules. Please ensure your contributions align with the following structure:
|
||||||
|
|
||||||
|
* **Do NOT target the `main` branch:** Pull or Merge Requests made directly against the `main` branch will be automatically rejected or closed.
|
||||||
|
* **Target the Latest Version Branch:** All bug fixes, features, and documentation updates must be made against the active version branch (e.g., branch naming convention follows `v.1.4.0` or later).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Recommended Workflow (Fork & Pull)
|
||||||
|
|
||||||
|
We use a **Fork-and-Pull** model to manage contributions safely and keep the main repository organized. Please follow these steps to submit your changes:
|
||||||
|
|
||||||
|
1. **Fork the Repository:** Log into **MIH Git** and click the **Fork** button on the main [mih-project](https://git.mzansi-innovation-hub.co.za/yaso_meth/mih-project) repository to create a copy under your personal account.
|
||||||
|
2. **Clone Your Fork:** Clone your personal fork locally to your machine:
|
||||||
|
```bash
|
||||||
|
git clone --depth 1 https://git.mzansi-innovation-hub.co.za/YOUR_USERNAME/mih-project.git
|
||||||
|
cd mih-project
|
||||||
|
```
|
||||||
|
3. **Checkout the Active Version Branch:** Fetch the latest branches and switch to the current active version branch (e.g., `v.1.4.0`):
|
||||||
|
```bash
|
||||||
|
git fetch origin
|
||||||
|
git checkout v.1.4.0
|
||||||
|
```
|
||||||
|
4. **Create a Feature or Fix Branch:** Create a dedicated branch for your changes stemming directly from that version branch:
|
||||||
|
```bash
|
||||||
|
git checkout -b feature/your-feature-name
|
||||||
|
```
|
||||||
|
or
|
||||||
|
```bash
|
||||||
|
git checkout -b fix/your-fix-name
|
||||||
|
```
|
||||||
|
5. **Commit and Push:** Make your changes, commit them with clear descriptive messages, and push the feature branch to your fork:
|
||||||
|
```bash
|
||||||
|
git push origin feature/your-feature-name
|
||||||
|
```
|
||||||
|
or
|
||||||
|
```bash
|
||||||
|
git push origin fix/your-fix-name
|
||||||
|
```
|
||||||
|
6. **Open a Pull/Merge Request:** Go to the main repository on MIH Git. You will see a prompt to open a new Pull/Merge Request. Ensure that:
|
||||||
|
* The **Source (Head)** is your fork's feature branch (`YOUR_USERNAME/mih-project:feature/your-feature-name`).
|
||||||
|
* The **Target (Base)** is the main repository's active version branch (`yaso_meth/mih-project:v.1.4.0`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Thank you for your time and effort in helping build and improve the MIH Project!
|
||||||
|
|
@ -1,7 +1,3 @@
|
||||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
# This builtInKotlin flag was added automatically by Flutter migrator
|
|
||||||
android.builtInKotlin=false
|
|
||||||
# This newDsl flag was added automatically by Flutter migrator
|
|
||||||
android.newDsl=false
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import 'package:flutter/foundation.dart'
|
||||||
/// import 'firebase_options.dart';
|
/// import 'firebase_options.dart';
|
||||||
/// // ...
|
/// // ...
|
||||||
/// await Firebase.initializeApp(
|
/// await Firebase.initializeApp(
|
||||||
/// options: DefaultFirebaseOptions.currentPlatform,
|
/// options: DefaultFirebaseOptions.currentPlatform,
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
class DefaultFirebaseOptions {
|
class DefaultFirebaseOptions {
|
||||||
|
|
@ -30,10 +30,6 @@ class DefaultFirebaseOptions {
|
||||||
return windows;
|
return windows;
|
||||||
case TargetPlatform.linux:
|
case TargetPlatform.linux:
|
||||||
return web;
|
return web;
|
||||||
// throw UnsupportedError(
|
|
||||||
// 'DefaultFirebaseOptions have not been configured for linux - '
|
|
||||||
// 'you can reconfigure this by running the FlutterFire CLI again.',
|
|
||||||
// );
|
|
||||||
default:
|
default:
|
||||||
throw UnsupportedError(
|
throw UnsupportedError(
|
||||||
'DefaultFirebaseOptions are not supported for this platform.',
|
'DefaultFirebaseOptions are not supported for this platform.',
|
||||||
|
|
@ -42,48 +38,48 @@ class DefaultFirebaseOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
static const FirebaseOptions web = FirebaseOptions(
|
static const FirebaseOptions web = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyDN-f4sJ4n_fyvrLR193_IIkTsccRVUQxw',
|
apiKey: 'YOUR_WEB_API_KEY',
|
||||||
appId: '1:33677883408:web:47b8021df7fcacd2223295',
|
appId: 'YOUR_WEB_APP_ID',
|
||||||
messagingSenderId: '33677883408',
|
messagingSenderId: 'YOUR_MESSAGING_SENDER_ID',
|
||||||
projectId: 'mzansi-innovation-hub',
|
projectId: 'YOUR_PROJECT_ID',
|
||||||
authDomain: 'mzansi-innovation-hub.firebaseapp.com',
|
authDomain: 'YOUR_AUTH_DOMAIN',
|
||||||
storageBucket: 'mzansi-innovation-hub.firebasestorage.app',
|
storageBucket: 'YOUR_STORAGE_BUCKET',
|
||||||
measurementId: 'G-Y3B5E3HCJY',
|
measurementId: 'YOUR_MEASUREMENT_ID',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions android = FirebaseOptions(
|
static const FirebaseOptions android = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyBUkjWdu9YcgiF-e9TC5hoiEoCjPyjA5hU',
|
apiKey: 'YOUR_ANDROID_API_KEY',
|
||||||
appId: '1:33677883408:android:ebd8565991c56257223295',
|
appId: 'YOUR_ANDROID_APP_ID',
|
||||||
messagingSenderId: '33677883408',
|
messagingSenderId: 'YOUR_MESSAGING_SENDER_ID',
|
||||||
projectId: 'mzansi-innovation-hub',
|
projectId: 'YOUR_PROJECT_ID',
|
||||||
storageBucket: 'mzansi-innovation-hub.firebasestorage.app',
|
storageBucket: 'YOUR_STORAGE_BUCKET',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions ios = FirebaseOptions(
|
static const FirebaseOptions ios = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY',
|
apiKey: 'YOUR_IOS_API_KEY',
|
||||||
appId: '1:33677883408:ios:2048dac086428716223295',
|
appId: 'YOUR_IOS_APP_ID',
|
||||||
messagingSenderId: '33677883408',
|
messagingSenderId: 'YOUR_MESSAGING_SENDER_ID',
|
||||||
projectId: 'mzansi-innovation-hub',
|
projectId: 'YOUR_PROJECT_ID',
|
||||||
storageBucket: 'mzansi-innovation-hub.firebasestorage.app',
|
storageBucket: 'YOUR_STORAGE_BUCKET',
|
||||||
iosBundleId: 'za.co.mzansiinnovationhub.mih',
|
iosBundleId: 'YOUR_IOS_BUNDLE_ID',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions macos = FirebaseOptions(
|
static const FirebaseOptions macos = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyDRqY5I5CXjEtWkUX1YUfKT8IUlln9PUuY',
|
apiKey: 'YOUR_MACOS_API_KEY',
|
||||||
appId: '1:33677883408:ios:e2db11a42fc3452e223295',
|
appId: 'YOUR_MACOS_APP_ID',
|
||||||
messagingSenderId: '33677883408',
|
messagingSenderId: 'YOUR_MESSAGING_SENDER_ID',
|
||||||
projectId: 'mzansi-innovation-hub',
|
projectId: 'YOUR_PROJECT_ID',
|
||||||
storageBucket: 'mzansi-innovation-hub.firebasestorage.app',
|
storageBucket: 'YOUR_STORAGE_BUCKET',
|
||||||
iosBundleId: 'com.example.patientManager',
|
iosBundleId: 'YOUR_MACOS_BUNDLE_ID',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions windows = FirebaseOptions(
|
static const FirebaseOptions windows = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyDN-f4sJ4n_fyvrLR193_IIkTsccRVUQxw',
|
apiKey: 'YOUR_WINDOWS_API_KEY',
|
||||||
appId: '1:33677883408:web:e08becaef3261c59223295',
|
appId: 'YOUR_WINDOWS_APP_ID',
|
||||||
messagingSenderId: '33677883408',
|
messagingSenderId: 'YOUR_MESSAGING_SENDER_ID',
|
||||||
projectId: 'mzansi-innovation-hub',
|
projectId: 'YOUR_PROJECT_ID',
|
||||||
authDomain: 'mzansi-innovation-hub.firebaseapp.com',
|
authDomain: 'YOUR_AUTH_DOMAIN',
|
||||||
storageBucket: 'mzansi-innovation-hub.firebasestorage.app',
|
storageBucket: 'YOUR_STORAGE_BUCKET',
|
||||||
measurementId: 'G-FKKENBX8TT',
|
measurementId: 'YOUR_MEASUREMENT_ID',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ void main() async {
|
||||||
debugPrint('APP INSTALLED!');
|
debugPrint('APP INSTALLED!');
|
||||||
});
|
});
|
||||||
final GoRouter appRouter = MihGoRouter().mihRouter;
|
final GoRouter appRouter = MihGoRouter().mihRouter;
|
||||||
|
FlutterNativeSplash.remove();
|
||||||
runApp(MzansiInnovationHub(
|
runApp(MzansiInnovationHub(
|
||||||
router: appRouter,
|
router: appRouter,
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,8 @@ void main() async {
|
||||||
debugPrint('APP INSTALLED!');
|
debugPrint('APP INSTALLED!');
|
||||||
});
|
});
|
||||||
final GoRouter appRouter = MihGoRouter().mihRouter;
|
final GoRouter appRouter = MihGoRouter().mihRouter;
|
||||||
(MzansiInnovationHub(
|
FlutterNativeSplash.remove();
|
||||||
|
runApp(MzansiInnovationHub(
|
||||||
router: appRouter,
|
router: appRouter,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_native_splash/flutter_native_splash.dart';
|
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_packages/mih_file_viewer/components/mih_print_prevew.dart';
|
import 'package:mzansi_innovation_hub/mih_packages/mih_file_viewer/components/mih_print_prevew.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
|
import 'package:mzansi_innovation_hub/mih_objects/arguments.dart';
|
||||||
|
|
@ -86,7 +85,6 @@ class MihGoRouter {
|
||||||
];
|
];
|
||||||
KenLogger.success(
|
KenLogger.success(
|
||||||
"Redirect Check: ${state.fullPath}, isUserSignedIn: $isUserSignedIn");
|
"Redirect Check: ${state.fullPath}, isUserSignedIn: $isUserSignedIn");
|
||||||
FlutterNativeSplash.remove();
|
|
||||||
if (!isUserSignedIn && !unauthenticatedPaths.contains(state.fullPath)) {
|
if (!isUserSignedIn && !unauthenticatedPaths.contains(state.fullPath)) {
|
||||||
return MihGoRouterPaths.mihAuthentication;
|
return MihGoRouterPaths.mihAuthentication;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:file_saver/file_saver.dart';
|
import 'package:file_saver/file_saver.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:ken_logger/ken_logger.dart';
|
import 'package:ken_logger/ken_logger.dart';
|
||||||
|
|
@ -404,30 +403,6 @@ class _MihBusinessQrCodeState extends State<MihBusinessQrCode> {
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SpeedDialChild(
|
|
||||||
child: Icon(
|
|
||||||
Icons.copy_rounded,
|
|
||||||
color: MihColors.primary(),
|
|
||||||
),
|
|
||||||
label: "Copy Link",
|
|
||||||
labelBackgroundColor: MihColors.green(),
|
|
||||||
labelStyle: TextStyle(
|
|
||||||
color: MihColors.primary(),
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
backgroundColor: MihColors.green(),
|
|
||||||
onTap: () async {
|
|
||||||
await Clipboard.setData(
|
|
||||||
ClipboardData(text: "$qrCodedata${business.business_id}"),
|
|
||||||
);
|
|
||||||
if (!context.mounted) return;
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
|
||||||
MihSnackBar(
|
|
||||||
child: Text("Link Copied!"),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]),
|
]),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:file_saver/file_saver.dart';
|
import 'package:file_saver/file_saver.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:ken_logger/ken_logger.dart';
|
import 'package:ken_logger/ken_logger.dart';
|
||||||
|
|
@ -403,31 +402,6 @@ class _MihPersonalQrCodeState extends State<MihPersonalQrCode> {
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SpeedDialChild(
|
|
||||||
child: Icon(
|
|
||||||
Icons.copy_rounded,
|
|
||||||
color: MihColors.primary(),
|
|
||||||
),
|
|
||||||
label: "Copy Link",
|
|
||||||
labelBackgroundColor: MihColors.green(),
|
|
||||||
labelStyle: TextStyle(
|
|
||||||
color: MihColors.primary(),
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
backgroundColor: MihColors.green(),
|
|
||||||
onTap: () async {
|
|
||||||
await Clipboard.setData(
|
|
||||||
ClipboardData(
|
|
||||||
text: "$_qrCodedata${user.username.toLowerCase()}"),
|
|
||||||
);
|
|
||||||
if (!context.mounted) return;
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
|
||||||
MihSnackBar(
|
|
||||||
child: Text("Link Copied!"),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]),
|
]),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue