ui changes

main_production_RSG
Sikander Saleem 2 months ago
parent 3429dcff60
commit 8e53a271c8

@ -34,7 +34,12 @@
<data android:mimeType="vnd.android.cursor.item/event" /> <data android:mimeType="vnd.android.cursor.item/event" />
</intent> </intent>
</queries> </queries>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
</queries>
<application <application
android:name="${applicationName}" android:name="${applicationName}"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"

@ -42,6 +42,10 @@
<string>UIInterfaceOrientationPortraitUpsideDown</string> <string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string> <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>tel</string>
</array> </array>
<key>UIViewControllerBasedStatusBarAppearance</key> <key>UIViewControllerBasedStatusBarAppearance</key>
<false/> <false/>

@ -4,7 +4,7 @@ class URLs {
static const String appReleaseBuildNumber = "40"; static const String appReleaseBuildNumber = "40";
// static const host1 = "https://atomsm.hmg.com"; // production url // static const host1 = "https://atomsm.hmg.com"; // production url
static const host1 = "https://atomsmdev.hmg.com"; // local DEV url static const host1 = "https://atomsmdev.hmg.com"; // local DEV urld
// static const host1 = "https://atomsmuat.hmg.com"; // local UAT url // static const host1 = "https://atomsmuat.hmg.com"; // local UAT url
static final String _baseUrl = "$_host/mobile"; // host local UAT static final String _baseUrl = "$_host/mobile"; // host local UAT

@ -285,16 +285,8 @@ class ProgressFragment extends StatelessWidget {
children: [ children: [
Text(chartData[i].x, style: AppTextStyles.textStyle9.copyWith(color: AppColor.text9Color(context))) Text(chartData[i].x, style: AppTextStyles.textStyle9.copyWith(color: AppColor.text9Color(context)))
.toShimmer(isShow: snapshot.isAllCountLoading, context: context), .toShimmer(isShow: snapshot.isAllCountLoading, context: context),
RichText( Text("${chartData[i].y.toInt()}", style: AppTextStyles.bodyText.copyWith(color: AppColor.headingTextColor(context)))
text: TextSpan( .toShimmer(isShow: snapshot.isAllCountLoading, context: context),
text: "${chartData[i].y.toInt()}",
style: AppTextStyles.bodyText.copyWith(color: AppColor.headingTextColor(context)),
children: [
// TextSpan(text: " | ", style: AppTextStyles.bodyText.copyWith(color: AppColor.headingTextColor(context))),
// TextSpan(text: "${chartData[i].y}", style: AppTextStyles.bodyText.copyWith(color: AppColor.headingTextColor(context))),
],
),
),
], ],
) )
], ],

@ -51,7 +51,7 @@ class RequestsFragment extends StatelessWidget {
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16), padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4, childAspectRatio: 85 / 85, crossAxisSpacing: 8, mainAxisSpacing: 8), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: context.isTablet() ? 5 : 4, childAspectRatio: 85 / 85, crossAxisSpacing: 8, mainAxisSpacing: 8),
children: [ children: [
listItem( listItem(
data.dashboardCount?.data?.countHighPriority ?? 0, data.dashboardCount?.data?.countHighPriority ?? 0,
@ -79,16 +79,16 @@ class RequestsFragment extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
spacing: 16, spacing: 0,
children: [ children: [
(icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading, context: context), (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: isLoading, context: context).center.expanded,
Text( Text(
title, title,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: AppTextStyles.tinyFont2.copyWith(color: AppColor.headingTextColor(context)), style: AppTextStyles.textStyle9.copyWith(color: AppColor.headingTextColor(context)),
).toShimmer(isShow: isLoading, context: context), ).toShimmer(isShow: isLoading, context: context),
], ],
).toShadowContainer(context, borderRadius: 16, paddingObject: const EdgeInsets.symmetric(horizontal: 12, vertical: 16)), ).toShadowContainer(context, borderRadius: 16, paddingObject: const EdgeInsets.symmetric(horizontal: 12, vertical: 12)),
) )
.onPress(isLoading .onPress(isLoading
? null ? null

@ -142,14 +142,14 @@ class _CMDetailPageState extends State<CMDetailPage> {
return Container( return Container(
padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 6), padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 6),
margin: const EdgeInsets.only(left: 2), margin: const EdgeInsets.only(left: 2),
decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, borderRadius: BorderRadius.circular(16)), decoration: BoxDecoration(color: AppColor.background(context) ,border: Border.all(color: AppColor.border2Color(context)), borderRadius: BorderRadius.circular(16)),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
const Icon(Icons.add, size: 20, color: AppColor.black1E), Icon(Icons.add, size: 20, color:AppColor.textStyleColor(context)),
Text( Text(
"Loan", "Loan",
style: AppTextStyles.bodyText2.copyWith(color: AppColor.black1E), style: AppTextStyles.bodyText2.copyWith(color: AppColor.textStyleColor(context)),
), ),
4.width, 4.width,
], ],

