live notification handled on ios side

live_activities
tahaalam 3 weeks ago
parent b73afa705a
commit b479e674d0

@ -196,9 +196,9 @@ public final class GeneratedPluginRegistrant {
Log.e(TAG, "Error registering plugin just_audio, com.ryanheise.just_audio.JustAudioPlugin", e); Log.e(TAG, "Error registering plugin just_audio, com.ryanheise.just_audio.JustAudioPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new com.example.live_activities.LiveActivitiesPlugin()); flutterEngine.getPlugins().add(new com.istornz.live_activities.LiveActivitiesPlugin());
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin live_activities, com.example.live_activities.LiveActivitiesPlugin", e); Log.e(TAG, "Error registering plugin live_activities, com.istornz.live_activities.LiveActivitiesPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new io.flutter.plugins.localauth.LocalAuthPlugin()); flutterEngine.getPlugins().add(new io.flutter.plugins.localauth.LocalAuthPlugin());

@ -8,6 +8,8 @@ import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content. Intent import android.content. Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.ColorStateList
import android.graphics.Color
import android.os.Build import android.os.Build
import android.util.Log import android.util.Log
import android.widget.RemoteViews import android.widget.RemoteViews
@ -41,16 +43,33 @@ class CustomLiveActivityManager(context: Context) :
private suspend fun updateRemoteViews(data: Map<String, Any>) { private suspend fun updateRemoteViews(data: Map<String, Any>) {
Log.d("updateRemoteViews", "current ticket is ${data["queueNo"] as? String ?: ""}") Log.d("updateRemoteViews", "current ticket is ${data["queueNo"] as? String ?: ""}")
Log.d("updateRemoteViews", "remoteViews is $remoteViews") Log.d("updateRemoteViews", "remoteViews is $remoteViews")
val progress = when (data["callType"] as? Int) { val progress = when (data["callType"] as? Int) {
0 -> 33 0 -> 33
1 -> 66 1 -> 66
2 ->99 2 ->99
else -> 99 else -> 99}
val (nextStepButtonBackground, textColor, containerBackground) = when (data["callType"] as? Int) {
0 -> Triple(R.drawable.grey_rounded_corner_widget, R.color.text_color, R.drawable.whitebg_yellow_border_rounded_corner_widget)
1 -> Triple(R.drawable.dark_red_rounded_corner_widget, R.color.colorWhite, R.drawable.whitebg_red_border_rounded_corner_widget)
2 -> Triple(R.drawable.green_rounded_corner_widget, R. color.colorWhite, R. drawable.whitebg_green_border_rounded_corner_widget)
else -> Triple(R. drawable.grey_rounded_corner_widget, R.color.text_color, R.drawable.whitebg_yellow_border_rounded_corner_widget)
} }
remoteViews.setInt(R.id.status_container, "setBackgroundResource", nextStepButtonBackground)
remoteViews.setInt(R.id.role_badge, "setBackgroundResource", nextStepButtonBackground)
// remoteViews.setInt(R.id.container, "setBackgroundResource", containerBackground)
remoteViews.setTextColor(R.id.status_text, ContextCompat.getColor(context, textColor))
remoteViews.setTextColor(R.id.currentServingStatus, ContextCompat.getColor(context, textColor))
remoteViews.setProgressBar(R.id.progress_bar,1, progress, true)
remoteViews.setProgressTintList(
R.id.progress_bar,
"setProgressTintList",
ColorStateList.valueOf(nextStepButtonBackground) // your desired color
);
remoteViews.setTextViewText(R.id.queue_number, data["queueNo"] as? String ?: "") remoteViews.setTextViewText(R.id.queue_number, data["queueNo"] as? String ?: "")
remoteViews.setTextViewText(R.id.currentServingStatus, data["currentlyServingStatus"] as? String ?: "") remoteViews.setTextViewText(R.id.currentServingStatus, data["currentlyServingStatus"] as? String ?: "")

@ -1,5 +1,5 @@
flutter.buildMode=debug flutter.buildMode=debug
flutter.sdk=/Users/mohamedmekawy/Documents/Flutter_SDKs/flutter_3.35.3 flutter.sdk=/Users/cloud/sdk/flutter
flutter.versionCode=38 flutter.versionCode=38
flutter.versionName=0.0.39 flutter.versionName=0.0.39
sdk.dir=/Users/mohamedmekawy/Library/Android/sdk sdk.dir=/Users/cloud/Library/Android/sdk

@ -1,16 +0,0 @@
//
// AppWidgetBundle.swift
// AppWidget
//
// Created by Cloud Solutions on 15/12/2025.
//
import WidgetKit
import SwiftUI
@main
struct AppWidgetBundle: WidgetBundle {
var body: some Widget {
AppWidgetLiveActivity()
}
}

@ -1,26 +0,0 @@
{
"images" : [
{
"filename" : "hmg.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "hmg 1.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "hmg 2.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIAppFonts</key>
<array>
<string>Poppins-Medium.ttf</string>
</array>
<key>NSSupportsLiveActivities</key>
<true/>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.widgetkit-extension</string>
</dict>
</dict>
</plist>

Binary file not shown.

@ -1,17 +0,0 @@
//
// AppWidgetLiveActivityBundle.swift
// AppWidgetLiveActivity
//
// Created by Cloud Solutions on 27/01/2026.
//
import WidgetKit
import SwiftUI
@main
struct AppWidgetLiveActivityBundle: WidgetBundle {
var body: some Widget {
AppWidgetLiveActivity()
}
}

@ -1,575 +0,0 @@
import ActivityKit
import WidgetKit
import SwiftUI
struct LiveActivitiesAppAttributes: ActivityAttributes, Identifiable {
public typealias LiveDeliveryData = ContentState // don't forget to add this line, otherwise, live activity will not display it.
public struct ContentState: Codable, Hashable { }
var id = UUID()
}
let sharedDefault = UserDefaults(suiteName: "group.alhabib.patientApp")!
struct AppWidgetAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
// Dynamic stateful properties about your activity go here!
var emoji: String
}
// Fixed non-changing properties about your activity go here!
var name: String
}
extension Color {
static let redColorText = Color(hex: "#ED1C2B")
static let yellowColor = Color(hex: "#FFAF15")
static let successColor = Color(hex: "#18C273")
static let inactiveColor = Color(hex: "#ED1C2B")
static let textColor = Color(hex: "#A2A2A2")
static let colorWhite = Color(hex: "#FFFFFF")
// Helper initializer for hex colors
init(hex: String) {
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
var int: UInt64 = 0
Scanner(string: hex).scanHexInt64(&int)
let a, r, g, b: UInt64
switch hex.count {
case 3: // RGB (12-bit)
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6: // RGB (24-bit)
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8: // ARGB (32-bit)
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (255, 0, 0, 0)
}
self.init(
.sRGB,
red: Double(r) / 255,
green: Double(g) / 255,
blue: Double(b) / 255,
opacity: Double(a) / 255
)
}
}
// MARK: - Widget Configuration based on nextStepBackground
struct WidgetColorConfig {
let nextStepBackground: Color
let nextStepTextColor: Color
let containerBorderColor: Color
static func config(for value: Int) -> WidgetColorConfig {
switch value {
case 0:
return WidgetColorConfig(
nextStepBackground: .inactiveColor,
nextStepTextColor: .textColor,
containerBorderColor: .yellowColor
)
case 1:
return WidgetColorConfig(
nextStepBackground: .redColorText,
nextStepTextColor: .colorWhite,
containerBorderColor: .redColorText
)
case 2:
return WidgetColorConfig(
nextStepBackground: .successColor,
nextStepTextColor: .colorWhite,
containerBorderColor: .successColor
)
default:
return WidgetColorConfig(
nextStepBackground: .inactiveColor,
nextStepTextColor: .textColor,
containerBorderColor: .yellowColor
)
}
}
}
// MARK: - Widget Data Model
struct NotificationWidgetData {
let currentTicket: String
let currentlyServingHeader: String
let currentlyServing: String
let status: String
let nextStep: String
let imageName: String
let colorConfig: WidgetColorConfig
let progress: Double
let yourTicketHeaderText : String
}
struct NotificationWidgetView: View {
private let data: NotificationWidgetData
private let backgroundColor: Color
let animateProgress = false
init(data: NotificationWidgetData, backgroundColor: Color = .white) {
print("it is being loaded")
self.data = data
self.backgroundColor = backgroundColor
}
var body : some View{
ZStack {
// Dark background
Color(red: 0.15, green: 0.15, blue: 0.15)
.ignoresSafeArea()
// Main card
VStack(alignment: .leading, spacing: 0) {
// Header section
HStack(alignment: .top) {
HStack( alignment: .center,spacing: 4) {
Text(data.currentTicket)
.font(.system(size: 32, weight: .bold, design: .default))
.foregroundColor(Color(red: 0, green: 0.2, blue: 0.4))
Text(data.yourTicketHeaderText)
.font(.system(size: 14, weight: .regular))
.foregroundColor(Color(hex: "#8F9AA3"))
}
Spacer()
// Hourglass icon
Image("clock")
.frame(width: 24, height:24 )
.foregroundColor(Color(hex: "#2E3039"))
.padding(.top, 4)
}
.padding(.top,4)
.padding(.bottom, 4)
// Alert banner
HStack(spacing: 4) {
Image("profession")
Text(data.nextStep)
.font(.system(size: 10, weight: .semibold))
.foregroundColor(Color(hex:"#18C273"))
}
.padding(8)
.background(Color(hex:"#1A18C273"))
.cornerRadius(8)
.padding(.bottom, 10)
// Progress bar
VStack(alignment: .leading) {
ZStack(alignment: .leading) {
// Background track
Capsule()
.fill(Color(red: 0.9, green: 0.9, blue: 0.9))
.frame(height: 4)
// Progress fill
Capsule()
.fill(Color.green)
.frame(width: data.progress, height: 4)
.animation(
Animation.easeInOut(duration: 1.5)
.delay(0.3),
value: animateProgress
)
ZStack{
Circle()
.fill(Color.white)
.frame(width: 12, height: 12)
Circle()
.fill(Color.green)
.frame(width: 10, height: 10)
.animation(
Animation.easeInOut(duration: 1.5)
.delay(0.3),
value: animateProgress
)
}
.offset(x:data.progress)
}
}
.padding(.bottom, 10)
// Footer section
HStack {
VStack(alignment: .leading, spacing: 0) {
HStack(spacing: 4) {
Text(data.currentlyServingHeader)
.font(.system(size: 14, weight: .regular))
.foregroundColor(Color(hex:"#8F9AA3"))
Text(data.currentlyServing)
.font(.system(size: 18, weight: .bold))
.foregroundColor(Color(hex:"#2E3039"))
}
}
Spacer()
// Visiting Nurse badge
HStack(spacing: 8) {
Image("profession")
.font(.system(size: 10, weight: .semibold))
.foregroundColor(Color(hex: "#18C273"))
Text(data.status)
.font(.system(size: 10, weight: .semibold))
.foregroundColor(Color(hex: "#18C273"))
}
.padding(8)
.background(Color(hex:"#1A18C273"))
.cornerRadius(8)
}
.padding(.horizontal, 8)
.padding(.bottom, 8)
}
.padding(24)
.background(backgroundColor)
.cornerRadius(24)
}
}
// var body2 : some View {
// Text(data.currentTicket)
// .font(.custom("Poppins-Medium", size: 28))
// .fontWeight(.bold)
// .foregroundColor(.black)
// .padding(.trailing, 10)
// .frame(maxWidth: .infinity, alignment: .leading)
// }
//current one that todo will be handled
// var body2: some View {
// VStack(alignment: .leading, spacing: 0) {
// // Top section with current ticket and image
// HStack(alignment: .top, spacing: 0) {
// // Current ticket value
// Text(data.currentTicket)
// .font(.custom("Poppins-Medium", size: 28))
// .fontWeight(.bold)
// .foregroundColor(.black)
// .padding(.trailing, 10)
// .frame(maxWidth: .infinity, alignment: .leading)
//
// Image(data.imageName)
// .resizable()
// .scaledToFit()
// .frame(width: 34, height: 34)
// }
// .padding(.top, 16)
// .padding(.horizontal, 16)
//
// // Currently Serving Header
// Text(data.currentlyServingHeader)
// .font(.custom("Poppins-Medium", size: 14))
// .fontWeight(.bold)
// .foregroundColor(.black)
// .padding(.trailing, 12)
// .padding(.bottom, 10)
// .padding(.horizontal, 16)
//
// // Currently Serving section with status
// HStack(alignment: .center, spacing: 0) {
// // Currently serving text
// Text(data.currentlyServing)
// .font(.custom("Poppins-Medium", size: 16))
// .fontWeight(.bold)
// .foregroundColor(.black)
// .frame(maxWidth: .infinity, alignment: .leading)
//
// // Status badge
// Text(data.status)
// .font(.custom("Poppins-Medium", size: 12))
// .foregroundColor(data.colorConfig.nextStepTextColor)
// .padding(.horizontal, 12)
// .padding(.vertical, 8)
// .background(
// RoundedRectangle(cornerRadius: 8)
// .fill(Color.inactiveColor.opacity(0.2))
// )
// }
// .padding(.horizontal, 16)
// Spacer()
// // Next Step badge
// Text(data.nextStep)
// .font(.custom("Poppins-Medium", size: 12))
// .foregroundColor(data.colorConfig.nextStepTextColor)
// .padding(.horizontal, 12)
// .padding(.vertical, 8)
// .background(
// RoundedRectangle(cornerRadius: 8)
// .fill(data.colorConfig.nextStepBackground)
// )
// .padding(.horizontal, 16)
// .padding(.bottom, 16)
// }
// .background(Color.black.opacity(0.01))
// .cornerRadius(20)
// .border(width: 10, edges: [.top, .bottom], color: data.colorConfig.containerBorderColor)
// .border(width: 2, edges: [.leading, .trailing], color: data.colorConfig.containerBorderColor)
// .overlay(
// RoundedRectangle(cornerRadius: 20)
// .stroke(data.colorConfig.containerBorderColor, lineWidth: 20)
// )
// }
}
// MARK: - Live Activity Widget
struct AppWidgetLiveActivity: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(for: LiveActivitiesAppAttributes.self) { context in
// Extract parameters from Flutter
// print("the queno is \(context.attributes.prefixedKey("title")) ===== \(sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) )")
// let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes"
// let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested"
// let currentTicket = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? "test1234"
// let status = sharedDefault.string(forKey: context.attributes.prefixedKey("callType")) ?? "test3345"
// let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? "tes"
// let nextStep = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingStatus")) ??
// "test111"
// let nextStepBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType"))
// let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes"
// let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested"
let currentTicket = getValueFromSharedDefaults("queueNo")
let status = getValueFromSharedDefaults("currentlyServingStatus") ?? "test3345"
let currentlyServing = getValueFromSharedDefaults("currentlyServingToken")
let currentlyServingHeader = getValueFromSharedDefaults("currentlyServingTitle")
let yourTicketHeader = getValueFromSharedDefaults("yourTicketHeader")
let nextStep = getValueFromSharedDefaults("nextTicketStatus")
let nextStepBackground = Int(sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingCallType")) ?? "0") ?? 0
// Get color configuration based on nextStepBackground
let colorConfig = WidgetColorConfig.config(for: nextStepBackground)
// Create widget data
let widgetData = NotificationWidgetData(
currentTicket: currentTicket,
currentlyServingHeader: currentlyServingHeader,
currentlyServing: currentlyServing,
status: status,
nextStep: nextStep,
imageName:"hmg",
colorConfig: colorConfig,
progress: 33 * Double(nextStepBackground),
yourTicketHeaderText : yourTicketHeader,
)
//
// Lock screen/banner UI
NotificationWidgetView(data: widgetData)
// Text(widgetData.currentTicket)
// .font(.custom("Poppins-Medium", size: 28))
// .fontWeight(.bold)
// .foregroundColor(.black)
// .padding(.trailing, 10)
// .frame(maxWidth: .infinity, alignment: .leading)
} dynamicIsland: { context in
let currentTicket = getValueFromSharedDefaults("queueNo")
let status = getValueFromSharedDefaults("currentlyServingStatus") ?? "test3345"
let currentlyServing = getValueFromSharedDefaults("currentlyServingToken")
let nextStep = getValueFromSharedDefaults("nextTicketStatus")
let nextStepBackground = Int(sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingCallType")) ?? "0") ?? 0
let currentlyServingHeader = getValueFromSharedDefaults("currentlyServingTitle")
let yourTicketHeader = getValueFromSharedDefaults("yourTicketHeader")
let colorConfig = WidgetColorConfig.config(for: nextStepBackground)
let widgetData = NotificationWidgetData(
currentTicket: currentTicket,
currentlyServingHeader: currentlyServingHeader,
currentlyServing: currentlyServing,
status: status,
nextStep: nextStep,
imageName:"hmg",
colorConfig: colorConfig,
progress: 33 * Double(nextStepBackground),
yourTicketHeaderText: yourTicketHeader
)
return DynamicIsland {
//
// Lock screen/banner UI
// // Expanded UI
DynamicIslandExpandedRegion(.center) {
NotificationWidgetView(data: widgetData, backgroundColor: .black.opacity(0.4)).padding(-24)
}
// DynamicIslandExpandedRegion(.trailing) {
// Image("hmg")
// .resizable()
// .scaledToFit()
// .frame(width: 34, height: 34)
// .foregroundColor(.gray)
// }
//
// DynamicIslandExpandedRegion(.center) {
// VStack(spacing: 4) {
// Text("Currently Servings:")
// .font(.caption2)
// .foregroundColor(.secondary)
//
// Text(currentlyServing)
// .font(.caption)
// .fontWeight(.semibold)
// }
// }
//
// DynamicIslandExpandedRegion(.bottom) {
// HStack {
// Text(status)
// .font(.caption2)
// .padding(.horizontal, 8)
// .padding(.vertical, 4)
// .background(
// RoundedRectangle(cornerRadius: 6)
// .fill(colorConfig.nextStepBackground.opacity(0.2))
// )
//
// Spacer()
//
// Text(nextStep)
// .font(.caption2)
// .foregroundColor(colorConfig.nextStepTextColor)
// .padding(.horizontal, 8)
// .padding(.vertical, 4)
// .background(
// RoundedRectangle(cornerRadius: 6)
// .fill(colorConfig.nextStepBackground)
// )
// }
// .padding(.horizontal)
// }
} compactLeading: {
// Compact leading view
Text(currentTicket)
.font(.caption2)
.fontWeight(.bold)
} compactTrailing: {
// Compact trailing view
Image("hmg")
.resizable()
.scaledToFit()
.frame(width: 12, height: 12)
.foregroundColor(colorConfig.containerBorderColor).padding(4)
} minimal: {
// Minimal view
HStack{
Text(currentTicket)
.font(.caption2)
.fontWeight(.bold)
Spacer()
Image("hmg")
.resizable()
.scaledToFit()
.frame(width: 4, height: 4)
.foregroundColor(colorConfig.containerBorderColor)
}.padding(2)
}
}
}
}
extension LiveActivitiesAppAttributes {
func prefixedKey(_ key: String) -> String {
print("the id is \(id)")
return "\(id)_\(key)"
}
}
//struct NotificationWidgetView_Previews: PreviewProvider {
// static var previews: some View {
// Group {
// // Preview with nextStepBackground = 0 (Yellow border)
// NotificationWidgetView(
// data: NotificationWidgetData(
// currentTicket: "42",
// currentlyServingHeader: "Currently Serving3:",
// currentlyServing: "Customer #15",
// status: "Pending",
// nextStep: "Next: Prepare Order",
// imageName: "bell.fill",
// colorConfig: .config(for: 0)
// )
// )
// .previewDisplayName("Yellow Border (0)")
//
// // Preview with nextStepBackground = 1 (Red border)
// NotificationWidgetView(
// data: NotificationWidgetData(
// currentTicket: "89",
// currentlyServingHeader: "Currently Serving2:",
// currentlyServing: "Customer #67",
// status: "Active",
// nextStep: "Next: Quality Check",
// imageName: "bell.fill",
// colorConfig: .config(for: 1)
// )
// )
// .previewDisplayName("Red Border (1)")
//
// // Preview with nextStepBackground = 2 (Green border)
// NotificationWidgetView(
// data: NotificationWidgetData(
// currentTicket: "125",
// currentlyServingHeader: "Currently Serving1:",
// currentlyServing: "Customer #98",
// status: "Completed",
// nextStep: "Next: Ready for Pickup",
// imageName: "bell.fill",
// colorConfig: .config(for: 2)
// )
// )
// .previewDisplayName("Green Border (2)")
// }
// .padding()
// .previewLayout(.sizeThatFits)
// }
//}
func getValueFromSharedDefaults(_ containingString: String) -> String {
print("Function `getValueFromSharedDefaults` is being called")
let dictionary = sharedDefault.dictionaryRepresentation()
print("Contents of sharedDefault: \(dictionary)")
for (key, value) in dictionary {
print("Inspecting key: \(key), value: \(value)")
if key.contains(containingString) {
let components = key.split(separator: "_")
if let stringValue = value as? String {
return stringValue
} else {
return "no value"
}
}
}
return "no value"
}

@ -1,11 +0,0 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -1,35 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "tinted"
}
],
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -1,6 +0,0 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -1,11 +0,0 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -1,21 +0,0 @@
{
"images" : [
{
"filename" : "icon.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -1,4 +0,0 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.4" d="M8.3335 31.6667V36.6667L31.6668 36.6667V31.6667C31.6668 25.2233 26.4435 20 20.0002 20C13.5568 20 8.3335 25.2233 8.3335 31.6667Z" fill="#9C9C9C"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.6665 2.08398C5.97615 2.08398 5.4165 2.64363 5.4165 3.33398C5.4165 4.02434 5.97615 4.58398 6.6665 4.58398H7.08317L7.08317 8.33398C7.08317 13.4808 10.0935 17.9246 14.4494 20.0007C10.0935 22.0767 7.08317 26.5205 7.08317 31.6673L7.08317 35.4173H6.6665C5.97615 35.4173 5.4165 35.977 5.4165 36.6673C5.4165 37.3577 5.97615 37.9173 6.6665 37.9173L33.3332 37.9173C34.0235 37.9173 34.5832 37.3577 34.5832 36.6673C34.5832 35.977 34.0235 35.4173 33.3332 35.4173H32.9165V31.6673C32.9165 26.5205 29.9062 22.0767 25.5502 20.0007C29.9062 17.9246 32.9165 13.4808 32.9165 8.33398V4.58398H33.3332C34.0235 4.58398 34.5832 4.02434 34.5832 3.33398C34.5832 2.64363 34.0235 2.08398 33.3332 2.08398L6.6665 2.08398ZM30.4165 4.58398L9.58317 4.58398L9.58317 8.33398C9.58317 14.087 14.2469 18.7507 19.9998 18.7507C25.7528 18.7507 30.4165 14.087 30.4165 8.33398V4.58398ZM30.4165 35.4173V31.6673C30.4165 25.9144 25.7528 21.2507 19.9998 21.2507C14.2469 21.2507 9.58317 25.9143 9.58317 31.6673V35.4173L30.4165 35.4173Z" fill="#2E3039"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

@ -1,5 +0,0 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="14" height="14" rx="3" fill="#ED1C2B"/>
<path d="M2.54806 11.4469C2.54806 11.4469 2.98492 11.4437 3.29241 11.4437L5.6242 11.455C5.90252 11.455 6.13431 11.1634 6.14737 10.7422L6.15002 8.82227C6.15002 8.41291 6.3357 8.09262 6.6236 8.07432L7.33877 8.06869C7.62708 8.08618 7.825 8.4105 7.825 8.81725L7.82316 10.7474C7.83581 11.1685 8.03006 11.4433 8.30981 11.4433L11.4488 11.4518L11.4545 9.07923C11.4545 8.67107 11.2554 8.354 10.9648 8.3353L9.70382 8.32907C9.4249 8.32907 9.20555 8.03893 9.19372 7.6173L9.18882 6.97551C9.20269 6.55449 9.42326 6.26496 9.7028 6.26496L10.9707 6.26858C11.2588 6.25028 11.4465 5.91511 11.4465 5.50755L11.4496 2.5459C11.346 2.71309 11.2043 2.85421 11.0357 2.95807C10.8671 3.06193 10.6763 3.12568 10.4784 3.14426L8.34613 3.14245C8.06843 3.14245 7.83602 3.44083 7.82296 3.86185L7.82296 5.76371C7.8099 6.18393 7.59178 6.4813 7.31285 6.4813L6.66767 6.47647C6.38793 6.47647 6.1643 6.18875 6.15165 5.76974L6.15328 3.84698C6.14063 3.42575 5.91904 3.14326 5.63991 3.14326L2.54562 3.14466L2.54562 5.50997C2.54562 5.91853 2.73925 6.24565 3.02817 6.26455L4.29609 6.25933C4.58277 6.27782 4.78579 6.61481 4.78579 7.02115L4.78192 7.56865C4.78192 7.97701 4.58604 8.30373 4.29793 8.32223L3.02797 8.31921C2.73905 8.33932 2.54541 8.66102 2.54541 9.06938L2.54806 11.4469Z" fill="white"/>
<path d="M2.54806 11.4469C2.54806 11.4469 2.98492 11.4437 3.29241 11.4437L5.6242 11.455C5.90252 11.455 6.13431 11.1634 6.14737 10.7422L6.15002 8.82227C6.15002 8.41291 6.3357 8.09262 6.6236 8.07432L7.33877 8.06869C7.62708 8.08618 7.825 8.4105 7.825 8.81725L7.82316 10.7474C7.83581 11.1685 8.03006 11.4433 8.30981 11.4433L11.4488 11.4518L11.4545 9.07923C11.4545 8.67107 11.2554 8.354 10.9648 8.3353L9.70382 8.32907C9.4249 8.32907 9.20555 8.03893 9.19372 7.6173L9.18882 6.97551C9.20269 6.55449 9.42326 6.26496 9.7028 6.26496L10.9707 6.26858C11.2588 6.25028 11.4465 5.91511 11.4465 5.50755L11.4496 2.5459C11.346 2.71309 11.2043 2.85421 11.0357 2.95807C10.8671 3.06193 10.6763 3.12568 10.4784 3.14426L8.34613 3.14245C8.06843 3.14245 7.83602 3.44083 7.82296 3.86185L7.82296 5.76371C7.8099 6.18393 7.59178 6.4813 7.31285 6.4813L6.66767 6.47647C6.38793 6.47647 6.1643 6.18875 6.15165 5.76974L6.15328 3.84698C6.14063 3.42575 5.91904 3.14326 5.63991 3.14326L2.54562 3.14466L2.54562 5.50997C2.54562 5.91853 2.73925 6.24565 3.02817 6.26455L4.29609 6.25933C4.58277 6.27782 4.78579 6.61481 4.78579 7.02115L4.78192 7.56865C4.78192 7.97701 4.58604 8.30373 4.29793 8.32223L3.02797 8.31921C2.73905 8.33932 2.54541 8.66102 2.54541 9.06938L2.54806 11.4469Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@ -1,5 +0,0 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="14" height="14" rx="3" fill="#ED1C2B"/>
<path d="M2.54806 11.4469C2.54806 11.4469 2.98492 11.4437 3.29241 11.4437L5.6242 11.455C5.90252 11.455 6.13431 11.1634 6.14737 10.7422L6.15002 8.82227C6.15002 8.41291 6.3357 8.09262 6.6236 8.07432L7.33877 8.06869C7.62708 8.08618 7.825 8.4105 7.825 8.81725L7.82316 10.7474C7.83581 11.1685 8.03006 11.4433 8.30981 11.4433L11.4488 11.4518L11.4545 9.07923C11.4545 8.67107 11.2554 8.354 10.9648 8.3353L9.70382 8.32907C9.4249 8.32907 9.20555 8.03893 9.19372 7.6173L9.18882 6.97551C9.20269 6.55449 9.42326 6.26496 9.7028 6.26496L10.9707 6.26858C11.2588 6.25028 11.4465 5.91511 11.4465 5.50755L11.4496 2.5459C11.346 2.71309 11.2043 2.85421 11.0357 2.95807C10.8671 3.06193 10.6763 3.12568 10.4784 3.14426L8.34613 3.14245C8.06843 3.14245 7.83602 3.44083 7.82296 3.86185L7.82296 5.76371C7.8099 6.18393 7.59178 6.4813 7.31285 6.4813L6.66767 6.47647C6.38793 6.47647 6.1643 6.18875 6.15165 5.76974L6.15328 3.84698C6.14063 3.42575 5.91904 3.14326 5.63991 3.14326L2.54562 3.14466L2.54562 5.50997C2.54562 5.91853 2.73925 6.24565 3.02817 6.26455L4.29609 6.25933C4.58277 6.27782 4.78579 6.61481 4.78579 7.02115L4.78192 7.56865C4.78192 7.97701 4.58604 8.30373 4.29793 8.32223L3.02797 8.31921C2.73905 8.33932 2.54541 8.66102 2.54541 9.06938L2.54806 11.4469Z" fill="white"/>
<path d="M2.54806 11.4469C2.54806 11.4469 2.98492 11.4437 3.29241 11.4437L5.6242 11.455C5.90252 11.455 6.13431 11.1634 6.14737 10.7422L6.15002 8.82227C6.15002 8.41291 6.3357 8.09262 6.6236 8.07432L7.33877 8.06869C7.62708 8.08618 7.825 8.4105 7.825 8.81725L7.82316 10.7474C7.83581 11.1685 8.03006 11.4433 8.30981 11.4433L11.4488 11.4518L11.4545 9.07923C11.4545 8.67107 11.2554 8.354 10.9648 8.3353L9.70382 8.32907C9.4249 8.32907 9.20555 8.03893 9.19372 7.6173L9.18882 6.97551C9.20269 6.55449 9.42326 6.26496 9.7028 6.26496L10.9707 6.26858C11.2588 6.25028 11.4465 5.91511 11.4465 5.50755L11.4496 2.5459C11.346 2.71309 11.2043 2.85421 11.0357 2.95807C10.8671 3.06193 10.6763 3.12568 10.4784 3.14426L8.34613 3.14245C8.06843 3.14245 7.83602 3.44083 7.82296 3.86185L7.82296 5.76371C7.8099 6.18393 7.59178 6.4813 7.31285 6.4813L6.66767 6.47647C6.38793 6.47647 6.1643 6.18875 6.15165 5.76974L6.15328 3.84698C6.14063 3.42575 5.91904 3.14326 5.63991 3.14326L2.54562 3.14466L2.54562 5.50997C2.54562 5.91853 2.73925 6.24565 3.02817 6.26455L4.29609 6.25933C4.58277 6.27782 4.78579 6.61481 4.78579 7.02115L4.78192 7.56865C4.78192 7.97701 4.58604 8.30373 4.29793 8.32223L3.02797 8.31921C2.73905 8.33932 2.54541 8.66102 2.54541 9.06938L2.54806 11.4469Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@ -1,5 +0,0 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="14" height="14" rx="3" fill="#ED1C2B"/>
<path d="M2.54806 11.4469C2.54806 11.4469 2.98492 11.4437 3.29241 11.4437L5.6242 11.455C5.90252 11.455 6.13431 11.1634 6.14737 10.7422L6.15002 8.82227C6.15002 8.41291 6.3357 8.09262 6.6236 8.07432L7.33877 8.06869C7.62708 8.08618 7.825 8.4105 7.825 8.81725L7.82316 10.7474C7.83581 11.1685 8.03006 11.4433 8.30981 11.4433L11.4488 11.4518L11.4545 9.07923C11.4545 8.67107 11.2554 8.354 10.9648 8.3353L9.70382 8.32907C9.4249 8.32907 9.20555 8.03893 9.19372 7.6173L9.18882 6.97551C9.20269 6.55449 9.42326 6.26496 9.7028 6.26496L10.9707 6.26858C11.2588 6.25028 11.4465 5.91511 11.4465 5.50755L11.4496 2.5459C11.346 2.71309 11.2043 2.85421 11.0357 2.95807C10.8671 3.06193 10.6763 3.12568 10.4784 3.14426L8.34613 3.14245C8.06843 3.14245 7.83602 3.44083 7.82296 3.86185L7.82296 5.76371C7.8099 6.18393 7.59178 6.4813 7.31285 6.4813L6.66767 6.47647C6.38793 6.47647 6.1643 6.18875 6.15165 5.76974L6.15328 3.84698C6.14063 3.42575 5.91904 3.14326 5.63991 3.14326L2.54562 3.14466L2.54562 5.50997C2.54562 5.91853 2.73925 6.24565 3.02817 6.26455L4.29609 6.25933C4.58277 6.27782 4.78579 6.61481 4.78579 7.02115L4.78192 7.56865C4.78192 7.97701 4.58604 8.30373 4.29793 8.32223L3.02797 8.31921C2.73905 8.33932 2.54541 8.66102 2.54541 9.06938L2.54806 11.4469Z" fill="white"/>
<path d="M2.54806 11.4469C2.54806 11.4469 2.98492 11.4437 3.29241 11.4437L5.6242 11.455C5.90252 11.455 6.13431 11.1634 6.14737 10.7422L6.15002 8.82227C6.15002 8.41291 6.3357 8.09262 6.6236 8.07432L7.33877 8.06869C7.62708 8.08618 7.825 8.4105 7.825 8.81725L7.82316 10.7474C7.83581 11.1685 8.03006 11.4433 8.30981 11.4433L11.4488 11.4518L11.4545 9.07923C11.4545 8.67107 11.2554 8.354 10.9648 8.3353L9.70382 8.32907C9.4249 8.32907 9.20555 8.03893 9.19372 7.6173L9.18882 6.97551C9.20269 6.55449 9.42326 6.26496 9.7028 6.26496L10.9707 6.26858C11.2588 6.25028 11.4465 5.91511 11.4465 5.50755L11.4496 2.5459C11.346 2.71309 11.2043 2.85421 11.0357 2.95807C10.8671 3.06193 10.6763 3.12568 10.4784 3.14426L8.34613 3.14245C8.06843 3.14245 7.83602 3.44083 7.82296 3.86185L7.82296 5.76371C7.8099 6.18393 7.59178 6.4813 7.31285 6.4813L6.66767 6.47647C6.38793 6.47647 6.1643 6.18875 6.15165 5.76974L6.15328 3.84698C6.14063 3.42575 5.91904 3.14326 5.63991 3.14326L2.54562 3.14466L2.54562 5.50997C2.54562 5.91853 2.73925 6.24565 3.02817 6.26455L4.29609 6.25933C4.58277 6.27782 4.78579 6.61481 4.78579 7.02115L4.78192 7.56865C4.78192 7.97701 4.58604 8.30373 4.29793 8.32223L3.02797 8.31921C2.73905 8.33932 2.54541 8.66102 2.54541 9.06938L2.54806 11.4469Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@ -1,21 +0,0 @@
{
"images" : [
{
"filename" : "doctor-02.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

@ -1,4 +0,0 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.25016 8.89518C5.38787 8.89518 5.51754 8.96002 5.60016 9.07018L7.00016 10.9368L8.40016 9.07018C8.48279 8.96002 8.61246 8.89518 8.75016 8.89518C9.27763 8.89518 9.72393 8.89517 10.0671 8.92628C10.4208 8.95833 10.7298 9.02617 11.0106 9.18825C11.3431 9.38025 11.6193 9.65639 11.8113 9.98893C11.9733 10.2697 12.0412 10.5787 12.0732 10.9324C12.1043 11.2756 12.1043 11.701 12.1043 12.2285V12.8327C12.1043 13.0743 11.9085 13.2702 11.6668 13.2702H2.3335C2.09187 13.2702 1.896 13.0743 1.896 12.8327V12.2285C1.89599 11.701 1.89599 11.2756 1.92709 10.9324C1.95915 10.5787 2.02699 10.2697 2.18907 9.98893C2.38106 9.65639 2.6572 9.38025 2.98975 9.18825C3.27048 9.02617 3.57953 8.95833 3.93323 8.92628C4.2764 8.89517 4.72269 8.89518 5.25016 8.89518Z" fill="#18C273"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.73438 4.71896L10.3155 2.3578C10.5171 1.53855 9.90831 0.728516 9.05507 0.728516H4.94519C4.09195 0.728516 3.48316 1.53855 3.68478 2.3578L4.26579 4.71859V5.83268C4.26579 7.35644 5.48349 8.60352 7.00009 8.60352C8.51668 8.60352 9.73438 7.35644 9.73438 5.83268V4.71896ZM5.14079 5.10323H8.85938V5.83268C8.85938 6.88626 8.02046 7.72852 7.00009 7.72852C5.97971 7.72852 5.14079 6.88626 5.14079 5.83268V5.10323ZM7.00002 1.60352C7.24164 1.60352 7.43752 1.79939 7.43752 2.04102V2.47837H7.87516C8.11679 2.47837 8.31266 2.67425 8.31266 2.91587C8.31266 3.1575 8.11679 3.35337 7.87516 3.35337H7.43752V3.79102C7.43752 4.03264 7.24164 4.22852 7.00002 4.22852C6.7584 4.22852 6.56252 4.03264 6.56252 3.79102V3.35337H6.12516C5.88354 3.35337 5.68766 3.1575 5.68766 2.91587C5.68766 2.67425 5.88354 2.47837 6.12516 2.47837H6.56252V2.04102C6.56252 1.79939 6.7584 1.60352 7.00002 1.60352Z" fill="#18C273"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

@ -20,7 +20,5 @@
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.0</string> <string>1.0</string>
<key>MinimumOSVersion</key>
<string>13.0</string>
</dict> </dict>
</plist> </plist>

@ -576,23 +576,23 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/webview_flutter_wkwebview/darwin" :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin"
SPEC CHECKSUMS: SPEC CHECKSUMS:
amazon_payfort: 782d287860ac8962baf4e0a2a0fb2f81fdf27204 amazon_payfort: 4ad7a3413acc1c4c4022117a80d18fee23c572d3
audio_session: 19e9480dbdd4e5f6c4543826b2e8b0e4ab6145fe audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0
barcode_scan2: 050b7b327e85954c8918715d42e83c5a35c3ed89 barcode_scan2: 4e4b850b112f4e29017833e4715f36161f987966
clarity_flutter: e4e49caa906b833300b7dabc0a9f60d0e91ccbc0 clarity_flutter: d665e4a61c0000a28e7829668a4e287cc1b657bd
connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90 CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
device_calendar: 9cb33f88a02e19652ec7b8b122ca778f751b1f7b device_calendar: b55b2c5406cfba45c95a59f9059156daee1f74ed
device_calendar_plus_ios: 34dca387f44fad29b840096a840f94edc55af858 device_calendar_plus_ios: 2c04ad7643c6e697438216e33693b84e8ca45ded
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342 device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49 file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e
firebase_analytics: bf93e20703c95030404d6ddbb1adf05bf5c3885b firebase_analytics: 0e25ca1d4001ccedd40b4e5b74c0ec34e18f6425
firebase_core: 99a37263b3c27536063a7b601d9e2a49400a433c firebase_core: 995454a784ff288be5689b796deb9e9fa3601818
firebase_crashlytics: 986773c0c7ea4c3f5a4ead141b58522fcd9dfdb1 firebase_crashlytics: 30dcd6dfd2fe895c0848af46722a4227346c19aa
firebase_messaging: bf6697c61f31c7cc0f654131212ff04c0115c2c7 firebase_messaging: f4a41dd102ac18b840eba3f39d67e77922d3f707
FirebaseAnalytics: 6433dfd311ba78084fc93bdfc145e8cb75740eae FirebaseAnalytics: 6433dfd311ba78084fc93bdfc145e8cb75740eae
FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e
FirebaseCoreExtension: edbd30474b5ccf04e5f001470bdf6ea616af2435 FirebaseCoreExtension: edbd30474b5ccf04e5f001470bdf6ea616af2435
@ -604,37 +604,37 @@ SPEC CHECKSUMS:
FirebaseSessions: b9a92c1c51bbb81e78fc3142cda6d925d700f8e7 FirebaseSessions: b9a92c1c51bbb81e78fc3142cda6d925d700f8e7
FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_amazonpaymentservices: 65a823f0cde190eaa78f1441c73b6c766ac2b899 flutter_amazonpaymentservices: 30d57c19319b81de776345023e4f0697c7d94866
flutter_app_group_directory: d2c3337f424828558953172f9378d00df9b7756d flutter_app_group_directory: 55b5362007d1c0cb45dc1dd1e94f67d615f45a6b
flutter_callkit_incoming: 417dd1b46541cdd5d855ad795ccbe97d1c18155e flutter_callkit_incoming: cb8138af67cda6dd981f7101a5d709003af21502
flutter_image_compress_common: ec1d45c362c9d30a3f6a0426c297f47c52007e3e flutter_image_compress_common: 1697a328fd72bfb335507c6bca1a65fa5ad87df1
flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
flutter_ios_voip_kit_karmm: 7ea37381a8841c92d186edf1f4604df5cc437579 flutter_ios_voip_kit_karmm: 371663476722afb631d5a13a39dee74c56c1abd0
flutter_local_notifications: ff50f8405aaa0ccdc7dcfb9022ca192e8ad9688f flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb
flutter_nfc_kit: 3985c93f749b9cb4747479205c2f10bd2f877a11 flutter_nfc_kit: e1b71583eafd2c9650bc86844a7f2d185fb414f6
flutter_paytabs_bridge: 6398a23e4c217f46a87d041d50d814cd1bf901f8 flutter_paytabs_bridge: 193d7ae44a86bf5a9b618fc839433e721e04012d
flutter_screenshot_blocker: af896cc18564521a9bcf34e8ba09ff481ec87148 flutter_screenshot_blocker: 87493b3202126286ddce134a2703fdfc1f9267ea
flutter_zoom_videosdk: 9d59a78c3e426bcf4723c7e14ac469bde1d0566b flutter_zoom_videosdk: d0c2be11c6e3bfdae9ace300f878943036cf909c
fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1
geolocator_apple: 66b711889fd333205763b83c9dcf0a57a28c7afd geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e
Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321 Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321
google_maps_flutter_ios: ffdd933832966673a1f57f5effd014dc8d4d43a2 google_maps_flutter_ios: 3213e1e5f5588b6134935cb8fc59acb4e6d88377
GoogleAdsOnDeviceConversion: 2be6297a4f048459e0ae17fad9bfd2844e10cf64 GoogleAdsOnDeviceConversion: 2be6297a4f048459e0ae17fad9bfd2844e10cf64
GoogleAppMeasurement: 700dce7541804bec33db590a5c496b663fbe2539 GoogleAppMeasurement: 700dce7541804bec33db590a5c496b663fbe2539
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
health: 9cd70a5c9d9ec559a12d639a1471091c0cbb6b48 health: 32d2fbc7f26f9a2388d1a514ce168adbfa5bda65
image_picker_ios: 4f2f91b01abdb52842a8e277617df877e40f905b image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326
in_app_review: 436034b18594851a7328d7f1c2ed5ec235b79cfc in_app_review: 7dd1ea365263f834b8464673f9df72c80c17c937
just_audio: a42c63806f16995daf5b219ae1d679deb76e6a79 just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
live_activities: 5a5313d5bf801bbbbe80d51eab80aed6d6df376b live_activities: 4dfa736d0736e1c77866a2f9c056a76513cc9e7b
local_auth_darwin: 63c73d6d28cc3e239be2b6aa460ea6e317cd5100 local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb
location: d5cf8598915965547c3f36761ae9cc4f4e87d22e location: 155caecf9da4f280ab5fe4a55f94ceccfab838f8
manage_calendar_events: 9b2889799340398027b3e3f5c4891d41599ec257 manage_calendar_events: fe1541069431af035ced925ebd9def8b4b271254
Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d
map_launcher: 8a4e484aaddff55680a7da9bc9e25f512067fb87 map_launcher: 8051ad5783913cafce93f2414c6858f2904fd8df
MapboxCommon: 119f3759f7dc9457f0695848108ab323eb643cb4 MapboxCommon: 119f3759f7dc9457f0695848108ab323eb643cb4
MapboxCoreMaps: ca17f67baced23f8c952166ac6314c35bad3f66c MapboxCoreMaps: ca17f67baced23f8c952166ac6314c35bad3f66c
MapboxCoreNavigation: 3be9990fae3ed732a101001746d0e3b4234ec023 MapboxCoreNavigation: 3be9990fae3ed732a101001746d0e3b4234ec023
@ -645,31 +645,31 @@ SPEC CHECKSUMS:
MapboxNavigationNative: 629e359f3d2590acd1ebbacaaf99e1a80ee57e42 MapboxNavigationNative: 629e359f3d2590acd1ebbacaaf99e1a80ee57e42
MapboxSpeech: cd25ef99c3a3d2e0da72620ff558276ea5991a77 MapboxSpeech: cd25ef99c3a3d2e0da72620ff558276ea5991a77
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
network_info_plus: 6613d9d7cdeb0e6f366ed4dbe4b3c51c52d567a9 network_info_plus: cf61925ab5205dce05a4f0895989afdb6aade5fc
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4 open_filex: 432f3cd11432da3e39f47fcc0df2b1603854eff1
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
path_provider_foundation: 0b743cbb62d8e47eab856f09262bb8c1ddcfe6ba path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880
PayFortSDK: 233eabe9a45601fdbeac67fa6e5aae46ed8faf82 PayFortSDK: 233eabe9a45601fdbeac67fa6e5aae46ed8faf82
PayTabsSDK: 51d21d0174679d08ee816583266aa5f557ebf5ed PayTabsSDK: 51d21d0174679d08ee816583266aa5f557ebf5ed
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
Polyline: 2a1f29f87f8d9b7de868940f4f76deb8c678a5b1 Polyline: 2a1f29f87f8d9b7de868940f4f76deb8c678a5b1
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
screen_brightness_ios: 7437207a2a9bc56553aa10f782afecf830b4c4e2 screen_brightness_ios: 28c5fbdb40634de44f86025d84470158ad4df48c
SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a
SDWebImageWebPCoder: 0e06e365080397465cc73a7a9b472d8a3bd0f377 SDWebImageWebPCoder: 0e06e365080397465cc73a7a9b472d8a3bd0f377
share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
shared_preferences_foundation: 5086985c1d43c5ba4d5e69a4e8083a389e2909e6 shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
Solar-dev: 4612dc9878b9fed2667d23b327f1d4e54e16e8d0 Solar-dev: 4612dc9878b9fed2667d23b327f1d4e54e16e8d0
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
SwiftProtobuf: 409d3aaec90e51b1705b1dd8065b56893450e77c SwiftProtobuf: 409d3aaec90e51b1705b1dd8065b56893450e77c
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
Turf: aa2ede4298009639d10db36aba1a7ebaad072a5e Turf: aa2ede4298009639d10db36aba1a7ebaad072a5e
url_launcher_ios: bb13df5870e8c4234ca12609d04010a21be43dfa url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b
video_player_avfoundation: 7993f492ae0bd77edaea24d9dc051d8bb2cd7c86 video_player_avfoundation: dd410b52df6d2466a42d28550e33e4146928280a
wakelock_plus: 76957ab028e12bfa4e66813c99e46637f367fc7e wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
webview_flutter_wkwebview: 29eb20d43355b48fe7d07113835b9128f84e3af4 webview_flutter_wkwebview: 8ebf4fded22593026f7dbff1fbff31ea98573c8d
ZoomVideoSDK: c3ac797074847382d9b539044d77f5971d6b62cd ZoomVideoSDK: c3ac797074847382d9b539044d77f5971d6b62cd
PODFILE CHECKSUM: b2fdde559476ac2931f2a7ceec6cf5a78743c72b PODFILE CHECKSUM: b2fdde559476ac2931f2a7ceec6cf5a78743c72b

@ -8,24 +8,16 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
1587365701FF0D2AAAFED0D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A83C76CFF9D3F92EDE3B22B4 /* Pods_Runner.framework */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
478CFA942E638C8E0064F3D7 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 478CFA932E638C8E0064F3D7 /* GoogleService-Info.plist */; }; 478CFA942E638C8E0064F3D7 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 478CFA932E638C8E0064F3D7 /* GoogleService-Info.plist */; };
61243B492EC5FA3700D46FA0 /* PenguinModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61243B422EC5FA3700D46FA0 /* PenguinModel.swift */; }; 58A16A1D1E63FA0AF61318A5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE7076AA781403E32077FCBF /* Pods_Runner.framework */; };
61243B4C2EC5FA3700D46FA0 /* HMGPenguinInPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61243B3D2EC5FA3700D46FA0 /* HMGPenguinInPlatformBridge.swift */; }; 61AE8DCB3010AA4700DB059A /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61D6D9F1300F522E002E5487 /* WidgetKit.framework */; };
61243B502EC5FA3700D46FA0 /* PenguinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61243B452EC5FA3700D46FA0 /* PenguinView.swift */; }; 61AE8DCC3010AA4700DB059A /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61D6D9F3300F522E002E5487 /* SwiftUI.framework */; };
61243B542EC5FA3700D46FA0 /* PenguinPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61243B442EC5FA3700D46FA0 /* PenguinPlugin.swift */; }; 61AE8DD93010AA4A00DB059A /* live_notificationExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 61AE8DCA3010AA4700DB059A /* live_notificationExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
61243B562EC5FA3700D46FA0 /* PenguinNavigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61243B432EC5FA3700D46FA0 /* PenguinNavigator.swift */; }; 61D6DAB9300F718A002E5487 /* LiveActivityHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61D6DAB8300F718A002E5487 /* LiveActivityHelper.swift */; };
61243B572EC5FA3700D46FA0 /* PenguinViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61243B462EC5FA3700D46FA0 /* PenguinViewFactory.swift */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
76AA18AE2F3B2A4D00DC8DFC /* ring_30Sec.caf in Resources */ = {isa = PBXBuildFile; fileRef = 76AA18AC2F3B2A4D00DC8DFC /* ring_30Sec.caf */; }; 76AA18AE2F3B2A4D00DC8DFC /* ring_30Sec.caf in Resources */ = {isa = PBXBuildFile; fileRef = 76AA18AC2F3B2A4D00DC8DFC /* ring_30Sec.caf */; };
76B1D2512F91BF8000DBBD1B /* Penguin.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76B1D24E2F91BF8000DBBD1B /* Penguin.xcframework */; };
76B1D2522F91BF8000DBBD1B /* Penguin.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 76B1D24E2F91BF8000DBBD1B /* Penguin.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
76B1D2532F91BF8000DBBD1B /* PenguinINRenderer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76B1D24F2F91BF8000DBBD1B /* PenguinINRenderer.xcframework */; };
76B1D2542F91BF8000DBBD1B /* PenguinINRenderer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 76B1D24F2F91BF8000DBBD1B /* PenguinINRenderer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
76B1D2552F91BF8000DBBD1B /* PenNavUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76B1D2502F91BF8000DBBD1B /* PenNavUI.xcframework */; };
76B1D2562F91BF8000DBBD1B /* PenNavUI.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 76B1D2502F91BF8000DBBD1B /* PenNavUI.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@ -39,18 +31,33 @@
remoteGlobalIDString = 97C146ED1CF9000F007C117D; remoteGlobalIDString = 97C146ED1CF9000F007C117D;
remoteInfo = Runner; remoteInfo = Runner;
}; };
61AE8DD73010AA4A00DB059A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
proxyType = 1;
remoteGlobalIDString = 61AE8DC93010AA4700DB059A;
remoteInfo = live_notificationExtension;
};
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */ /* Begin PBXCopyFilesBuildPhase section */
61D6DA07300F5240002E5487 /* Embed Foundation Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
61AE8DD93010AA4A00DB059A /* live_notificationExtension.appex in Embed Foundation Extensions */,
);
name = "Embed Foundation Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
765A5A922F35CD8B0003FF7D /* Embed Frameworks */ = { 765A5A922F35CD8B0003FF7D /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase; isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
dstPath = ""; dstPath = "";
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
76B1D2542F91BF8000DBBD1B /* PenguinINRenderer.xcframework in Embed Frameworks */,
76B1D2522F91BF8000DBBD1B /* Penguin.xcframework in Embed Frameworks */,
76B1D2562F91BF8000DBBD1B /* PenNavUI.xcframework in Embed Frameworks */,
); );
name = "Embed Frameworks"; name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -58,30 +65,26 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
05E1B2A0E6844572ADA81174 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
237D1205ED89EAB6C90BC64D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
3EAE1F31D8D0AA94CA6C11EB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
478CFA932E638C8E0064F3D7 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; }; 478CFA932E638C8E0064F3D7 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
478CFA952E6E20A60064F3D7 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; }; 478CFA952E6E20A60064F3D7 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
61243B3D2EC5FA3700D46FA0 /* HMGPenguinInPlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMGPenguinInPlatformBridge.swift; sourceTree = "<group>"; }; 612BC91D3011009600FF6F5B /* live_notificationExtensionDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = live_notificationExtensionDebug.entitlements; sourceTree = "<group>"; };
61243B422EC5FA3700D46FA0 /* PenguinModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinModel.swift; sourceTree = "<group>"; }; 61AE8DCA3010AA4700DB059A /* live_notificationExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = live_notificationExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
61243B432EC5FA3700D46FA0 /* PenguinNavigator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinNavigator.swift; sourceTree = "<group>"; }; 61D6D9F1300F522E002E5487 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
61243B442EC5FA3700D46FA0 /* PenguinPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinPlugin.swift; sourceTree = "<group>"; }; 61D6D9F3300F522E002E5487 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
61243B452EC5FA3700D46FA0 /* PenguinView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinView.swift; sourceTree = "<group>"; }; 61D6DAB8300F718A002E5487 /* LiveActivityHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LiveActivityHelper.swift; path = Helper/LiveActivityHelper.swift; sourceTree = "<group>"; };
61243B462EC5FA3700D46FA0 /* PenguinViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinViewFactory.swift; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
769C9BF82E6F106D009F68A9 /* RunnerDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerDebug.entitlements; sourceTree = "<group>"; }; 769C9BF82E6F106D009F68A9 /* RunnerDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerDebug.entitlements; sourceTree = "<group>"; };
76AA18AC2F3B2A4D00DC8DFC /* ring_30Sec.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = ring_30Sec.caf; sourceTree = "<group>"; }; 76AA18AC2F3B2A4D00DC8DFC /* ring_30Sec.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = ring_30Sec.caf; sourceTree = "<group>"; };
76B1D24E2F91BF8000DBBD1B /* Penguin.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Penguin.xcframework; path = Frameworks/Penguin.xcframework; sourceTree = "<group>"; };
76B1D24F2F91BF8000DBBD1B /* PenguinINRenderer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenguinINRenderer.xcframework; path = Frameworks/PenguinINRenderer.xcframework; sourceTree = "<group>"; };
76B1D2502F91BF8000DBBD1B /* PenNavUI.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenNavUI.xcframework; path = Frameworks/PenNavUI.xcframework; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7BEF44ABFEF585D64D3F266C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; 80AB360F7825C2FB720CB86E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
93CFB47A4DD7AA77469CFEC2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -89,18 +92,49 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A83C76CFF9D3F92EDE3B22B4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CE7076AA781403E32077FCBF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
61AE8DDA3010AA4A00DB059A /* Exceptions for "live_notification" folder in "live_notificationExtension" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 61AE8DC93010AA4700DB059A /* live_notificationExtension */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
61AE8DCD3010AA4700DB059A /* live_notification */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
61AE8DDA3010AA4A00DB059A /* Exceptions for "live_notification" folder in "live_notificationExtension" target */,
);
explicitFileTypes = {
};
explicitFolders = (
);
path = live_notification;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
61AE8DC73010AA4700DB059A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
61AE8DCC3010AA4700DB059A /* SwiftUI.framework in Frameworks */,
61AE8DCB3010AA4700DB059A /* WidgetKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EB1CF9000F007C117D /* Frameworks */ = { 97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
76B1D2512F91BF8000DBBD1B /* Penguin.xcframework in Frameworks */, 58A16A1D1E63FA0AF61318A5 /* Pods_Runner.framework in Frameworks */,
76B1D2552F91BF8000DBBD1B /* PenNavUI.xcframework in Frameworks */,
76B1D2532F91BF8000DBBD1B /* PenguinINRenderer.xcframework in Frameworks */,
DE1EF78253E64BE86845D2CC /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -115,33 +149,12 @@
path = RunnerTests; path = RunnerTests;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
61243B412EC5FA3700D46FA0 /* Helper */ = {
isa = PBXGroup;
children = (
61243B3D2EC5FA3700D46FA0 /* HMGPenguinInPlatformBridge.swift */,
);
path = Helper;
sourceTree = "<group>";
};
61243B472EC5FA3700D46FA0 /* Penguin */ = {
isa = PBXGroup;
children = (
61243B422EC5FA3700D46FA0 /* PenguinModel.swift */,
61243B432EC5FA3700D46FA0 /* PenguinNavigator.swift */,
61243B442EC5FA3700D46FA0 /* PenguinPlugin.swift */,
61243B452EC5FA3700D46FA0 /* PenguinView.swift */,
61243B462EC5FA3700D46FA0 /* PenguinViewFactory.swift */,
);
path = Penguin;
sourceTree = "<group>";
};
766D8CB22EC60BE600D05E07 /* Frameworks */ = { 766D8CB22EC60BE600D05E07 /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
76B1D24E2F91BF8000DBBD1B /* Penguin.xcframework */, 61D6D9F1300F522E002E5487 /* WidgetKit.framework */,
76B1D24F2F91BF8000DBBD1B /* PenguinINRenderer.xcframework */, 61D6D9F3300F522E002E5487 /* SwiftUI.framework */,
76B1D2502F91BF8000DBBD1B /* PenNavUI.xcframework */, CE7076AA781403E32077FCBF /* Pods_Runner.framework */,
A83C76CFF9D3F92EDE3B22B4 /* Pods_Runner.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
@ -149,9 +162,9 @@
79DD2093A1D9674C94359FC8 /* Pods */ = { 79DD2093A1D9674C94359FC8 /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
3EAE1F31D8D0AA94CA6C11EB /* Pods-Runner.debug.xcconfig */, 237D1205ED89EAB6C90BC64D /* Pods-Runner.debug.xcconfig */,
05E1B2A0E6844572ADA81174 /* Pods-Runner.release.xcconfig */, 93CFB47A4DD7AA77469CFEC2 /* Pods-Runner.release.xcconfig */,
7BEF44ABFEF585D64D3F266C /* Pods-Runner.profile.xcconfig */, 80AB360F7825C2FB720CB86E /* Pods-Runner.profile.xcconfig */,
); );
path = Pods; path = Pods;
sourceTree = "<group>"; sourceTree = "<group>";
@ -170,8 +183,10 @@
97C146E51CF9000F007C117D = { 97C146E51CF9000F007C117D = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
612BC91D3011009600FF6F5B /* live_notificationExtensionDebug.entitlements */,
9740EEB11CF90186004384FC /* Flutter */, 9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */, 97C146F01CF9000F007C117D /* Runner */,
61AE8DCD3010AA4700DB059A /* live_notification */,
97C146EF1CF9000F007C117D /* Products */, 97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */, 331C8082294A63A400263BE5 /* RunnerTests */,
79DD2093A1D9674C94359FC8 /* Pods */, 79DD2093A1D9674C94359FC8 /* Pods */,
@ -184,6 +199,7 @@
children = ( children = (
97C146EE1CF9000F007C117D /* Runner.app */, 97C146EE1CF9000F007C117D /* Runner.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */, 331C8081294A63A400263BE5 /* RunnerTests.xctest */,
61AE8DCA3010AA4700DB059A /* live_notificationExtension.appex */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@ -191,9 +207,8 @@
97C146F01CF9000F007C117D /* Runner */ = { 97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
61D6DAB8300F718A002E5487 /* LiveActivityHelper.swift */,
76AA18AC2F3B2A4D00DC8DFC /* ring_30Sec.caf */, 76AA18AC2F3B2A4D00DC8DFC /* ring_30Sec.caf */,
61243B412EC5FA3700D46FA0 /* Helper */,
61243B472EC5FA3700D46FA0 /* Penguin */,
769C9BF82E6F106D009F68A9 /* RunnerDebug.entitlements */, 769C9BF82E6F106D009F68A9 /* RunnerDebug.entitlements */,
478CFA952E6E20A60064F3D7 /* Runner.entitlements */, 478CFA952E6E20A60064F3D7 /* Runner.entitlements */,
478CFA932E638C8E0064F3D7 /* GoogleService-Info.plist */, 478CFA932E638C8E0064F3D7 /* GoogleService-Info.plist */,
@ -229,23 +244,45 @@
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test"; productType = "com.apple.product-type.bundle.unit-test";
}; };
61AE8DC93010AA4700DB059A /* live_notificationExtension */ = {
isa = PBXNativeTarget;
buildConfigurationList = 61AE8DDB3010AA4A00DB059A /* Build configuration list for PBXNativeTarget "live_notificationExtension" */;
buildPhases = (
61AE8DC63010AA4700DB059A /* Sources */,
61AE8DC73010AA4700DB059A /* Frameworks */,
61AE8DC83010AA4700DB059A /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
61AE8DCD3010AA4700DB059A /* live_notification */,
);
name = live_notificationExtension;
productName = live_notificationExtension;
productReference = 61AE8DCA3010AA4700DB059A /* live_notificationExtension.appex */;
productType = "com.apple.product-type.app-extension";
};
97C146ED1CF9000F007C117D /* Runner */ = { 97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = ( buildPhases = (
EA10FC42B68E41E75A052FAA /* [CP] Check Pods Manifest.lock */, 8DED67C11B08C38D4CA4B516 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */, 9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */, 97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */, 97C146EB1CF9000F007C117D /* Frameworks */,
61D6DA07300F5240002E5487 /* Embed Foundation Extensions */,
97C146EC1CF9000F007C117D /* Resources */, 97C146EC1CF9000F007C117D /* Resources */,
765A5A922F35CD8B0003FF7D /* Embed Frameworks */, 765A5A922F35CD8B0003FF7D /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
5D78F615DF2D966539B34DE2 /* [CP] Embed Pods Frameworks */, 64913143522DD2E7A5709D09 /* [CP] Embed Pods Frameworks */,
4AA9AE39AD56A64A1F16E548 /* [CP] Copy Pods Resources */, 57400ED2A0499CE460F108E2 /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
dependencies = ( dependencies = (
61AE8DD83010AA4A00DB059A /* PBXTargetDependency */,
); );
name = Runner; name = Runner;
productName = Runner; productName = Runner;
@ -259,6 +296,7 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
BuildIndependentTargetsInParallel = YES; BuildIndependentTargetsInParallel = YES;
LastSwiftUpdateCheck = 2640;
LastUpgradeCheck = 1510; LastUpgradeCheck = 1510;
ORGANIZATIONNAME = ""; ORGANIZATIONNAME = "";
TargetAttributes = { TargetAttributes = {
@ -266,6 +304,9 @@
CreatedOnToolsVersion = 14.0; CreatedOnToolsVersion = 14.0;
TestTargetID = 97C146ED1CF9000F007C117D; TestTargetID = 97C146ED1CF9000F007C117D;
}; };
61AE8DC93010AA4700DB059A = {
CreatedOnToolsVersion = 26.4.1;
};
97C146ED1CF9000F007C117D = { 97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1; CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100; LastSwiftMigration = 1100;
@ -287,6 +328,7 @@
targets = ( targets = (
97C146ED1CF9000F007C117D /* Runner */, 97C146ED1CF9000F007C117D /* Runner */,
331C8080294A63A400263BE5 /* RunnerTests */, 331C8080294A63A400263BE5 /* RunnerTests */,
61AE8DC93010AA4700DB059A /* live_notificationExtension */,
); );
}; };
/* End PBXProject section */ /* End PBXProject section */
@ -299,6 +341,13 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
61AE8DC83010AA4700DB059A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EC1CF9000F007C117D /* Resources */ = { 97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -329,9 +378,9 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n";
}; };
4AA9AE39AD56A64A1F16E548 /* [CP] Copy Pods Resources */ = { 57400ED2A0499CE460F108E2 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -348,7 +397,7 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
5D78F615DF2D966539B34DE2 /* [CP] Embed Pods Frameworks */ = { 64913143522DD2E7A5709D09 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -365,42 +414,42 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
9740EEB61CF901F6004384FC /* Run Script */ = { 8DED67C11B08C38D4CA4B516 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = (
);
inputPaths = ( inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
); );
name = "Run Script";
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
}; };
EA10FC42B68E41E75A052FAA /* [CP] Check Pods Manifest.lock */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = (
);
inputPaths = ( inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
); );
name = "Run Script";
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
showEnvVarsInLog = 0;
}; };
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
@ -413,18 +462,20 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
61AE8DC63010AA4700DB059A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EA1CF9000F007C117D /* Sources */ = { 97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
61243B492EC5FA3700D46FA0 /* PenguinModel.swift in Sources */,
61243B4C2EC5FA3700D46FA0 /* HMGPenguinInPlatformBridge.swift in Sources */,
61243B502EC5FA3700D46FA0 /* PenguinView.swift in Sources */,
61243B542EC5FA3700D46FA0 /* PenguinPlugin.swift in Sources */,
61243B562EC5FA3700D46FA0 /* PenguinNavigator.swift in Sources */,
61243B572EC5FA3700D46FA0 /* PenguinViewFactory.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
61D6DAB9300F718A002E5487 /* LiveActivityHelper.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -436,6 +487,11 @@
target = 97C146ED1CF9000F007C117D /* Runner */; target = 97C146ED1CF9000F007C117D /* Runner */;
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
}; };
61AE8DD83010AA4A00DB059A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 61AE8DC93010AA4700DB059A /* live_notificationExtension */;
targetProxy = 61AE8DD73010AA4A00DB059A /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */ /* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */ /* Begin PBXVariantGroup section */
@ -586,6 +642,136 @@
}; };
name = Profile; name = Profile;
}; };
61AE8DDC3010AA4A00DB059A /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = live_notificationExtensionDebug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3A359E86ZF;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = live_notification/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = live_notification;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 26.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.cloudsolutions.HMGPatientApp.live-notification";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
61AE8DDD3010AA4A00DB059A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3A359E86ZF;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = live_notification/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = live_notification;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 26.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.cloudsolutions.HMGPatientApp.live-notification";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
61AE8DDE3010AA4A00DB059A /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3A359E86ZF;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = live_notification/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = live_notification;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 26.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.cloudsolutions.HMGPatientApp.live-notification";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = { 97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
@ -703,7 +889,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/RunnerDebug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2; CURRENT_PROJECT_VERSION = 2;
@ -769,6 +955,16 @@
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug; defaultConfigurationName = Debug;
}; };
61AE8DDB3010AA4A00DB059A /* Build configuration list for PBXNativeTarget "live_notificationExtension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
61AE8DDC3010AA4A00DB059A /* Debug */,
61AE8DDD3010AA4A00DB059A /* Release */,
61AE8DDE3010AA4A00DB059A /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (

@ -20,6 +20,7 @@ import GoogleMaps
func initializePlatformChannels(){ func initializePlatformChannels(){
if let mainViewController = window?.rootViewController as? FlutterViewController{ // platform initialization suppose to be in foreground if let mainViewController = window?.rootViewController as? FlutterViewController{ // platform initialization suppose to be in foreground
HMGPenguinInPlatformBridge.initialize(flutterViewController: mainViewController) HMGPenguinInPlatformBridge.initialize(flutterViewController: mainViewController)
LiveActivityHelper().initialize(mainViewController)
} }
} }
override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data){ override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data){

@ -6,7 +6,7 @@
// //
import Foundation import Foundation
import FLAnimatedImage
class LiveActivityHelper{ class LiveActivityHelper{

@ -4,6 +4,14 @@
<dict> <dict>
<key>aps-environment</key> <key>aps-environment</key>
<string>development</string> <string>development</string>
<key>com.apple.developer.healthkit</key>
<true/>
<key>com.apple.developer.healthkit.access</key>
<array>
<string>health-records</string>
</array>
<key>com.apple.developer.healthkit.background-delivery</key>
<true/>
<key>com.apple.developer.in-app-payments</key> <key>com.apple.developer.in-app-payments</key>
<array> <array>
<string>merchant.com.hmgwebservices</string> <string>merchant.com.hmgwebservices</string>
@ -13,5 +21,9 @@
<array> <array>
<string>TAG</string> <string>TAG</string>
</array> </array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.alhabib.patientApp</string>
</array>
</dict> </dict>
</plist> </plist>

@ -2,7 +2,7 @@
// live_notificationBundle.swift // live_notificationBundle.swift
// live_notification // live_notification
// //
// Created by Haroon Amjad on 20/07/2026. // Created by Cloud Solutions on 22/07/2026.
// //
import WidgetKit import WidgetKit

@ -2,12 +2,13 @@ import ActivityKit
import WidgetKit import WidgetKit
import SwiftUI import SwiftUI
struct LiveActivitiesAppAttributes: ActivityAttributes, Identifiable { struct LiveActivitiesAppAttributes: ActivityAttributes, Identifiable {
public typealias LiveDeliveryData = ContentState // don't forget to add this line, otherwise, live activity will not display it. public typealias LiveDeliveryData = ContentState // don't forget to add this line, otherwise, live activity will not display it.
public struct ContentState: Codable, Hashable { } public struct ContentState: Codable, Hashable { }
var id = UUID() var id = UUID()
} }
@ -26,7 +27,7 @@ extension Color {
static let redColorText = Color(hex: "#ED1C2B") static let redColorText = Color(hex: "#ED1C2B")
static let yellowColor = Color(hex: "#FFAF15") static let yellowColor = Color(hex: "#FFAF15")
static let successColor = Color(hex: "#18C273") static let successColor = Color(hex: "#18C273")
static let inactiveColor = Color(hex: "#ED1C2B") static let inactiveColor = Color(hex: "#FFA2A2A2")
static let textColor = Color(hex: "#A2A2A2") static let textColor = Color(hex: "#A2A2A2")
static let colorWhite = Color(hex: "#FFFFFF") static let colorWhite = Color(hex: "#FFFFFF")
@ -67,7 +68,7 @@ struct WidgetColorConfig {
case 0: case 0:
return WidgetColorConfig( return WidgetColorConfig(
nextStepBackground: .inactiveColor, nextStepBackground: .inactiveColor,
nextStepTextColor: .textColor, nextStepTextColor: .colorWhite,
containerBorderColor: .yellowColor containerBorderColor: .yellowColor
) )
case 1: case 1:
@ -97,28 +98,150 @@ struct NotificationWidgetData {
let currentTicket: String let currentTicket: String
let currentlyServingHeader: String let currentlyServingHeader: String
let currentlyServing: String let currentlyServing: String
let status: String let currentlyServingStatus: String
let nextStep: String let nextStep: String
let imageName: String let imageName: String
let colorConfig: WidgetColorConfig let colorConfig: WidgetColorConfig
let progress: Double
let yourTicketHeaderText : String
} }
struct NotificationWidgetView: View { struct NotificationWidgetView: View {
private let data: NotificationWidgetData private let data: NotificationWidgetData
private let backgroundColor: Color
init(data: NotificationWidgetData) { let animateProgress = false
init(data: NotificationWidgetData, backgroundColor: Color = .white) {
print("it is being loaded") print("it is being loaded")
self.data = data self.data = data
self.backgroundColor = backgroundColor
} }
var body : some View{ var body : some View{
// ZStack(){ ZStack {
body2 // Dark background
// .frame(width: .infinity, height: 400 ) Color(red: 0.15, green: 0.15, blue: 0.15)
// .padding(.top, 340) .ignoresSafeArea()
// .cornerRadius(20)
// }.background(data.colorConfig.containerBorderColor) // Main card
// .cornerRadius(20) VStack(alignment: .leading, spacing: 0) {
// Header section
HStack(alignment: .top) {
HStack( alignment: .center,spacing: 4) {
Text(data.currentTicket)
.font(.system(size: 32, weight: .bold, design: .default))
.foregroundColor(Color(red: 0, green: 0.2, blue: 0.4))
Text(data.yourTicketHeaderText)
.font(.system(size: 14, weight: .regular))
.foregroundColor(Color(hex: "#8F9AA3"))
}
Spacer()
// Hourglass icon
Image("hmg")
.frame(width: 24, height:24 )
.foregroundColor(Color(hex: "#2E3039"))
.padding(.top, 4)
}
.padding(.top,4)
.padding(.bottom, 4)
// Alert banner
HStack(spacing: 4) {
Image("profession")
Text(data.nextStep)
.font(.system(size: 10, weight: .semibold))
.foregroundColor(data.colorConfig.nextStepTextColor)
}
.padding(8)
.background(data.colorConfig.nextStepBackground)
.cornerRadius(8)
.padding(.bottom, 10)
// // Progress bar
// VStack(alignment: .leading) {
// ZStack(alignment: .leading) {
// // Background track
// Capsule()
// .fill(Color(red: 0.9, green: 0.9, blue: 0.9))
// .frame(height: 4)
//
// // Progress fill
// Capsule()
// .fill(Color.green)
// .frame(width: data.progress, height: 4)
// .animation(
// Animation.easeInOut(duration: 1.5)
// .delay(0.3),
// value: animateProgress
// )
//
// ZStack{
// Circle()
// .fill(Color.white)
// .frame(width: 12, height: 12)
//
// Circle()
// .fill(data.colorConfig.nextStepBackground)
// .frame(width: 10, height: 10)
//
// .animation(
// Animation.easeInOut(duration: 1.5)
// .delay(0.3),
// value: animateProgress
// )
// }
// .offset(x:data.progress)
//
// }
// }
// .padding(.bottom, 10)
// Footer section
if !data.currentlyServing.isEmpty {
HStack {
VStack(alignment: .leading, spacing: 0) {
HStack(spacing: 4) {
Text(data.currentlyServingHeader)
.font(.system(size: 14, weight: .regular))
.foregroundColor(Color(hex:"#8F9AA3"))
Text(data.currentlyServing)
.font(.system(size: 18, weight: .bold))
.foregroundColor(Color(hex:"#2E3039"))
}
}
Spacer()
// Visiting Nurse badge
HStack(spacing: 8) {
Image("profession")
.font(.system(size: 10, weight: .semibold))
.foregroundColor(Color(hex: "#18C273"))
Text(data.currentlyServingStatus)
.font(.system(size: 10, weight: .semibold))
.foregroundColor(data.colorConfig.nextStepTextColor)
}
.padding(8)
.background(data.colorConfig.nextStepBackground)
.cornerRadius(8)
}
.padding(.horizontal, 8)
.padding(.bottom, 8)
}
}
.padding(24)
.background(backgroundColor)
.cornerRadius(24)
}
} }
// var body2 : some View { // var body2 : some View {
@ -130,46 +253,46 @@ struct NotificationWidgetView: View {
// .frame(maxWidth: .infinity, alignment: .leading) // .frame(maxWidth: .infinity, alignment: .leading)
// } // }
//current one that todo will be handled //current one that todo will be handled
var body2: some View { // var body2: some View {
VStack(alignment: .leading, spacing: 0) { // VStack(alignment: .leading, spacing: 0) {
// Top section with current ticket and image // // Top section with current ticket and image
HStack(alignment: .top, spacing: 0) { // HStack(alignment: .top, spacing: 0) {
// Current ticket value // // Current ticket value
Text(data.currentTicket) // Text(data.currentTicket)
.font(.custom("Poppins-Medium", size: 28)) // .font(.custom("Poppins-Medium", size: 28))
.fontWeight(.bold) // .fontWeight(.bold)
.foregroundColor(.black) // .foregroundColor(.black)
.padding(.trailing, 10) // .padding(.trailing, 10)
.frame(maxWidth: .infinity, alignment: .leading) // .frame(maxWidth: .infinity, alignment: .leading)
//
Image(data.imageName) // Image(data.imageName)
.resizable() // .resizable()
.scaledToFit() // .scaledToFit()
.frame(width: 34, height: 34) // .frame(width: 34, height: 34)
} // }
.padding(.top, 16) // .padding(.top, 16)
.padding(.horizontal, 16) // .padding(.horizontal, 16)
//
// Currently Serving Header // // Currently Serving Header
Text(data.currentlyServingHeader) // Text(data.currentlyServingHeader)
.font(.custom("Poppins-Medium", size: 14)) // .font(.custom("Poppins-Medium", size: 14))
.fontWeight(.bold) // .fontWeight(.bold)
.foregroundColor(.black) // .foregroundColor(.black)
.padding(.trailing, 12) // .padding(.trailing, 12)
.padding(.bottom, 10) // .padding(.bottom, 10)
.padding(.horizontal, 16) // .padding(.horizontal, 16)
//
// Currently Serving section with status // // Currently Serving section with currentlyServingStatus
HStack(alignment: .center, spacing: 0) { // HStack(alignment: .center, spacing: 0) {
// Currently serving text // // Currently serving text
Text(data.currentlyServing) // Text(data.currentlyServing)
.font(.custom("Poppins-Medium", size: 16)) // .font(.custom("Poppins-Medium", size: 16))
.fontWeight(.bold) // .fontWeight(.bold)
.foregroundColor(.black) // .foregroundColor(.black)
.frame(maxWidth: .infinity, alignment: .leading) // .frame(maxWidth: .infinity, alignment: .leading)
//
// Status badge // // currentlyServingStatus badge
// Text(data.status) // Text(data.currentlyServingStatus)
// .font(.custom("Poppins-Medium", size: 12)) // .font(.custom("Poppins-Medium", size: 12))
// .foregroundColor(data.colorConfig.nextStepTextColor) // .foregroundColor(data.colorConfig.nextStepTextColor)
// .padding(.horizontal, 12) // .padding(.horizontal, 12)
@ -178,24 +301,24 @@ struct NotificationWidgetView: View {
// RoundedRectangle(cornerRadius: 8) // RoundedRectangle(cornerRadius: 8)
// .fill(Color.inactiveColor.opacity(0.2)) // .fill(Color.inactiveColor.opacity(0.2))
// ) // )
} // }
.padding(.horizontal, 16) // .padding(.horizontal, 16)
Spacer() // Spacer()
// Next Step badge // // Next Step badge
Text(data.nextStep) // Text(data.nextStep)
.font(.custom("Poppins-Medium", size: 12)) // .font(.custom("Poppins-Medium", size: 12))
.foregroundColor(data.colorConfig.nextStepTextColor) // .foregroundColor(data.colorConfig.nextStepTextColor)
.padding(.horizontal, 12) // .padding(.horizontal, 12)
.padding(.vertical, 8) // .padding(.vertical, 8)
.background( // .background(
RoundedRectangle(cornerRadius: 8) // RoundedRectangle(cornerRadius: 8)
.fill(data.colorConfig.nextStepBackground) // .fill(data.colorConfig.nextStepBackground)
) // )
.padding(.horizontal, 16) // .padding(.horizontal, 16)
.padding(.bottom, 16) // .padding(.bottom, 16)
} // }
.background(Color.black.opacity(0.01)) // .background(Color.black.opacity(0.01))
.cornerRadius(20) // .cornerRadius(20)
// .border(width: 10, edges: [.top, .bottom], color: data.colorConfig.containerBorderColor) // .border(width: 10, edges: [.top, .bottom], color: data.colorConfig.containerBorderColor)
// .border(width: 2, edges: [.leading, .trailing], color: data.colorConfig.containerBorderColor) // .border(width: 2, edges: [.leading, .trailing], color: data.colorConfig.containerBorderColor)
@ -203,7 +326,7 @@ struct NotificationWidgetView: View {
// RoundedRectangle(cornerRadius: 20) // RoundedRectangle(cornerRadius: 20)
// .stroke(data.colorConfig.containerBorderColor, lineWidth: 20) // .stroke(data.colorConfig.containerBorderColor, lineWidth: 20)
// ) // )
} // }
} }
@ -212,35 +335,52 @@ struct live_notificationLiveActivity: Widget {
var body: some WidgetConfiguration { var body: some WidgetConfiguration {
ActivityConfiguration(for: LiveActivitiesAppAttributes.self) { context in ActivityConfiguration(for: LiveActivitiesAppAttributes.self) { context in
// Extract parameters from Flut
// Extract parameters from Flutter
// print("the queno is \(context.attributes.prefixedKey("title")) ===== \(sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) )") // print("the queno is \(context.attributes.prefixedKey("title")) ===== \(sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) )")
let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes" // let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes"
let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested" // let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested"
let currentTicket = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? "IMD A-89" // let currentTicket = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? "test1234"
let status = sharedDefault.string(forKey: context.attributes.prefixedKey("callType")) ?? "0" // let currentlyServingStatus = sharedDefault.string(forKey: context.attributes.prefixedKey("callType")) ?? "test3345"
let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? "IMD A-86" // let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? "tes"
let nextStep = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingStatus")) ?? // let nextStep = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingcurrentlyServingStatus")) ??
"Please wait! you will be called for vital signs" // "test111"
let nextStepBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType")) // let nextStepBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType"))
// let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes"
// let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested"
let currentTicket = getValueFromSharedDefaults("queueNo")
let currentlyServingStatus = getValueFromSharedDefaults("currentlyServingStatus") ?? "test3345"
let currentlyServing = getValueFromSharedDefaults("currentlyServingToken")
let currentlyServingHeader = getValueFromSharedDefaults("currentlyServingTitle")
let yourTicketHeader = getValueFromSharedDefaults("yourTicketHeader")
let nextStep = getValueFromSharedDefaults("nextTicketStatus")
let nextStepBackground = Int(sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingCallType")) ?? "0") ?? 0
let callType = sharedDefault.integer(forKey: context.attributes.prefixedKey("callType")) ?? 0
// Get color configuration based on nextStepBackground // Get color configuration based on nextStepBackground
let colorConfig = WidgetColorConfig.config(for: nextStepBackground) let colorConfig = WidgetColorConfig.config(for: callType)
// Create widget data // Create widget data
let widgetData = NotificationWidgetData( let widgetData = NotificationWidgetData(
currentTicket: currentTicket, currentTicket: currentTicket,
currentlyServingHeader: "Currently Serving:", currentlyServingHeader: currentlyServingHeader,
currentlyServing: currentlyServing, currentlyServing: currentlyServing,
status: status, currentlyServingStatus: currentlyServingStatus,
nextStep: nextStep, nextStep: nextStep,
imageName:"hmg", imageName:"hmg",
colorConfig: colorConfig colorConfig: colorConfig,
) progress: 33 * Double(callType),
yourTicketHeaderText : yourTicketHeader,
)
// //
// Lock screen/banner UI // Lock screen/banner UI
NotificationWidgetView(data: widgetData) NotificationWidgetView(data: widgetData)
.activityBackgroundTint(Color.clear)
.activitySystemActionForegroundColor(Color.black)
// Text(widgetData.currentTicket) // Text(widgetData.currentTicket)
// .font(.custom("Poppins-Medium", size: 28)) // .font(.custom("Poppins-Medium", size: 28))
@ -251,73 +391,85 @@ struct live_notificationLiveActivity: Widget {
} dynamicIsland: { context in } dynamicIsland: { context in
let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes" let currentTicket = getValueFromSharedDefaults("queueNo")
let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested" let currentlyServingStatus = getValueFromSharedDefaults("currentlyServingStatus") ?? "test3345"
let currentTicket = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? "test1234" let currentlyServing = getValueFromSharedDefaults("currentlyServingToken")
let status = sharedDefault.string(forKey: context.attributes.prefixedKey("callType")) ?? "test3345" let nextStep = getValueFromSharedDefaults("nextTicketStatus")
let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? "tes" let nextStepBackground = Int(sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingCallType")) ?? "0") ?? 0
let nextStep = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingStatus")) ?? let currentlyServingHeader = getValueFromSharedDefaults("currentlyServingTitle")
"test111" let yourTicketHeader = getValueFromSharedDefaults("yourTicketHeader")
let nextStepBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType")) let callType = sharedDefault.integer(forKey: context.attributes.prefixedKey("callType")) ?? 0
let colorConfig = WidgetColorConfig.config(for: nextStepBackground)
let colorConfig = WidgetColorConfig.config(for: callType)
let widgetData = NotificationWidgetData(
currentTicket: currentTicket,
currentlyServingHeader: currentlyServingHeader,
currentlyServing: currentlyServing,
currentlyServingStatus: currentlyServingStatus,
nextStep: nextStep,
imageName:"hmg",
colorConfig: colorConfig,
progress: 33 * Double(callType),
yourTicketHeaderText: yourTicketHeader
)
return DynamicIsland { return DynamicIsland {
// Expanded UI
DynamicIslandExpandedRegion(.leading) {
VStack(alignment: .leading) {
Text(currentTicket)
.font(.system(size: 24, weight: .bold))
.foregroundColor(.primary)
}
}
DynamicIslandExpandedRegion(.trailing) { //
Image("hmg") // Lock screen/banner UI
.resizable()
.scaledToFit()
.frame(width: 34, height: 34)
.foregroundColor(.gray)
}
// // Expanded UI
DynamicIslandExpandedRegion(.center) { DynamicIslandExpandedRegion(.center) {
VStack(spacing: 4) { NotificationWidgetView(data: widgetData, backgroundColor: .black.opacity(0.4)).padding(-24)
Text("Currently Servings:")
.font(.caption2)
.foregroundColor(.secondary)
Text(currentlyServing)
.font(.caption)
.fontWeight(.semibold)
}
} }
DynamicIslandExpandedRegion(.bottom) { // DynamicIslandExpandedRegion(.trailing) {
HStack { // Image("hmg")
Text(status) // .resizable()
.font(.caption2) // .scaledToFit()
.padding(.horizontal, 8) // .frame(width: 34, height: 34)
.padding(.vertical, 4) // .foregroundColor(.gray)
.background( // }
RoundedRectangle(cornerRadius: 6) //
.fill(colorConfig.nextStepBackground.opacity(0.2)) // DynamicIslandExpandedRegion(.center) {
) // VStack(spacing: 4) {
// Text("Currently Servings:")
Spacer() // .font(.caption2)
// .foregroundColor(.secondary)
Text(nextStep) //
.font(.caption2) // Text(currentlyServing)
.foregroundColor(colorConfig.nextStepTextColor) // .font(.caption)
.padding(.horizontal, 8) // .fontWeight(.semibold)
.padding(.vertical, 4) // }
.background( // }
RoundedRectangle(cornerRadius: 6) //
.fill(colorConfig.nextStepBackground) // DynamicIslandExpandedRegion(.bottom) {
) // HStack {
} // Text(currentlyServingStatus)
.padding(.horizontal) // .font(.caption2)
} // .padding(.horizontal, 8)
// .padding(.vertical, 4)
// .background(
// RoundedRectangle(cornerRadius: 6)
// .fill(colorConfig.nextStepBackground.opacity(0.2))
// )
//
// Spacer()
//
// Text(nextStep)
// .font(.caption2)
// .foregroundColor(colorConfig.nextStepTextColor)
// .padding(.horizontal, 8)
// .padding(.vertical, 4)
// .background(
// RoundedRectangle(cornerRadius: 6)
// .fill(colorConfig.nextStepBackground)
// )
// }
// .padding(.horizontal)
// }
} compactLeading: { } compactLeading: {
// Compact leading view // Compact leading view
@ -326,11 +478,11 @@ struct live_notificationLiveActivity: Widget {
.fontWeight(.bold) .fontWeight(.bold)
} compactTrailing: { } compactTrailing: {
// Compact trailing view // Compact trailing view
Image("hmg") Image("hmg")
.resizable() .resizable()
.scaledToFit() .scaledToFit()
.frame(width: 12, height: 12) .frame(width: 12, height: 12)
.foregroundColor(colorConfig.containerBorderColor).padding(4) .foregroundColor(colorConfig.containerBorderColor).padding(4)
} minimal: { } minimal: {
// Minimal view // Minimal view
HStack{ HStack{
@ -346,64 +498,86 @@ struct live_notificationLiveActivity: Widget {
}.padding(2) }.padding(2)
} }
.contentMargins(.all, 20,for: .expanded)
}
} }
} }
}
extension LiveActivitiesAppAttributes { extension LiveActivitiesAppAttributes {
func prefixedKey(_ key: String) -> String { func prefixedKey(_ key: String) -> String {
return "\(id)_\(key)" print("the id is \(id)")
} return "\(id)_\(key)"
}
} }
// MARK: - Preview for Testing
struct NotificationWidgetView_Previews: PreviewProvider { //struct NotificationWidgetView_Previews: PreviewProvider {
static var previews: some View { // static var previews: some View {
Group { // Group {
// Preview with nextStepBackground = 0 (Yellow border) // // Preview with nextStepBackground = 0 (Yellow border)
NotificationWidgetView( // NotificationWidgetView(
data: NotificationWidgetData( // data: NotificationWidgetData(
currentTicket: "42", // currentTicket: "42",
currentlyServingHeader: "Currently Serving3:", // currentlyServingHeader: "Currently Serving3:",
currentlyServing: "Customer #15", // currentlyServing: "Customer #15",
status: "Pending", // currentlyServingStatus: "Pending",
nextStep: "Next: Prepare Order", // nextStep: "Next: Prepare Order",
imageName: "bell.fill", // imageName: "bell.fill",
colorConfig: .config(for: 0) // colorConfig: .config(for: 0)
) // )
) // )
.previewDisplayName("Yellow Border (0)") // .previewDisplayName("Yellow Border (0)")
//
// Preview with nextStepBackground = 1 (Red border) // // Preview with nextStepBackground = 1 (Red border)
NotificationWidgetView( // NotificationWidgetView(
data: NotificationWidgetData( // data: NotificationWidgetData(
currentTicket: "89", // currentTicket: "89",
currentlyServingHeader: "Currently Serving2:", // currentlyServingHeader: "Currently Serving2:",
currentlyServing: "Customer #67", // currentlyServing: "Customer #67",
status: "Active", // currentlyServingStatus: "Active",
nextStep: "Next: Quality Check", // nextStep: "Next: Quality Check",
imageName: "bell.fill", // imageName: "bell.fill",
colorConfig: .config(for: 1) // colorConfig: .config(for: 1)
) // )
) // )
.previewDisplayName("Red Border (1)") // .previewDisplayName("Red Border (1)")
//
// Preview with nextStepBackground = 2 (Green border) // // Preview with nextStepBackground = 2 (Green border)
NotificationWidgetView( // NotificationWidgetView(
data: NotificationWidgetData( // data: NotificationWidgetData(
currentTicket: "125", // currentTicket: "125",
currentlyServingHeader: "Currently Serving1:", // currentlyServingHeader: "Currently Serving1:",
currentlyServing: "Customer #98", // currentlyServing: "Customer #98",
status: "Completed", // currentlyServingStatus: "Completed",
nextStep: "Next: Ready for Pickup", // nextStep: "Next: Ready for Pickup",
imageName: "bell.fill", // imageName: "bell.fill",
colorConfig: .config(for: 2) // colorConfig: .config(for: 2)
) // )
) // )
.previewDisplayName("Green Border (2)") // .previewDisplayName("Green Border (2)")
// }
// .padding()
// .previewLayout(.sizeThatFits)
// }
//}
func getValueFromSharedDefaults(_ containingString: String) -> String {
print("Function `getValueFromSharedDefaults` is being called")
let dictionary = sharedDefault.dictionaryRepresentation()
print("Contents of sharedDefault: \(dictionary)")
for (key, value) in dictionary {
print("Inspecting key: \(key), value: \(value)")
if key.contains(containingString) {
let components = key.split(separator: "_")
if let stringValue = value as? String {
return stringValue
} else {
return ""
}
} }
.padding()
.previewLayout(.sizeThatFits)
} }
return ""
} }

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.alhabib.patientApp</string>
</array>
</dict>
</plist>

@ -1,6 +1,6 @@
// //
// AppIntent.swift // AppIntent.swift
// live_notification // live_notifications
// //
// Created by Haroon Amjad on 20/07/2026. // Created by Haroon Amjad on 20/07/2026.
// //

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,84 @@
//
// live_notifications.swift
// live_notifications
//
// Created by Cloud Solutions on 21/07/2026.
//
import WidgetKit
import SwiftUI
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), emoji: "😀")
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
let entry = SimpleEntry(date: Date(), emoji: "😀")
completion(entry)
}
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
// Generate a timeline consisting of five entries an hour apart, starting from the current date.
let currentDate = Date()
for hourOffset in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
let entry = SimpleEntry(date: entryDate, emoji: "😀")
entries.append(entry)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
// func relevances() async -> WidgetRelevances<Void> {
// // Generate a list containing the contexts this widget is relevant in.
// }
}
struct SimpleEntry: TimelineEntry {
let date: Date
let emoji: String
}
struct live_notificationEntryView : View {
var entry: Provider.Entry
var body: some View {
VStack {
Text("Time:")
Text(entry.date, style: .time)
Text("Emoji:")
Text(entry.emoji)
}
}
}
struct live_notification: Widget {
let kind: String = "live_notifications"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
if #available(iOS 17.0, *) {
live_notificationEntryView(entry: entry)
.containerBackground(.fill.tertiary, for: .widget)
} else {
live_notificationEntryView(entry: entry)
.padding()
.background()
}
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}
#Preview(as: .systemSmall) {
live_notification()
} timeline: {
SimpleEntry(date: .now, emoji: "😀")
SimpleEntry(date: .now, emoji: "🤩")
}