@ -117,7 +117,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
...incidentInfoSection(), ...incidentInfoSection(),
if (incidentType?.value == 1) ...[ if (incidentType?.value == 1) ...[
16.height, 16.height,
"Asset Details".bodyText(context).custom(color: AppColor.black10), "Asset Details".bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
AssetPicker( AssetPicker(
device: device, device: device,
@ -147,7 +147,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
16.height, 16.height,
...optionQuestions(), ...optionQuestions(),
16.height, 16.height,
"Attachments".bodyText(context).custom(color: AppColor.black10), "Attachments".bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
AttachmentPicker( AttachmentPicker(
label: context.translation.attachments, label: context.translation.attachments,
@ -181,7 +181,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
List<Widget> optionQuestions() { List<Widget> optionQuestions() {
return [ return [
'Additional Information & Comments'.addTranslation.bodyText(context).custom(color: AppColor.black10), 'Additional Information & Comments'.addTranslation.bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
AppTextFormField( AppTextFormField(
initialValue: "", initialValue: "",
@ -202,7 +202,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
List<Widget> siteSection() { List<Widget> siteSection() {
return [ return [
'Site Details'.addTranslation.bodyText(context).custom(color: AppColor.black10), 'Site Details'.addTranslation.bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
SingleItemDropDownMenu<Site, SiteProvider>( SingleItemDropDownMenu<Site, SiteProvider>(
context: context, context: context,
@ -330,7 +330,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
List<Widget> incidentInfoSection() { List<Widget> incidentInfoSection() {
return [ return [
"Incident Details".bodyText(context).custom(color: AppColor.black10), "Incident Details".bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
SingleItemDropDownMenu<Lookup, IncidentTypeLookupProvider>( SingleItemDropDownMenu<Lookup, IncidentTypeLookupProvider>(
context: context, context: context,
@ -452,7 +452,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
if ((value ?? "").isEmpty) return "Mandatory"; if ((value ?? "").isEmpty) return "Mandatory";
return null; return null;
}, },
suffixIcon: const Icon(Icons.info_outline_rounded, color: AppColor.neutral120).paddingOnly(end: 8).onPress(() { suffixIcon: Icon(Icons.info_outline_rounded, color: AppColor.icon2Color(context)).paddingOnly(end: 8).onPress(() {
context.showInfoDialog("Brief explanation of the incident, e.g., “Damaged patient monitor screen“"); context.showInfoDialog("Brief explanation of the incident, e.g., “Damaged patient monitor screen“");
}), }),
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,
@ -473,7 +473,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
if ((value ?? "").isEmpty) return "Mandatory"; if ((value ?? "").isEmpty) return "Mandatory";
return null; return null;
}, },
suffixIcon: const Icon(Icons.info_outline_rounded, color: AppColor.neutral120).paddingOnly(end: 8).onPress(() { suffixIcon: Icon(Icons.info_outline_rounded, color: AppColor.icon2Color(context)).paddingOnly(end: 8).onPress(() {
context.showInfoDialog( context.showInfoDialog(
"Provide a clear and factual description of the incident, including how the issue was identified. Ex. “The ECG cable connector was damaged due to continuos forcfull disconnetionnby end-users. Multiple bent pins were noted during inspection after repeated complains of poor signal quality“"); "Provide a clear and factual description of the incident, including how the issue was identified. Ex. “The ECG cable connector was damaged due to continuos forcfull disconnetionnby end-users. Multiple bent pins were noted during inspection after repeated complains of poor signal quality“");
}), }),
@ -492,7 +492,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
List<Widget> detailsSection() { List<Widget> detailsSection() {
return [ return [
'Details'.addTranslation.bodyText(context).custom(color: AppColor.black10), 'Details'.addTranslation.bodyText(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
SingleItemDropDownMenu<Lookup, IncidentRootCauseLookupProvider>( SingleItemDropDownMenu<Lookup, IncidentRootCauseLookupProvider>(
context: context, context: context,
@ -535,7 +535,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
return null; return null;
}, },
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,
backgroundColor: AppColor.fieldBgColor(context), // backgroundColor: AppColor.fieldBgColor(context),
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
showShadow: false, showShadow: false,
textInputType: TextInputType.name, textInputType: TextInputType.name,
@ -559,7 +559,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
infoCallback: () { infoCallback: () {
context.showInfoDialog("Ensure to provide information of person in Charge (e.g., Charge Nurse, Unit Team Leader), not a general staff member.", content: []); context.showInfoDialog("Ensure to provide information of person in Charge (e.g., Charge Nurse, Unit Team Leader), not a general staff member.", content: []);
}, },
backgroundColor: AppColor.fieldBgColor(context), // backgroundColor: AppColor.fieldBgColor(context),
showAsBottomSheet: true, showAsBottomSheet: true,
onSelect: (value) { onSelect: (value) {
involvedPerson = value; involvedPerson = value;
@ -592,7 +592,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
if (involvedPerson?.value == 3 && (value ?? "").isEmpty) return "Mandatory"; if (involvedPerson?.value == 3 && (value ?? "").isEmpty) return "Mandatory";
return null; return null;
}, },
suffixIcon: const Icon(Icons.info_outline_rounded, color: AppColor.neutral120).paddingOnly(end: 8).onPress(() { suffixIcon: Icon(Icons.info_outline_rounded, color: AppColor.icon2Color(context)).paddingOnly(end: 8).onPress(() {
context.showInfoDialog( context.showInfoDialog(
"Required if the person is an Employee. Ensure the correct Employee ID of the Person in Charge (e.g., Charge Nurse, Unit Team Leader) is provided, not a general staff member. (Ex. 34567)"); "Required if the person is an Employee. Ensure the correct Employee ID of the Person in Charge (e.g., Charge Nurse, Unit Team Leader) is provided, not a general staff member. (Ex. 34567)");
}), }),
@ -614,7 +614,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
if (involvedPerson?.value == 3 && (value ?? "").isEmpty) return "Mandatory"; if (involvedPerson?.value == 3 && (value ?? "").isEmpty) return "Mandatory";
return null; return null;
}, },
suffixIcon: const Icon(Icons.info_outline_rounded, color: AppColor.neutral120).paddingOnly(end: 8).onPress(() { suffixIcon: Icon(Icons.info_outline_rounded, color: AppColor.icon2Color(context)).paddingOnly(end: 8).onPress(() {
context.showInfoDialog("State the end-user Employee/Patient Full name. Required if the person is an Employee. (Ex. Mary-Anne Joseph)"); context.showInfoDialog("State the end-user Employee/Patient Full name. Required if the person is an Employee. (Ex. Mary-Anne Joseph)");
}), }),
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,

@ -35,6 +35,7 @@ class AppColor {
static const Color neutral150 = Color(0xffA1A1A1); static const Color neutral150 = Color(0xffA1A1A1);
static const Color neutral160 = Color(0xffE5E5E5); static const Color neutral160 = Color(0xffE5E5E5);
static const Color neutral170 = Color(0xff6E6E6E); static const Color neutral170 = Color(0xff6E6E6E);
static const Color disableDark = Color(0xff444756);
//background //background
static const Color backgroundLight = Color(0xfff5f6fc); static const Color backgroundLight = Color(0xfff5f6fc);
@ -43,6 +44,7 @@ class AppColor {
static const Color containerDark = Color(0xff161A2D); static const Color containerDark = Color(0xff161A2D);
static const Color containerBorderDark = Color(0xff3B3F56); static const Color containerBorderDark = Color(0xff3B3F56);
static const Color containerBorderLight = Color(0xffEFEFEF); static const Color containerBorderLight = Color(0xffEFEFEF);
static const Color dropDownDark = Color(0xff1F2134);
//white //white
static const Color white10 = Color(0xffFFFFFF); static const Color white10 = Color(0xffFFFFFF);
@ -112,6 +114,10 @@ class AppColor {
static Color scaffoldBackground(BuildContext context) => context.isDark ? backgroundDark : backgroundLight; static Color scaffoldBackground(BuildContext context) => context.isDark ? backgroundDark : backgroundLight;
static Color dropDownBackground(BuildContext context) => context.isDark ? dropDownDark : backgroundLight;
static Color scaffold2Background(BuildContext context) => context.isDark ? backgroundDark : white20;
static Color assetGroupBackground(BuildContext context) => context.isDark ? containerDark : Colors.white30; static Color assetGroupBackground(BuildContext context) => context.isDark ? containerDark : Colors.white30;
static Color backgroundTabBarColor(BuildContext context) => context.isDark ? backgroundTabBarDark : Colors.white; static Color backgroundTabBarColor(BuildContext context) => context.isDark ? backgroundTabBarDark : Colors.white;
@ -122,6 +128,8 @@ class AppColor {
static Color borderColor(BuildContext context) => context.isDark ? containerBorderDark : containerBorderLight; static Color borderColor(BuildContext context) => context.isDark ? containerBorderDark : containerBorderLight;
static Color border2Color(BuildContext context) => context.isDark ? containerBorderDark : neutral30;
static Color textColor(BuildContext context) => context.isDark ? neutral30 : neutral50; static Color textColor(BuildContext context) => context.isDark ? neutral30 : neutral50;
static Color headingTextColor(BuildContext context) => context.isDark ? white10 : white936; static Color headingTextColor(BuildContext context) => context.isDark ? white10 : white936;
@ -134,6 +142,12 @@ class AppColor {
static Color icon2Color(BuildContext context) => context.isDark ? white10 : neutral50; static Color icon2Color(BuildContext context) => context.isDark ? white10 : neutral50;
static Color textStyleColor(BuildContext context) => context.isDark ? white10 : neutral50;
static Color labelTextStyleColor(BuildContext context) => context.isDark ? white10 : neutral50;
static Color floatingTextStyleColor(BuildContext context) => context.isDark ? white10 : neutral120;
static Color fieldBgColor(BuildContext context) => context.isDark ? neutral20 : neutral100; static Color fieldBgColor(BuildContext context) => context.isDark ? neutral20 : neutral100;
static Color selectedButtonColor(BuildContext context) => context.isDark ? neutral60 : neutral30; static Color selectedButtonColor(BuildContext context) => context.isDark ? neutral60 : neutral30;

@ -191,10 +191,12 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
? 4 ? 4
: 1, : 1,
obscuringCharacter: "*", obscuringCharacter: "*",
controller: widget.controller, controller: widget.controller,cursorColor: AppColor.loadingColor(context),
textInputAction: widget.textInputType == TextInputType.multiline ? null : widget.textInputAction ?? TextInputAction.next, textInputAction: widget.textInputType == TextInputType.multiline ? null : widget.textInputAction ?? TextInputAction.next,
onEditingComplete: widget.onAction ?? () => FocusScope.of(context).nextFocus(), onEditingComplete: widget.onAction ?? () => FocusScope.of(context).nextFocus(),
style: widget.style ?? AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.white10 : AppColor.black10), style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 14, color: AppColor.textStyleColor(context)),
// style: widget.style ?? AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.white10 : AppColor.black10),
onTap: widget.onTap, onTap: widget.onTap,
decoration: InputDecoration( decoration: InputDecoration(
alignLabelWithHint: widget.alignLabelWithHint, alignLabelWithHint: widget.alignLabelWithHint,
@ -207,20 +209,24 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
constraints: const BoxConstraints(), constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(minWidth: 0), suffixIconConstraints: const BoxConstraints(minWidth: 0),
filled: true, filled: true,
fillColor: widget.backgroundColor ?? fillColor:
(context.isDark && !widget.enable (context.isDark && !widget.enable
? AppColor.neutral50 ? AppColor.neutral50
: !widget.enable : !widget.enable
? (widget.enableColor ?? AppColor.neutral40) ? (widget.enableColor ?? AppColor.disableDark)
: AppColor.scaffoldBackground(context)), : AppColor.dropDownBackground(context)),
errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red30), errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red30),
floatingLabelStyle: widget.floatingLabelStyle ?? AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.white10 : AppColor.neutral20),
// floatingLabelStyle: widget.floatingLabelStyle ?? AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.white10 : AppColor.neutral20),
floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.floatingTextStyleColor(context)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.labelTextStyleColor(context)),
hintText: widget.hintText ?? "", hintText: widget.hintText ?? "",
// labelText: (widget.showSpeechToText && _speechToText.isListening) ? "Listening..." : widget.labelText ?? "", // labelText: (widget.showSpeechToText && _speechToText.isListening) ? "Listening..." : widget.labelText ?? "",
label: Text( label: Text(
(widget.showSpeechToText && _speechToText.isListening) ? "Listening..." : widget.labelText ?? "", (widget.showSpeechToText && _speechToText.isListening) ? "Listening..." : widget.labelText ?? "",
), ),
labelStyle: widget.labelStyle, // labelStyle: widget.labelStyle,
hintStyle: widget.labelStyle, hintStyle: widget.labelStyle,
prefixIcon: widget.prefixIcon ?? prefixIcon: widget.prefixIcon ??
(widget.prefixIconData == null (widget.prefixIconData == null
@ -253,7 +259,7 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
border: widget.showBorder ? Border.all(color: AppColor.borderColor(context), width: 1) : null, border: widget.showBorder ? Border.all(color: AppColor.border2Color(context), width: 1) : null,
boxShadow: widget.showShadow ? [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)] : null, boxShadow: widget.showShadow ? [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)] : null,
), ),
child: textField); child: textField);

@ -229,14 +229,12 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
padding: EdgeInsets.only(left: 16.toScreenWidth, right: 8.toScreenWidth), padding: EdgeInsets.only(left: 16.toScreenWidth, right: 8.toScreenWidth),
decoration: BoxDecoration( decoration: BoxDecoration(
color: context.isDark && (widget.enabled == false || isEmpty) color: context.isDark && (widget.enabled == false || isEmpty)
? AppColor.neutral20 ? AppColor.disableDark
: (widget.enabled == false || isEmpty) : (widget.enabled == false || isEmpty)
? AppColor.neutral40 ? AppColor.neutral40
: AppColor.scaffoldBackground(context), : AppColor.dropDownBackground(context),
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
border: Border.all( border: Border.all(color: AppColor.border2Color(context), width: 1),
color: AppColor.borderColor(context), width: 1
),
// side: RoundedRectangleBorder(borderRadius: BorderRadius.circular(borderRadius), side: BorderSide(color: AppColor.borderColor(context))), // side: RoundedRectangleBorder(borderRadius: BorderRadius.circular(borderRadius), side: BorderSide(color: AppColor.borderColor(context))),
// border: BorderSi//de(color: AppColor.borderColor(context)), // border: BorderSi//de(color: AppColor.borderColor(context)),
boxShadow: widget.showShadow ? [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)] : null, boxShadow: widget.showShadow ? [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)] : null,
@ -252,9 +250,8 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Flexible( Flexible(
child: Text( child: Text(widget.title, style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.floatingTextStyleColor(context))
widget.title, // Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : widget.titleTextColor ?? AppColor.neutral20, fontWeight: FontWeight.w500),
style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : widget.titleTextColor ?? AppColor.neutral20, fontWeight: FontWeight.w500),
), ),
), ),
DropdownButton<T>( DropdownButton<T>(
@ -340,7 +337,7 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
: null), : null),
], ],
).expanded, ).expanded,
if (widget.infoCallback != null) const Icon(Icons.info_outline_rounded, color: AppColor.neutral120).onPress(widget.infoCallback), if (widget.infoCallback != null) Icon(Icons.info_outline_rounded, color: AppColor.icon2Color(context)).onPress(widget.infoCallback),
], ],
), ),
), ),

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -8,6 +9,7 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/site_contact_info_model.dart'; import 'package:test_sa/models/site_contact_info_model.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
import '../../app_style/app_color.dart'; import '../../app_style/app_color.dart';
@ -75,7 +77,22 @@ class ContactUsBottomSheet extends StatelessWidget {
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
iconSize: 20, iconSize: 20,
onPressed: () { onPressed: () {
// FlutterClipboard.copy('Hello Flutter friends'); Clipboard.setData(ClipboardData(text: sites[index].phoneNumber!));
},
),
IconButton(
icon: const Icon(Icons.call),
padding: EdgeInsets.zero,
iconSize: 20,
onPressed: () async {
final Uri launchUri = Uri(scheme: 'tel', path: sites[index].phoneNumber!);
if (await canLaunchUrl(launchUri)) {
await launchUrl(launchUri);
} else {
// Handle error, e.g., show a snackbar
throw 'Could not launch $launchUri';
}
}, },
) )
], ],

@ -117,11 +117,12 @@ class _AllRequestsSearchPageState extends State<AllRequestsSearchPage> {
labelText: search!.searchBySelectedValue?.label, labelText: search!.searchBySelectedValue?.label,
textInputType: search!.searchBySelectedValue?.inputType, textInputType: search!.searchBySelectedValue?.inputType,
// labelStyle: AppTextStyles.bodyText2, // labelStyle: AppTextStyles.bodyText2,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)), // style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)),
floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)), // floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff767676)), // labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff767676)),
labelStyle: AppTextStyles.textFieldLabelStyle,
showBorder: true, hintStyle: AppTextStyles.textFieldLabelStyle,
// showBorder: true,
onChange: (text) { onChange: (text) {
search!.searchBySelectedValue?.controller?.text = text; search!.searchBySelectedValue?.controller?.text = text;
search!.searchBySelectedValue?.controller?.selection = TextSelection.fromPosition(TextPosition(offset: search!.searchBySelectedValue!.controller!.text.length)); search!.searchBySelectedValue?.controller?.selection = TextSelection.fromPosition(TextPosition(offset: search!.searchBySelectedValue!.controller!.text.length));

@ -191,25 +191,29 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
padding: const EdgeInsets.only(top: 16, right: 16, left: 16), padding: const EdgeInsets.only(top: 16, right: 16, left: 16),
itemBuilder: (cxt, index) => Container( itemBuilder: (cxt, index) => Container(
alignment: Alignment.center, alignment: Alignment.center,
padding: const EdgeInsets.symmetric(horizontal: 8), padding: const EdgeInsets.symmetric(horizontal: 12),
foregroundDecoration: selectedRequest != index // foregroundDecoration: selectedRequest != index
? null // ? null
: ShapeDecoration( // : ShapeDecoration(
color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(0.1), // color: (AppColor.red20),
shape: RoundedRectangleBorder( // shape: RoundedRectangleBorder(
side: BorderSide(width: 1, color: AppColor.blueStatus(context)), // side: BorderSide(width: 1, color: AppColor.blueStatus(context)),
borderRadius: BorderRadius.circular(7), // borderRadius: BorderRadius.circular(7),
), // ),
), // ),
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: selectedRequest == index ? AppColor.selectedButtonColor(context) : AppColor.unSelectedButtonColor(context).withOpacity(snapshot.isAllLoading ? 0.7 : 1), color: //selectedRequest == index ?
AppColor.background(context) ,//: AppColor.unSelectedButtonColor(context).withOpacity(snapshot.isAllLoading ? 0.7 : 1),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
side: selectedRequest == index ? BorderSide(width: 1, color: AppColor.blueStatus(context)) : BorderSide.none, side: BorderSide(width: 1, color: selectedRequest == index ? AppColor.primary10 : AppColor.borderColor(context)),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(6),
), ),
shadows: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 14, offset: const Offset(0, 0), spreadRadius: 0)], shadows: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 14, offset: const Offset(0, 0), spreadRadius: 0)],
), ),
child: Text(requestsList[index].value, style: AppTextStyles.bodyText2.copyWith(height: 1, color: AppColor.filterButtonTextColor(context))), child: Text(
requestsList[index].value,
style: AppTextStyles.tinyFont.copyWith(height: 1, color: selectedRequest == index ? AppColor.primary10 : AppColor.filterButtonTextColor(context)),
),
).onPress(() { ).onPress(() {
if (snapshot.isAllLoading) { if (snapshot.isAllLoading) {
return; return;

@ -11,7 +11,7 @@ class RequestsTypeFilter extends StatefulWidget {
final Map<String, int> items; final Map<String, int> items;
final List<int> initialValues; final List<int> initialValues;
const RequestsTypeFilter({Key? key, required this.items,required this.initialValues,required this.onSelect}) : super(key: key); const RequestsTypeFilter({Key? key, required this.items, required this.initialValues, required this.onSelect}) : super(key: key);
@override @override
State<RequestsTypeFilter> createState() => _RequestsTypeFilterState(); State<RequestsTypeFilter> createState() => _RequestsTypeFilterState();
@ -45,24 +45,30 @@ class _RequestsTypeFilterState extends State<RequestsTypeFilter> {
.map( .map(
(data) => Container( (data) => Container(
padding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: (_selected.contains(widget.items[data]) ? 12 : 8).toScreenWidth), padding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: (_selected.contains(widget.items[data]) ? 12 : 8).toScreenWidth),
foregroundDecoration: !_selected.contains(widget.items[data]) // foregroundDecoration: !_selected.contains(widget.items[data])
? null // ? null
: ShapeDecoration( // : ShapeDecoration(
color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(0.1), // color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(0.1),
shape: RoundedRectangleBorder( // shape: RoundedRectangleBorder(
side: BorderSide(width: 1, color: AppColor.blueStatus(context)), // side: BorderSide(width: 1, color: AppColor.blueStatus(context)),
borderRadius: BorderRadius.circular(7), // borderRadius: BorderRadius.circular(7),
), // ),
), // ),
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: _selected.contains(widget.items[data]) ? AppColor.selectedButtonColor(context) : AppColor.unSelectedButtonColor(context), color: AppColor.background(context),
// _selected.contains(widget.items[data]) ? AppColor.selectedButtonColor(context) : AppColor.unSelectedButtonColor(context),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
side: _selected.contains(widget.items[data]) ? BorderSide(width: 1, color: AppColor.blueStatus(context)) : BorderSide.none, side: BorderSide(width: 1, color: _selected.contains(widget.items[data]) ? AppColor.primary10 : AppColor.border2Color(context)),
borderRadius: BorderRadius.circular(7),
// side: _selected.contains(widget.items[data]) ? BorderSide(width: 1, color: AppColor.loadingColor(context)) : BorderSide.none,
borderRadius: BorderRadius.circular(6),
), ),
shadows: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 14, offset: const Offset(0, 0), spreadRadius: 0)], shadows: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 14, offset: const Offset(0, 0), spreadRadius: 0)],
), ),
child: data.tinyFont(context).custom(color: AppColor.filterButtonTextColor(context)), child: data.tinyFont(context).custom(color: _selected.contains(widget.items[data]) ? AppColor.primary10 : AppColor.filterButtonTextColor(context)
// AppColor.filterButtonTextColor(context)
),
).onPress( ).onPress(
() { () {
if (_selected.contains(widget.items[data])) { if (_selected.contains(widget.items[data])) {

@ -115,9 +115,9 @@ class _LoginPageState extends State<LoginPage> {
// backgroundColor: AppColor.fieldBgColor(context), // backgroundColor: AppColor.fieldBgColor(context),
validator: (value) => Validator.hasValue(value!) ? null : context.translation.requiredField, validator: (value) => Validator.hasValue(value!) ? null : context.translation.requiredField,
labelText: context.translation.username, labelText: context.translation.username,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)), // style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 14, color: AppColor.textStyleColor(context)),
floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)), // floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.floatingTextStyleColor(context)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff767676)), // labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: AppColor.labelTextStyleColor(context)),
textInputType: TextInputType.text, textInputType: TextInputType.text,
// showWithoutDecoration: true, // showWithoutDecoration: true,
contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight), contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight),

@ -165,7 +165,7 @@ class _SettingsPageState extends State<SettingsPage> {
); );
}), }),
], ],
).toShadowContainer(context).paddingAll(16), ).toShadowContainer(context, borderRadius: 16).paddingAll(16),
); );
} }

@ -139,6 +139,10 @@ class _ProfilePageState extends State<ProfilePage> {
); );
}), }),
8.height, 8.height,
Text(
"Work Order Status".addTranslation,
style: AppTextStyles.heading3.copyWith(color: AppColor.headingTextColor(context)),
),
(_user.username ?? "").heading3(context).custom(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), (_user.username ?? "").heading3(context).custom(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
], ],
), ),
@ -146,15 +150,15 @@ class _ProfilePageState extends State<ProfilePage> {
16.height, 16.height,
Text( Text(
'${context.translation.email}: ${_user.email ?? "-"}', '${context.translation.email}: ${_user.email ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: AppColor.lightTextColor(context)),
), ),
Text( Text(
'${context.translation.phoneNumber}: ${_user.phoneNumber ?? "-"}', '${context.translation.phoneNumber}: ${_user.phoneNumber ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: AppColor.lightTextColor(context)),
), ),
Text( Text(
'${context.translation.extensionNo}: ${_user.extensionNo ?? "-"}', '${context.translation.extensionNo}: ${_user.extensionNo ?? "-"}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: AppColor.lightTextColor(context)),
), ),
// if ((_user.phoneNumber ?? "").isNotEmpty) ...[ // if ((_user.phoneNumber ?? "").isNotEmpty) ...[
// const Divider().defaultStyle(context), // const Divider().defaultStyle(context),
@ -177,7 +181,7 @@ class _ProfilePageState extends State<ProfilePage> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Text( return Text(
_user.departmentName![index] ?? "N/A", _user.departmentName![index] ?? "N/A",
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: AppColor.lightTextColor(context)),
).paddingOnly(top: 2, bottom: 2); ).paddingOnly(top: 2, bottom: 2);
}, },
), ),
@ -229,7 +233,7 @@ class _ProfilePageState extends State<ProfilePage> {
).center; ).center;
}) })
], ],
).toShadowContainer(context), ).toShadowContainer(context, borderRadius: 16),
if (context.settingProvider.isUserFlowMedical) if (context.settingProvider.isUserFlowMedical)
Container( Container(
margin: const EdgeInsets.only(top: 16), margin: const EdgeInsets.only(top: 16),
@ -242,7 +246,7 @@ class _ProfilePageState extends State<ProfilePage> {
children: [ children: [
Text( Text(
"Rota Details", "Rota Details",
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.black10), style: AppTextStyles.heading6.copyWith(color: AppColor.icon2Color(context)),
), ),
8.width, 8.width,
Container( Container(
@ -263,7 +267,7 @@ class _ProfilePageState extends State<ProfilePage> {
), ),
(isTodayRota ? todayRotaWidget() : monthRotaWidget()) (isTodayRota ? todayRotaWidget() : monthRotaWidget())
], ],
).toShadowContainer(context), ).toShadowContainer(context, borderRadius: 16),
), ),
], ],
).expanded, ).expanded,