@ -0,0 +1,16 @@
//
// live_notificationBundle.swift
// live_notifications
//
// Created by Haroon Amjad on 20/07/2026.
//
import WidgetKit
import SwiftUI
@main
struct live_notificationBundle: WidgetBundle {
var body: some Widget {
live_notificationLiveActivity()
}
}

@ -29,7 +29,7 @@ extension Color {
static let inactiveColor = Color(hex: "#ED1C2B") static let inactiveColor = Color(hex: "#ED1C2B")
static let textColor = Color(hex: "#A2A2A2") static let textColor = Color(hex: "#A2A2A2")
static let colorWhite = Color(hex: "#FFFFFF") static let colorWhite = Color(hex: "#FFFFFF")
// Helper initializer for hex colors // Helper initializer for hex colors
init(hex: String) { init(hex: String) {
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
@ -56,36 +56,36 @@ extension Color {
} }
} }
// MARK: - Widget Configuration based on nextStepBackground // MARK: - Widget Configuration based on currentServingStatusBackground
struct WidgetColorConfig { struct WidgetColorConfig {
let nextStepBackground: Color let currentServingStatusBackground: Color
let nextStepTextColor: Color let currentServingStatusTextColor: Color
let containerBorderColor: Color let containerBorderColor: Color
static func config(for value: Int) -> WidgetColorConfig { static func config(for value: Int) -> WidgetColorConfig {
switch value { switch value {
case 0: case 0:
return WidgetColorConfig( return WidgetColorConfig(
nextStepBackground: .inactiveColor, currentServingStatusBackground: .inactiveColor,
nextStepTextColor: .textColor, currentServingStatusTextColor: .textColor,
containerBorderColor: .yellowColor containerBorderColor: .yellowColor
) )
case 1: case 1:
return WidgetColorConfig( return WidgetColorConfig(
nextStepBackground: .redColorText, currentServingStatusBackground: .redColorText,
nextStepTextColor: .colorWhite, currentServingStatusTextColor: .colorWhite,
containerBorderColor: .redColorText containerBorderColor: .redColorText
) )
case 2: case 2:
return WidgetColorConfig( return WidgetColorConfig(
nextStepBackground: .successColor, currentServingStatusBackground: .successColor,
nextStepTextColor: .colorWhite, currentServingStatusTextColor: .colorWhite,
containerBorderColor: .successColor containerBorderColor: .successColor
) )
default: default:
return WidgetColorConfig( return WidgetColorConfig(
nextStepBackground: .inactiveColor, currentServingStatusBackground: .inactiveColor,
nextStepTextColor: .textColor, currentServingStatusTextColor: .textColor,
containerBorderColor: .yellowColor containerBorderColor: .yellowColor
) )
} }
@ -94,12 +94,13 @@ struct WidgetColorConfig {
// MARK: - Widget Data Model // MARK: - Widget Data Model
struct NotificationWidgetData { struct NotificationWidgetData {
let currentTicket: String let queueNo: String
let currentlyServingHeader: String let yourTicketHeader: String
let currentlyServing: String let currentlyServing: String
let status: String let status: Int
let nextStep: String let currentServingStatus: String
let imageName: String let imageName: String
let nextTicketStatus: String
let colorConfig: WidgetColorConfig let colorConfig: WidgetColorConfig
} }
struct NotificationWidgetView: View { struct NotificationWidgetView: View {
@ -110,136 +111,170 @@ struct NotificationWidgetView: View {
self.data = data self.data = data
} }
var body: some View {
ZStack {
data.colorConfig.containerBorderColor // Background color
.edgesIgnoringSafeArea(.all) // Ensure it covers the entire screen
VStack(alignment: .leading, spacing: 0) {
// Top section with current ticket and image
HStack(alignment: .top, spacing: 0) {
// Current ticket value
Text(data.currentTicket)
.font(.custom("Poppins-Medium", size: 28))
.fontWeight(.bold)
.foregroundColor(.black)
.padding(.trailing, 10)
.frame(maxWidth: .infinity, alignment: .leading)
Image(data.imageName) var body : some View{
.resizable() // ZStack(){
.scaledToFit() body2
.frame(width: 34, height: 34) // .frame(width: .infinity, height: 400 )
} // .padding(.top, 340)
.padding(.top, 16) // .cornerRadius(20)
.padding(.horizontal, 16) // }.background(data.colorConfig.containerBorderColor)
// .cornerRadius(20)
// Currently Serving Header }
Text(data.currentlyServingHeader) // var body2 : some View {
.font(.custom("Poppins-Medium", size: 14)) // Text(data.queueNo)
// .font(.custom("Poppins-Medium", size: 28))
// .fontWeight(.bold)
// .foregroundColor(.black)
// .padding(.trailing, 10)
// .frame(maxWidth: .infinity, alignment: .leading)
// }
//current one that todo will be handled
var body2: some View {
VStack(alignment: .leading, spacing: 0) {
// Top section with current ticket and image
HStack(alignment: .top, spacing: 0) {
// Current ticket value
Text(data.yourTicketHeader)
.font(.custom("Poppins-Medium", size: 28))
.fontWeight(.bold) .fontWeight(.bold)
.foregroundColor(.black) .foregroundColor(.black)
.padding(.trailing, 12) .padding(.trailing, 10)
.padding(.bottom, 10) .frame(maxWidth: .infinity, alignment: .leading)
.padding(.horizontal, 16)
Image(data.imageName)
// Currently Serving section with status .resizable()
HStack(alignment: .center, spacing: 0) { .scaledToFit()
// Currently serving text .frame(width: 34, height: 34)
Text(data.currentlyServing) }
.font(.custom("Poppins-Medium", size: 16)) .padding(.top, 16)
.fontWeight(.bold) .padding(.horizontal, 16)
.foregroundColor(.black)
.frame(maxWidth: .infinity, alignment: .leading) // Currently Serving Header
Text(data.queueNo)
// Status badge .font(.custom("Poppins-Medium", size: 14))
Text(data.status) .fontWeight(.bold)
.font(.custom("Poppins-Medium", size: 12)) .foregroundColor(.black)
.foregroundColor(data.colorConfig.nextStepTextColor) .padding(.trailing, 12)
.padding(.horizontal, 12) .padding(.bottom, 10)
.padding(.vertical, 8)
.background(
RoundedRectangle(cornerRadius: 8)
.fill(Color.inactiveColor.opacity(0.2))
)
}
.padding(.horizontal, 16) .padding(.horizontal, 16)
Spacer() // Currently Serving section with status
HStack(alignment: .center, spacing: 0) {
// Currently serving text
Text(data.currentlyServing)
.font(.custom("Poppins-Medium", size: 16))
.fontWeight(.bold)
.foregroundColor(.black)
.frame(maxWidth: .infinity, alignment: .leading)
// Next Step badge // Status badge
Text(data.nextStep) Text(data.currentServingStatus)
.font(.custom("Poppins-Medium", size: 12)) .font(.custom("Poppins-Medium", size: 12))
.foregroundColor(data.colorConfig.nextStepTextColor) .foregroundColor(data.colorConfig.currentServingStatusTextColor)
.padding(.horizontal, 12) .padding(.horizontal, 12)
.padding(.vertical, 8) .padding(.vertical, 8)
.background( .background(
RoundedRectangle(cornerRadius: 8) RoundedRectangle(cornerRadius: 8)
.fill(data.colorConfig.nextStepBackground) .fill(Color.inactiveColor.opacity(0.2))
) )
.padding(.horizontal, 16)
.padding(.bottom, 16)
} }
.background(Color.white) // Ensure content has a white background .padding(.horizontal, 16)
.cornerRadius(20) Spacer()
.padding() // Add padding to ensure it doesn't touch the edges // Next Step badge
Text(data.currentServingStatus)
.font(.custom("Poppins-Medium", size: 12))
.foregroundColor(data.colorConfig.currentServingStatusTextColor)
.padding(.horizontal, 12)
.padding(.vertical, 8)
.background(
RoundedRectangle(cornerRadius: 8)
.fill(data.colorConfig.currentServingStatusBackground)
)
.padding(.horizontal, 16)
.padding(.bottom, 16)
} }
.background(Color.black.opacity(0.01))
.cornerRadius(20)
// .border(width: 10, edges: [.top, .bottom], color: data.colorConfig.containerBorderColor)
// .border(width: 2, edges: [.leading, .trailing], color: data.colorConfig.containerBorderColor)
// .overlay(
// RoundedRectangle(cornerRadius: 20)
// .stroke(data.colorConfig.containerBorderColor, lineWidth: 20)
// )
} }
} }
// MARK: - Live Activity Widget // MARK: - Live Activity Widget
struct AppWidgetLiveActivity: Widget { struct live_notificationLiveActivity: Widget {
var body: some WidgetConfiguration { var body: some WidgetConfiguration {
ActivityConfiguration(for: LiveActivitiesAppAttributes.self) { context in ActivityConfiguration(for: LiveActivitiesAppAttributes.self) { context in
// Extract parameters from Flutter // Extract parameters from Flut
print("it is being loaded")
// print("the queno is \(context.attributes.prefixedKey("title")) ===== \(sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) )") // print("the queno is \(context.attributes.prefixedKey("title")) ===== \(sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) )")
let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes" let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? ""
let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested" let yourTicketHeader = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingHeader")) ?? ""
let currentTicket = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? "test1234" let nextTicketStatus = sharedDefault.string(forKey: context.attributes.prefixedKey("nextTicketStatus")) ?? ""
let status = sharedDefault.string(forKey: context.attributes.prefixedKey("callType")) ?? "test3345"
let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? "tes" let queueNo = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? ""
let nextStep = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingStatus")) ?? let currentlyServingToken = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingToken")) ?? ""
"test111" let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? ""
let nextStepBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType")) let currentServingStatus = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingStatus")) ??
""
// Get color configuration based on nextStepBackground let currentServingStatusBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType"))
let colorConfig = WidgetColorConfig.config(for: nextStepBackground)
let status = sharedDefault.integer(forKey: context.attributes.prefixedKey("callType")) ?? 0
// Get color configuration based on currentServingStatusBackground
let colorConfig = WidgetColorConfig.config(for: status)
// Create widget data // Create widget data
let widgetData = NotificationWidgetData( let widgetData = NotificationWidgetData(
currentTicket: currentTicket, queueNo: queueNo,
currentlyServingHeader: "Currently Servingsssssssss:", yourTicketHeader: yourTicketHeader,
currentlyServing: currentlyServing, currentlyServing: currentlyServing,
status: status, status: status,
nextStep: nextStep, currentServingStatus: currentServingStatus,
imageName:"hmg", imageName:"hmg",
nextTicketStatus:nextTicketStatus,
colorConfig: colorConfig colorConfig: colorConfig
) )
//
// Lock screen/banner UI
NotificationWidgetView(data: widgetData) NotificationWidgetView(data: widgetData)
.activityBackgroundTint(Color.clear) .activityBackgroundTint(Color.clear)
.activitySystemActionForegroundColor(Color.black) .activitySystemActionForegroundColor(Color.black)
// Text(widgetData.queueNo)
// .font(.custom("Poppins-Medium", size: 28))
// .fontWeight(.bold)
// .foregroundColor(.black)
// .padding(.trailing, 10)
// .frame(maxWidth: .infinity, alignment: .leading)
} dynamicIsland: { context in } dynamicIsland: { context in
let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes" let title = sharedDefault.string(forKey: context.attributes.prefixedKey("title")) ?? "testes"
let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested" let contentText = sharedDefault.string(forKey: context.attributes.prefixedKey("contentText")) ?? "tested"
let currentTicket = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? "test1234" let queueNo = sharedDefault.string(forKey: context.attributes.prefixedKey("queueNo")) ?? "test1234"
let status = sharedDefault.string(forKey: context.attributes.prefixedKey("callType")) ?? "test3345" let status = sharedDefault.string(forKey: context.attributes.prefixedKey("callType")) ?? "test3345"
let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? "tes" let currentlyServing = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingTitle")) ?? "tes"
let nextStep = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingStatus")) ?? let currentServingStatus = sharedDefault.string(forKey: context.attributes.prefixedKey("currentlyServingStatus")) ??
"test111" "test111"
let nextStepBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType")) let currentServingStatusBackground = sharedDefault.integer(forKey: context.attributes.prefixedKey("currentlyServingCallType"))
let colorConfig = WidgetColorConfig.config(for: nextStepBackground) let colorConfig = WidgetColorConfig.config(for: currentServingStatusBackground)
return DynamicIsland { return DynamicIsland {
// Expanded UI // Expanded UI
DynamicIslandExpandedRegion(.leading) { DynamicIslandExpandedRegion(.leading) {
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text(currentTicket) Text(queueNo)
.font(.system(size: 24, weight: .bold)) .font(.system(size: 24, weight: .bold))
.foregroundColor(.primary) .foregroundColor(.primary)
} }
@ -255,7 +290,7 @@ struct AppWidgetLiveActivity: Widget {
DynamicIslandExpandedRegion(.center) { DynamicIslandExpandedRegion(.center) {
VStack(spacing: 4) { VStack(spacing: 4) {
Text("Currently Serving:") Text("Currently Servings:")
.font(.caption2) .font(.caption2)
.foregroundColor(.secondary) .foregroundColor(.secondary)
@ -273,19 +308,19 @@ struct AppWidgetLiveActivity: Widget {
.padding(.vertical, 4) .padding(.vertical, 4)
.background( .background(
RoundedRectangle(cornerRadius: 6) RoundedRectangle(cornerRadius: 6)
.fill(colorConfig.nextStepBackground.opacity(0.2)) .fill(colorConfig.currentServingStatusBackground.opacity(0.2))
) )
Spacer() Spacer()
Text(nextStep) Text(currentServingStatus)
.font(.caption2) .font(.caption2)
.foregroundColor(colorConfig.nextStepTextColor) .foregroundColor(colorConfig.currentServingStatusTextColor)
.padding(.horizontal, 8) .padding(.horizontal, 8)
.padding(.vertical, 4) .padding(.vertical, 4)
.background( .background(
RoundedRectangle(cornerRadius: 6) RoundedRectangle(cornerRadius: 6)
.fill(colorConfig.nextStepBackground) .fill(colorConfig.currentServingStatusBackground)
) )
} }
.padding(.horizontal) .padding(.horizontal)
@ -293,7 +328,7 @@ struct AppWidgetLiveActivity: Widget {
} compactLeading: { } compactLeading: {
// Compact leading view // Compact leading view
Text(currentTicket) Text(queueNo)
.font(.caption2) .font(.caption2)
.fontWeight(.bold) .fontWeight(.bold)
} compactTrailing: { } compactTrailing: {
@ -306,7 +341,7 @@ struct AppWidgetLiveActivity: Widget {
} minimal: { } minimal: {
// Minimal view // Minimal view
HStack{ HStack{
Text(currentTicket) Text(queueNo)
.font(.caption2) .font(.caption2)
.fontWeight(.bold) .fontWeight(.bold)
Spacer() Spacer()
@ -326,6 +361,7 @@ struct AppWidgetLiveActivity: Widget {
extension LiveActivitiesAppAttributes { extension LiveActivitiesAppAttributes {
func prefixedKey(_ key: String) -> String { func prefixedKey(_ key: String) -> String {
print("the id to get the element is \(id)")
return "\(id)_\(key)" return "\(id)_\(key)"
} }
} }
@ -333,43 +369,46 @@ extension LiveActivitiesAppAttributes {
struct NotificationWidgetView_Previews: PreviewProvider { struct NotificationWidgetView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
Group { Group {
// Preview with nextStepBackground = 0 (Yellow border) // Preview with currentServingStatusBackground = 0 (Yellow border)
NotificationWidgetView( NotificationWidgetView(
data: NotificationWidgetData( data: NotificationWidgetData(
currentTicket: "42", queueNo: "42",
currentlyServingHeader: "Currently Serving3:", yourTicketHeader: "Currently Serving3:",
currentlyServing: "Customer #15", currentlyServing: "Customer #15",
status: "Pending", status: 0,
nextStep: "Next: Prepare Order", currentServingStatus: "Next: Prepare Order",
imageName: "bell.fill", imageName: "bell.fill",
nextTicketStatus: "bell.fill",
colorConfig: .config(for: 0) colorConfig: .config(for: 0)
) )
) )
.previewDisplayName("Yellow Border (0)") .previewDisplayName("Yellow Border (0)")
// Preview with nextStepBackground = 1 (Red border) // Preview with currentServingStatusBackground = 1 (Red border)
NotificationWidgetView( NotificationWidgetView(
data: NotificationWidgetData( data: NotificationWidgetData(
currentTicket: "89", queueNo: "89",
currentlyServingHeader: "Currently Serving2:", yourTicketHeader: "Currently Serving2:",
currentlyServing: "Customer #67", currentlyServing: "Customer #67",
status: "Active", status: 1,
nextStep: "Next: Quality Check", currentServingStatus: "Next: Quality Check",
imageName: "bell.fill", imageName: "bell.fill",
nextTicketStatus: "bell.fill",
colorConfig: .config(for: 1) colorConfig: .config(for: 1)
) )
) )
.previewDisplayName("Red Border (1)") .previewDisplayName("Red Border (1)")
// Preview with nextStepBackground = 2 (Green border) // Preview with currentServingStatusBackground = 2 (Green border)
NotificationWidgetView( NotificationWidgetView(
data: NotificationWidgetData( data: NotificationWidgetData(
currentTicket: "125", queueNo: "125",
currentlyServingHeader: "Currently Serving1:", yourTicketHeader: "Currently Serving1:",
currentlyServing: "Customer #98", currentlyServing: "Customer #98",
status: "Completed", status: 1,
nextStep: "Next: Ready for Pickup", currentServingStatus: "Next: Ready for Pickup",
imageName: "bell.fill", imageName: "bell.fill",
nextTicketStatus: "bell.fill",
colorConfig: .config(for: 2) colorConfig: .config(for: 2)
) )
) )
@ -379,4 +418,3 @@ struct NotificationWidgetView_Previews: PreviewProvider {
.previewLayout(.sizeThatFits) .previewLayout(.sizeThatFits)
} }
} }

@ -120,9 +120,9 @@ addLiveNotification(dynamic data, {bool isBackgroundMessage = false}) async{
var liveActivity = LiveActivities(); var liveActivity = LiveActivities();
liveActivity.init(appGroupId: "group.alhabib.patientApp"); liveActivity.init(appGroupId: "group.alhabib.patientApp");
if(Platform.isIOS){ // if(Platform.isIOS){
LiveActivityHelperChannel.removeData(); // LiveActivityHelperChannel.removeData();
} // }
var queueNoForWhichActivityIdCreated = await Utils.getStringFromPrefs( CacheConst.patientQueueNoForLiveActivity); var queueNoForWhichActivityIdCreated = await Utils.getStringFromPrefs( CacheConst.patientQueueNoForLiveActivity);
var activityId = await Utils.getStringFromPrefs( data.data['queueNo'] ??""); var activityId = await Utils.getStringFromPrefs( data.data['queueNo'] ??"");

@ -1194,11 +1194,11 @@ class Utils {
currentlyServingToken: data.data['servingQueueNo'] ?? "IME-3", currentlyServingToken: data.data['servingQueueNo'] ?? "IME-3",
nextTicketStatus: buttonText, nextTicketStatus: buttonText,
callType: int.parse(data.data['callType'] ?? "1"), callType: int.parse(data.data['callType'] ?? "1"),
currentlyServingCallType: int.parse(data.data['servingCallType'] ?? "1"), currentlyServingCallType: data.data['servingCallType'].isEmpty?0:int.parse(data.data['servingCallType'] ?? "1"),
yourTicketHeader: LocaleKeys.yourQueueNumber.tr(), yourTicketHeader: LocaleKeys.yourQueueNumber.tr(),
currentlyServingTitle: LocaleKeys.currentServing.tr()); currentlyServingTitle: LocaleKeys.currentServing.tr());
if ((queueNoForWhichActivityIdCreated ?? "") != (_patientQueue.queueNo ?? "")) { if ((queueNoForWhichActivityIdCreated ?? "") != (_patientQueue.queueNo ?? "")) {
liveActivity.endActivity(activityId); liveActivity.endAllActivities();
activityId = ""; activityId = "";
} }
@ -1211,16 +1211,23 @@ class Utils {
await Utils.saveStringFromPrefs(CacheConst.patientQueueNoForLiveActivity ?? "", _patientQueue.queueNo ?? ""); await Utils.saveStringFromPrefs(CacheConst.patientQueueNoForLiveActivity ?? "", _patientQueue.queueNo ?? "");
return; return;
} }
if (Platform.isIOS) { // if (Platform.isIOS) {
await liveActivity.createOrUpdateActivity( // await liveActivity.createOrUpdateActivity(
activityId, // activityId,
_patientQueue.toMap(), // _patientQueue.toMap(),
); // );
} else { // } else {
try{
await liveActivity.updateActivity( await liveActivity.updateActivity(
activityId, activityId,
_patientQueue.toMap(), _patientQueue.toMap(),
); );}
catch(e){
await liveActivity.createOrUpdateActivity(
activityId,
_patientQueue.toMap(),
);
} }
// }
} }
} }

@ -27,6 +27,7 @@ import 'package:hmg_patient_app_new/features/hospital/hospital_selection_view_mo
import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart'; import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart'; import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/appointment_rating_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/appointment_rating_view_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/patient_queue_live_notification_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_queue_details_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_queue_details_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
@ -316,6 +317,28 @@ class _LandingPageState extends State<LandingPage> {
padding: EdgeInsets.fromLTRB(12.h, 0, 12.h, 0), padding: EdgeInsets.fromLTRB(12.h, 0, 12.h, 0),
height: 40.h, height: 40.h,
), ),
ElevatedButton(onPressed: (){
QueueLiveNotificationModel queueLiveNotificationModel = QueueLiveNotificationModel();
queueLiveNotificationModel.data = {
"msgID": "123",
"notfID": "123",
"isLiveActivity":"true",
"notification_foreground": "true",
"patientID": "12345",
"patientName": "John Doe",
"queueNo": "A-104",
"callType": "1",
"servingQueueNo": "",
"servingCallType": "",
"roomNo": "204",
"calledOn": "2024-05-21T14:30:00Z",
"servingNow": "true"
};
Utils.addLiveNotification(queueLiveNotificationModel, isBackgroundMessage: false);
}, child: Text("press")).paddingOnly(top: 56.h),
Consumer<TodoSectionViewModel>(builder: (context, todoSectionVM, child) { Consumer<TodoSectionViewModel>(builder: (context, todoSectionVM, child) {
return Row( return Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

@ -7,6 +7,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/patient_queue_live_notification_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
@ -64,6 +65,28 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
child: Column( child: Column(
spacing: 24.h, spacing: 24.h,
children: [ children: [
ElevatedButton(onPressed: (){
QueueLiveNotificationModel queueLiveNotificationModel = QueueLiveNotificationModel();
queueLiveNotificationModel.data = {
"msgID": "123",
"notfID": "123",
"isLiveActivity":"true",
"notification_foreground": "true",
"patientID": "12345",
"patientName": "John Doe",
"queueNo": "A-109",
"callType": "0",
"servingQueueNo": "",
"servingCallType": "",
"roomNo": "204",
"calledOn": "2024-05-21T14:30:00Z",
"servingNow": "true"
};
Utils.addLiveNotification(queueLiveNotificationModel, isBackgroundMessage: false);
}, child: Text("press")).paddingOnly(top: 56.h),
PageView( PageView(
controller: pageController, controller: pageController,
children: [ children: [

@ -16,6 +16,7 @@ import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/patient_queue_live_notification_model.dart';
import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/presentation/onboarding/onboarding_screen.dart'; import 'package:hmg_patient_app_new/presentation/onboarding/onboarding_screen.dart';
import 'package:hmg_patient_app_new/presentation/onboarding/splash_animation_screen.dart'; import 'package:hmg_patient_app_new/presentation/onboarding/splash_animation_screen.dart';

@ -117,10 +117,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.1"
chewie: chewie:
dependency: transitive dependency: transitive
description: description:
@ -145,6 +145,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
cloudflare_turnstile:
dependency: "direct main"
description:
name: cloudflare_turnstile
sha256: f04191fd1f9c658e98c11175356f34aaeca42b4ed91ee66d42fb250b3346160d
url: "https://pub.dev"
source: hosted
version: "3.8.0"
collection: collection:
dependency: transitive dependency: transitive
description: description:
@ -499,6 +507,22 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_amazonpaymentservices:
dependency: "direct main"
description:
name: flutter_amazonpaymentservices
sha256: "23f45fd3b1e12a0933da3704d66cebd19c4c41e28a50d4fd458d3e3e6311f332"
url: "https://pub.dev"
source: hosted
version: "0.0.13"
flutter_app_group_directory:
dependency: transitive
description:
name: flutter_app_group_directory
sha256: "680ef9b2dee84c237cd7bb7fc78bc45867b32556a8a5f0de61278078b9fefd05"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
flutter_cache_manager: flutter_cache_manager:
dependency: transitive dependency: transitive
description: description:
@ -720,6 +744,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.1" version: "4.0.1"
flutter_screenshot_blocker:
dependency: "direct main"
description:
name: flutter_screenshot_blocker
sha256: "20e36b4aaca20259008dbb1403b77af6207d48cd8382a772b9c27619bc116849"
url: "https://pub.dev"
source: hosted
version: "1.0.4"
flutter_staggered_animations: flutter_staggered_animations:
dependency: "direct main" dependency: "direct main"
description: description:
@ -773,10 +805,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_zoom_videosdk name: flutter_zoom_videosdk
sha256: "46a4dea664b1c969099328a499c198a1755adf9ac333dea28bea5187910b3bf9" sha256: "8f6dba6b5c910097aca7f3c582a11b10a6fb5def49fead745d837283b5f5ef52"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.10" version: "2.4.0"
fluttertoast: fluttertoast:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1233,6 +1265,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.1.1" version: "5.1.1"
live_activities:
dependency: "direct main"
description:
name: live_activities
sha256: "060f4d8f57b399e5c8beb255fa8426b9b4789320414ae68c8510aec113269dbd"
url: "https://pub.dev"
source: hosted
version: "2.4.9"
local_auth: local_auth:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1341,18 +1381,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.17" version: "0.12.19"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.1" version: "0.13.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
@ -1641,6 +1681,54 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
screen_brightness:
dependency: "direct main"
description:
name: screen_brightness
sha256: "7d4ac84ae26b37c01d6f5db7123a72db7933e1f2a2a8c369a51e08f81b3178d8"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_android:
dependency: transitive
description:
name: screen_brightness_android
sha256: "8c69d3ac475e4d625e7fa682a3a51a69ff59abe5b4a9e57f6ec7d830a6c69bd6"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_ios:
dependency: transitive
description:
name: screen_brightness_ios
sha256: f08f70ca1ac3e30719764b5cfb8b3fe1e28163065018a41b3e6f243ab146c2f1
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_macos:
dependency: transitive
description:
name: screen_brightness_macos
sha256: "70c2efa4534e22b927e82693488f127dd4a0f008469fccf4f0eefe9061bbdd6a"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_platform_interface:
dependency: transitive
description:
name: screen_brightness_platform_interface
sha256: "9f3ebf7f22d5487e7676fe9ddaf3fc55b6ff8057707cf6dc0121c7dfda346a16"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
screen_brightness_windows:
dependency: transitive
description:
name: screen_brightness_windows
sha256: c8e12a91cf6dd912a48bd41fcf749282a51afa17f536c3460d8d05702fb89ffa
url: "https://pub.dev"
source: hosted
version: "1.0.1"
scrollable_positioned_list: scrollable_positioned_list:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1890,10 +1978,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.7" version: "0.7.10"
time: time:
dependency: transitive dependency: transitive
description: description:
@ -2175,5 +2263,5 @@ packages:
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
sdks: sdks:
dart: ">=3.9.0 <4.0.0" dart: ">=3.11.0 <4.0.0"
flutter: ">=3.35.0" flutter: ">=3.41.0"

Loading…
Cancel
Save