@ -50,9 +50,10 @@ class _UpdateUserContactInfoBottomSheetState extends State<UpdateUserContactInfo
children: [ children: [
AppTextFormField( AppTextFormField(
labelText: "Email", labelText: "Email",
backgroundColor: AppColor.fieldBgColor(context), // backgroundColor: AppColor.fieldBgColor(context),
initialValue: widget.uEmail, initialValue: widget.uEmail,
textAlign: TextAlign.center, textAlign: TextAlign.center,
showBorder: true,
hintText: "email@example.com", hintText: "email@example.com",
labelStyle: AppTextStyles.textFieldLabelStyle, labelStyle: AppTextStyles.textFieldLabelStyle,
hintStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle,
@ -66,7 +67,7 @@ class _UpdateUserContactInfoBottomSheetState extends State<UpdateUserContactInfo
12.height, 12.height,
AppTextFormField( AppTextFormField(
labelText: "Phone Number", labelText: "Phone Number",
backgroundColor: AppColor.fieldBgColor(context), // backgroundColor: AppColor.fieldBgColor(context),
initialValue: widget.uPhoneNo, initialValue: widget.uPhoneNo,
textAlign: TextAlign.center, textAlign: TextAlign.center,
hintText: "05xxxxxxxx", hintText: "05xxxxxxxx",
@ -82,7 +83,7 @@ class _UpdateUserContactInfoBottomSheetState extends State<UpdateUserContactInfo
12.height, 12.height,
AppTextFormField( AppTextFormField(
labelText: "Extension No", labelText: "Extension No",
backgroundColor: AppColor.fieldBgColor(context), // backgroundColor: AppColor.fieldBgColor(context),
initialValue: widget.uExtensionNo, initialValue: widget.uExtensionNo,
textAlign: TextAlign.center, textAlign: TextAlign.center,
hintText: "1234", hintText: "1234",

@ -43,14 +43,13 @@ class ADatePicker extends StatelessWidget {
return Container( return Container(
height: height, height: height,
decoration: BoxDecoration( decoration: BoxDecoration(
color: backgroundColor ?? color: (context.isDark && !enable
(context.isDark && !enable
? AppColor.neutral50 ? AppColor.neutral50
: !enable : !enable
? AppColor.neutral40 ? AppColor.neutral40
: AppColor.background(context)), : AppColor.background(context)),
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(16),
border: withBorder ? Border.all(width: 1, color: Theme.of(context).scaffoldBackgroundColor) : const Border(), border: withBorder ? Border.all(width: 1, color: AppColor.border2Color(context)) : const Border(),
boxShadow: hideShadow ? null : [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], boxShadow: hideShadow ? null : [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
@ -60,18 +59,22 @@ class ADatePicker extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
label.tinyFont(context), Text(
label,
style: AppTextStyles.tinyFont.copyWith(color: AppColor.floatingTextStyleColor(context)),
),
4.height,
(date == null (date == null
? hint ?? context.translation.pickADate ? hint ?? context.translation.pickADate
: (formatDateWithTime : (formatDateWithTime
? date?.toIso8601String().toFirstActionFormat // Use null-aware operator ? date?.toIso8601String().toFirstActionFormat // Use null-aware operator
: (date?.toIso8601String().split("T").first ?? context.translation.pickADate)))! : (date?.toIso8601String().split("T").first ?? context.translation.pickADate)))!
.bodyText(context) .bodyText(context)
.custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), .custom(color: AppColor.textStyleColor(context)),
], ],
).expanded, ).expanded,
// enable ? 16.width : const Spacer(), // enable ? 16.width : const Spacer(),
withIcon ? "calender".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null) : const SizedBox(), withIcon ? "calender".toSvgAsset(width: 20, color: AppColor.icon2Color(context)) : const SizedBox(),
], ],
), ),
).onPress(enable ).onPress(enable

@ -36,21 +36,21 @@ class AAlertDialog extends StatelessWidget {
], ],
) )
: AlertDialog( : AlertDialog(
backgroundColor: Theme.of(context).scaffoldBackgroundColor, backgroundColor: AppColor.background(context),
title: title != null ? Text(title!) : null, title: title != null ? Text(title!) : null,
content: content != null ? Text(content!) : null, content: content != null ? Text(content!) : null,
// contentTextStyle: AppTextStyles.bodyText.copyWith(color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50)), // contentTextStyle: AppTextStyles.bodyText.copyWith(color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
actions: <Widget>[ actions: <Widget>[
TextButton( TextButton(
// child: Text(_subtitle.confirm), // child: Text(_subtitle.confirm),
child: Text(context.translation.confirm, style: AppTextStyles.bodyText), child: Text(context.translation.confirm, style: AppTextStyles.bodyText.copyWith(color: AppColor.loadingColor(context))),
onPressed: () { onPressed: () {
Navigator.of(context).pop(true); Navigator.of(context).pop(true);
}, },
), ),
TextButton( TextButton(
// child: Text(_subtitle.cancel), // child: Text(_subtitle.cancel),
child: Text(context.translation.cancel, style: AppTextStyles.bodyText), child: Text(context.translation.cancel, style: AppTextStyles.bodyText.copyWith(color: AppColor.loadingColor(context))),
onPressed: () { onPressed: () {
Navigator.of(context).pop(false); Navigator.of(context).pop(false);
}, },

@ -185,14 +185,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.2" version: "0.4.2"
clipboard:
dependency: "direct main"
description:
name: clipboard
sha256: c0ba5e7214035b824549473fa134870bc544fff0d7b89170d4756c0ac2c0239d
url: "https://pub.dev"
source: hosted
version: "3.0.14"
clock: clock:
dependency: transitive dependency: transitive
description: description:

@ -101,7 +101,6 @@ dependencies:
just_audio: ^0.9.46 just_audio: ^0.9.46
safe_device: ^1.3.8 safe_device: ^1.3.8
toggle_switch: ^2.3.0 toggle_switch: ^2.3.0
clipboard: ^3.0.14
tree_view_flutter: ^1.0.2 tree_view_flutter: ^1.0.2
audio_waveforms: ^1.3.0 audio_waveforms: ^1.3.0
signalr_netcore: ^1.4.4 signalr_netcore: ^1.4.4

Loading…
Cancel
Save