Updating to latest FlutterFlow output.
This commit is contained in:
parent
5241206a6a
commit
0790a7c99f
|
@ -28,7 +28,6 @@ require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelpe
|
||||||
flutter_ios_podfile_setup
|
flutter_ios_podfile_setup
|
||||||
|
|
||||||
target 'Runner' do
|
target 'Runner' do
|
||||||
pod 'GoogleUtilities'
|
|
||||||
use_frameworks! :linkage => :static
|
use_frameworks! :linkage => :static
|
||||||
use_modular_headers!
|
use_modular_headers!
|
||||||
|
|
||||||
|
@ -44,9 +43,3 @@ post_install do |installer|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
target 'ImageNotification' do
|
|
||||||
use_frameworks! :linkage => :static
|
|
||||||
pod 'Firebase/Messaging'
|
|
||||||
pod 'GoogleUtilities'
|
|
||||||
end
|
|
||||||
|
|
|
@ -44,8 +44,8 @@
|
||||||
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
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>"; };
|
||||||
6436409C27A31CD800820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
6436409C27A31CDC00820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
6436409327A31CD800820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
6436409A27A31CDA00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; 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>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
@ -225,8 +225,8 @@
|
||||||
6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
|
6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
6436409C27A31CD800820AF7 /* pt */,
|
6436409C27A31CDC00820AF7 /* pt */,
|
||||||
6436409327A31CD800820AF7 /* en */,
|
6436409A27A31CDA00820AF7 /* en */,
|
||||||
);
|
);
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
|
@ -52,11 +52,6 @@
|
||||||
<key>NSPhotoLibraryUsageDescription</key>
|
<key>NSPhotoLibraryUsageDescription</key>
|
||||||
<string>In order to upload data, this app requires permission to access the photo library.</string>
|
<string>In order to upload data, this app requires permission to access the photo library.</string>
|
||||||
|
|
||||||
<key>UIBackgroundModes</key>
|
|
||||||
<array>
|
|
||||||
<string>fetch</string>
|
|
||||||
<string>remote-notification</string>
|
|
||||||
</array>
|
|
||||||
|
|
||||||
|
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
|
|
|
@ -2,7 +2,5 @@
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>aps-environment</key>
|
|
||||||
<string>development</string>
|
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import '/custom_code/actions/index.dart' as actions;
|
import '/custom_code/actions/index.dart' as actions;
|
||||||
|
@ -115,6 +115,9 @@ Future singInActionApp(
|
||||||
FFAppState().userUUID = PhpGroup.loginCall.userUUID(
|
FFAppState().userUUID = PhpGroup.loginCall.userUUID(
|
||||||
(loginCall.jsonBody ?? ''),
|
(loginCall.jsonBody ?? ''),
|
||||||
)!;
|
)!;
|
||||||
|
FFAppState().token = PhpGroup.loginCall.userDeviceId(
|
||||||
|
(loginCall.jsonBody ?? ''),
|
||||||
|
)!;
|
||||||
if (PhpGroup.loginCall.error(
|
if (PhpGroup.loginCall.error(
|
||||||
(loginCall.jsonBody ?? ''),
|
(loginCall.jsonBody ?? ''),
|
||||||
) ==
|
) ==
|
||||||
|
|
|
@ -43,6 +43,9 @@ class FFAppState extends ChangeNotifier {
|
||||||
_safeInit(() {
|
_safeInit(() {
|
||||||
_local = prefs.getString('ff_local') ?? _local;
|
_local = prefs.getString('ff_local') ?? _local;
|
||||||
});
|
});
|
||||||
|
_safeInit(() {
|
||||||
|
_token = prefs.getString('ff_token') ?? _token;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void update(VoidCallback callback) {
|
void update(VoidCallback callback) {
|
||||||
|
@ -114,6 +117,13 @@ class FFAppState extends ChangeNotifier {
|
||||||
_local = value;
|
_local = value;
|
||||||
prefs.setString('ff_local', value);
|
prefs.setString('ff_local', value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String _token = '';
|
||||||
|
String get token => _token;
|
||||||
|
set token(String value) {
|
||||||
|
_token = value;
|
||||||
|
prefs.setString('ff_token', value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _safeInit(Function() initializeField) {
|
void _safeInit(Function() initializeField) {
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
import 'package:cloud_functions/cloud_functions.dart';
|
|
||||||
|
|
||||||
Future<Map<String, dynamic>> makeCloudCall(
|
|
||||||
String callName,
|
|
||||||
Map<String, dynamic> input,
|
|
||||||
) async {
|
|
||||||
try {
|
|
||||||
final response = await FirebaseFunctions.instance
|
|
||||||
.httpsCallable(callName, options: HttpsCallableOptions())
|
|
||||||
.call(input);
|
|
||||||
return response.data is Map
|
|
||||||
? Map<String, dynamic>.from(response.data as Map)
|
|
||||||
: {};
|
|
||||||
} on FirebaseFunctionsException catch (e) {
|
|
||||||
print(
|
|
||||||
'Cloud call error!\n'
|
|
||||||
'Code: ${e.code}\n'
|
|
||||||
'Details: ${e.details}\n'
|
|
||||||
'Message: ${e.message}',
|
|
||||||
);
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,148 +0,0 @@
|
||||||
import 'dart:async';
|
|
||||||
|
|
||||||
import 'serialization_util.dart';
|
|
||||||
import '../backend.dart';
|
|
||||||
import '../../flutter_flow/flutter_flow_theme.dart';
|
|
||||||
import '../../flutter_flow/flutter_flow_util.dart';
|
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
|
|
||||||
final _handledMessageIds = <String?>{};
|
|
||||||
|
|
||||||
class PushNotificationsHandler extends StatefulWidget {
|
|
||||||
const PushNotificationsHandler({super.key, required this.child});
|
|
||||||
|
|
||||||
final Widget child;
|
|
||||||
|
|
||||||
@override
|
|
||||||
_PushNotificationsHandlerState createState() =>
|
|
||||||
_PushNotificationsHandlerState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _PushNotificationsHandlerState extends State<PushNotificationsHandler> {
|
|
||||||
bool _loading = false;
|
|
||||||
|
|
||||||
Future handleOpenedPushNotification() async {
|
|
||||||
if (isWeb) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final notification = await FirebaseMessaging.instance.getInitialMessage();
|
|
||||||
if (notification != null) {
|
|
||||||
await _handlePushNotification(notification);
|
|
||||||
}
|
|
||||||
FirebaseMessaging.onMessageOpenedApp.listen(_handlePushNotification);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future _handlePushNotification(RemoteMessage message) async {
|
|
||||||
if (_handledMessageIds.contains(message.messageId)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_handledMessageIds.add(message.messageId);
|
|
||||||
|
|
||||||
if (mounted) {
|
|
||||||
setState(() => _loading = true);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
final initialPageName = message.data['initialPageName'] as String;
|
|
||||||
final initialParameterData = getInitialParameterData(message.data);
|
|
||||||
final parametersBuilder = parametersBuilderMap[initialPageName];
|
|
||||||
if (parametersBuilder != null) {
|
|
||||||
final parameterData = await parametersBuilder(initialParameterData);
|
|
||||||
context.pushNamed(
|
|
||||||
initialPageName,
|
|
||||||
pathParameters: parameterData.pathParameters,
|
|
||||||
extra: parameterData.extra,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
print('Error: $e');
|
|
||||||
} finally {
|
|
||||||
if (mounted) {
|
|
||||||
setState(() => _loading = false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
handleOpenedPushNotification();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) => _loading
|
|
||||||
? Container(
|
|
||||||
color: FlutterFlowTheme.of(context).primary,
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/images/logo.svg',
|
|
||||||
fit: BoxFit.cover,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: widget.child;
|
|
||||||
}
|
|
||||||
|
|
||||||
class ParameterData {
|
|
||||||
const ParameterData(
|
|
||||||
{this.requiredParams = const {}, this.allParams = const {}});
|
|
||||||
final Map<String, String?> requiredParams;
|
|
||||||
final Map<String, dynamic> allParams;
|
|
||||||
|
|
||||||
Map<String, String> get pathParameters => Map.fromEntries(
|
|
||||||
requiredParams.entries
|
|
||||||
.where((e) => e.value != null)
|
|
||||||
.map((e) => MapEntry(e.key, e.value!)),
|
|
||||||
);
|
|
||||||
Map<String, dynamic> get extra => Map.fromEntries(
|
|
||||||
allParams.entries.where((e) => e.value != null),
|
|
||||||
);
|
|
||||||
|
|
||||||
static Future<ParameterData> Function(Map<String, dynamic>) none() =>
|
|
||||||
(data) async => const ParameterData();
|
|
||||||
}
|
|
||||||
|
|
||||||
final parametersBuilderMap =
|
|
||||||
<String, Future<ParameterData> Function(Map<String, dynamic>)>{
|
|
||||||
'LoginPage': (data) async => ParameterData(
|
|
||||||
allParams: {
|
|
||||||
'device': getParameter<String>(data, 'device'),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
'ForgotPasswordPage': ParameterData.none(),
|
|
||||||
'homePage': ParameterData.none(),
|
|
||||||
'RegisterPage': ParameterData.none(),
|
|
||||||
'WelcomePage': ParameterData.none(),
|
|
||||||
'registerVisitorPage': ParameterData.none(),
|
|
||||||
'scheduleCompleteVisitPage': (data) async => ParameterData(
|
|
||||||
allParams: {
|
|
||||||
'visitorStrList': getParameter<String>(data, 'visitorStrList'),
|
|
||||||
'visitStartDateStr': getParameter<String>(data, 'visitStartDateStr'),
|
|
||||||
'visitEndDateStr': getParameter<String>(data, 'visitEndDateStr'),
|
|
||||||
'visitReasonStr': getParameter<String>(data, 'visitReasonStr'),
|
|
||||||
'visitLevelStr': getParameter<String>(data, 'visitLevelStr'),
|
|
||||||
'visitTempBol': getParameter<bool>(data, 'visitTempBol'),
|
|
||||||
'visitObsStr': getParameter<String>(data, 'visitObsStr'),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
'scheduleProvisionalVisitPage': ParameterData.none(),
|
|
||||||
'onBoardingPage': ParameterData.none(),
|
|
||||||
'fastPassPage': ParameterData.none(),
|
|
||||||
'test': ParameterData.none(),
|
|
||||||
'peopleOnThePropertyPage': ParameterData.none(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Map<String, dynamic> getInitialParameterData(Map<String, dynamic> data) {
|
|
||||||
try {
|
|
||||||
final parameterDataStr = data['parameterData'];
|
|
||||||
if (parameterDataStr == null ||
|
|
||||||
parameterDataStr is! String ||
|
|
||||||
parameterDataStr.isEmpty) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
return jsonDecode(parameterDataStr) as Map<String, dynamic>;
|
|
||||||
} catch (e) {
|
|
||||||
print('Error parsing parameter data: $e');
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
import 'dart:io' show Platform;
|
|
||||||
|
|
||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
||||||
|
|
||||||
import '../../auth/firebase_auth/auth_util.dart';
|
|
||||||
import '../cloud_functions/cloud_functions.dart';
|
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:stream_transform/stream_transform.dart';
|
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
||||||
|
|
||||||
export 'push_notifications_handler.dart';
|
|
||||||
export 'serialization_util.dart';
|
|
||||||
|
|
||||||
class UserTokenInfo {
|
|
||||||
const UserTokenInfo(this.userPath, this.fcmToken);
|
|
||||||
final String userPath;
|
|
||||||
final String fcmToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
Stream<UserTokenInfo> getFcmTokenStream(String userPath) =>
|
|
||||||
Stream.value(!kIsWeb && (Platform.isIOS || Platform.isAndroid))
|
|
||||||
.where((shouldGetToken) => shouldGetToken)
|
|
||||||
.asyncMap<String?>(
|
|
||||||
(_) => FirebaseMessaging.instance.requestPermission().then(
|
|
||||||
(settings) => settings.authorizationStatus ==
|
|
||||||
AuthorizationStatus.authorized
|
|
||||||
? FirebaseMessaging.instance.getToken()
|
|
||||||
: null,
|
|
||||||
))
|
|
||||||
.switchMap((fcmToken) => Stream.value(fcmToken)
|
|
||||||
.merge(FirebaseMessaging.instance.onTokenRefresh))
|
|
||||||
.where((fcmToken) => fcmToken != null && fcmToken.isNotEmpty)
|
|
||||||
.map((token) => UserTokenInfo(userPath, token!));
|
|
||||||
final fcmTokenUserStream = authenticatedUserStream
|
|
||||||
.where((user) => user != null)
|
|
||||||
.map((user) => user!.reference.path)
|
|
||||||
.distinct()
|
|
||||||
.switchMap(getFcmTokenStream)
|
|
||||||
.map(
|
|
||||||
(userTokenInfo) => makeCloudCall(
|
|
||||||
'addFcmToken',
|
|
||||||
{
|
|
||||||
'userDocPath': userTokenInfo.userPath,
|
|
||||||
'fcmToken': userTokenInfo.fcmToken,
|
|
||||||
'deviceType': Platform.isIOS ? 'iOS' : 'Android',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,172 +0,0 @@
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
import '/backend/backend.dart';
|
|
||||||
import '/backend/schema/structs/index.dart';
|
|
||||||
|
|
||||||
import '../../flutter_flow/lat_lng.dart';
|
|
||||||
import '../../flutter_flow/place.dart';
|
|
||||||
import '../../flutter_flow/uploaded_file.dart';
|
|
||||||
|
|
||||||
/// SERIALIZATION HELPERS
|
|
||||||
|
|
||||||
String dateTimeRangeToString(DateTimeRange dateTimeRange) {
|
|
||||||
final startStr = dateTimeRange.start.millisecondsSinceEpoch.toString();
|
|
||||||
final endStr = dateTimeRange.end.millisecondsSinceEpoch.toString();
|
|
||||||
return '$startStr|$endStr';
|
|
||||||
}
|
|
||||||
|
|
||||||
String placeToString(FFPlace place) => jsonEncode({
|
|
||||||
'latLng': place.latLng.serialize(),
|
|
||||||
'name': place.name,
|
|
||||||
'address': place.address,
|
|
||||||
'city': place.city,
|
|
||||||
'state': place.state,
|
|
||||||
'country': place.country,
|
|
||||||
'zipCode': place.zipCode,
|
|
||||||
});
|
|
||||||
|
|
||||||
String uploadedFileToString(FFUploadedFile uploadedFile) =>
|
|
||||||
uploadedFile.serialize();
|
|
||||||
|
|
||||||
/// Converts the input value into a value that can be JSON encoded.
|
|
||||||
dynamic serializeParameter(dynamic value) {
|
|
||||||
switch (value.runtimeType) {
|
|
||||||
case DateTime:
|
|
||||||
return (value as DateTime).millisecondsSinceEpoch;
|
|
||||||
case DateTimeRange:
|
|
||||||
return dateTimeRangeToString(value as DateTimeRange);
|
|
||||||
case LatLng:
|
|
||||||
return (value as LatLng).serialize();
|
|
||||||
case Color:
|
|
||||||
return (value as Color).toCssString();
|
|
||||||
case FFPlace:
|
|
||||||
return placeToString(value as FFPlace);
|
|
||||||
case FFUploadedFile:
|
|
||||||
return uploadedFileToString(value as FFUploadedFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value is DocumentReference) {
|
|
||||||
return value.path;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value is FirestoreRecord) {
|
|
||||||
return (value as dynamic).reference.path;
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
String serializeParameterData(Map<String, dynamic> parameterData) => jsonEncode(
|
|
||||||
parameterData.map(
|
|
||||||
(key, value) => MapEntry(
|
|
||||||
key,
|
|
||||||
serializeParameter(value),
|
|
||||||
),
|
|
||||||
)..removeWhere((k, v) => v == null),
|
|
||||||
);
|
|
||||||
|
|
||||||
/// END SERIALIZATION HELPERS
|
|
||||||
|
|
||||||
/// DESERIALIZATION HELPERS
|
|
||||||
|
|
||||||
DateTimeRange? dateTimeRangeFromString(String dateTimeRangeStr) {
|
|
||||||
final pieces = dateTimeRangeStr.split('|');
|
|
||||||
if (pieces.length != 2) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return DateTimeRange(
|
|
||||||
start: DateTime.fromMillisecondsSinceEpoch(int.parse(pieces.first)),
|
|
||||||
end: DateTime.fromMillisecondsSinceEpoch(int.parse(pieces.last)),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
LatLng? latLngFromString(String? latLngStr) {
|
|
||||||
final pieces = latLngStr?.split(',');
|
|
||||||
if (pieces == null || pieces.length != 2) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return LatLng(
|
|
||||||
double.parse(pieces.first.trim()),
|
|
||||||
double.parse(pieces.last.trim()),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
FFPlace placeFromString(String placeStr) {
|
|
||||||
final serializedData = jsonDecode(placeStr) as Map<String, dynamic>;
|
|
||||||
final data = {
|
|
||||||
'latLng': serializedData.containsKey('latLng')
|
|
||||||
? latLngFromString(serializedData['latLng'] as String)
|
|
||||||
: const LatLng(0.0, 0.0),
|
|
||||||
'name': serializedData['name'] ?? '',
|
|
||||||
'address': serializedData['address'] ?? '',
|
|
||||||
'city': serializedData['city'] ?? '',
|
|
||||||
'state': serializedData['state'] ?? '',
|
|
||||||
'country': serializedData['country'] ?? '',
|
|
||||||
'zipCode': serializedData['zipCode'] ?? '',
|
|
||||||
};
|
|
||||||
return FFPlace(
|
|
||||||
latLng: data['latLng'] as LatLng,
|
|
||||||
name: data['name'] as String,
|
|
||||||
address: data['address'] as String,
|
|
||||||
city: data['city'] as String,
|
|
||||||
state: data['state'] as String,
|
|
||||||
country: data['country'] as String,
|
|
||||||
zipCode: data['zipCode'] as String,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
FFUploadedFile uploadedFileFromString(String uploadedFileStr) =>
|
|
||||||
FFUploadedFile.deserialize(uploadedFileStr);
|
|
||||||
|
|
||||||
T? getParameter<T>(Map<String, dynamic> data, String paramName) {
|
|
||||||
try {
|
|
||||||
if (!data.containsKey(paramName)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
final param = data[paramName];
|
|
||||||
switch (T) {
|
|
||||||
case String:
|
|
||||||
return param;
|
|
||||||
case double:
|
|
||||||
return param.toDouble();
|
|
||||||
case DateTime:
|
|
||||||
return DateTime.fromMillisecondsSinceEpoch(param) as T;
|
|
||||||
case DateTimeRange:
|
|
||||||
return dateTimeRangeFromString(param) as T;
|
|
||||||
case LatLng:
|
|
||||||
return latLngFromString(param) as T;
|
|
||||||
case Color:
|
|
||||||
return fromCssColor(param) as T;
|
|
||||||
case FFPlace:
|
|
||||||
return placeFromString(param) as T;
|
|
||||||
case FFUploadedFile:
|
|
||||||
return uploadedFileFromString(param) as T;
|
|
||||||
}
|
|
||||||
if (param is String) {
|
|
||||||
return FirebaseFirestore.instance.doc(param) as T;
|
|
||||||
}
|
|
||||||
return param;
|
|
||||||
} catch (e) {
|
|
||||||
print('Error parsing parameter "$paramName": $e');
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<T?> getDocumentParameter<T>(
|
|
||||||
Map<String, dynamic> data,
|
|
||||||
String paramName,
|
|
||||||
RecordBuilder<T> recordBuilder,
|
|
||||||
) {
|
|
||||||
if (!data.containsKey(paramName)) {
|
|
||||||
return Future.value(null);
|
|
||||||
}
|
|
||||||
return FirebaseFirestore.instance
|
|
||||||
.doc(data[paramName])
|
|
||||||
.get()
|
|
||||||
.then((s) => recordBuilder(s));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// END DESERIALIZATION HELPERS
|
|
|
@ -1,4 +1,4 @@
|
||||||
import '/application_components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
|
import '/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_icon_button.dart';
|
import '/flutter_flow/flutter_flow_icon_button.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -1,4 +1,4 @@
|
||||||
import '/application_components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
import '/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import '/flutter_flow/custom_functions.dart' as functions;
|
import '/flutter_flow/custom_functions.dart' as functions;
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/molecular_components/option_selection_modal/option_selection_modal_widget.dart';
|
import '/components/molecular_components/option_selection_modal/option_selection_modal_widget.dart';
|
||||||
import '/application_components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
|
import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
|
||||||
import '/application_components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
|
import '/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import 'menu_component_widget.dart' show MenuComponentWidget;
|
import 'menu_component_widget.dart' show MenuComponentWidget;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
|
@ -1,5 +1,5 @@
|
||||||
import '/application_components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
|
import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
|
||||||
import '/application_components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
|
import '/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'menu_component_model.dart';
|
import 'menu_component_model.dart';
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/application_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
|
import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_icon_button.dart';
|
import '/flutter_flow/flutter_flow_icon_button.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/application_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
|
import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_icon_button.dart';
|
import '/flutter_flow/flutter_flow_icon_button.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -1,5 +1,5 @@
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_drop_down.dart';
|
import '/flutter_flow/flutter_flow_drop_down.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -1,4 +1,4 @@
|
||||||
import '/application_components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart';
|
import '/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_animations.dart';
|
import '/flutter_flow/flutter_flow_animations.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -1,5 +1,5 @@
|
||||||
import '/application_components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
|
import '/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
|
||||||
import '/application_components/organism_components/view_visit_detail/view_visit_detail_widget.dart';
|
import '/components/organism_components/view_visit_detail/view_visit_detail_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import 'visit_details_modal_template_component_widget.dart'
|
import 'visit_details_modal_template_component_widget.dart'
|
||||||
show VisitDetailsModalTemplateComponentWidget;
|
show VisitDetailsModalTemplateComponentWidget;
|
|
@ -1,5 +1,5 @@
|
||||||
import '/application_components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
|
import '/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
|
||||||
import '/application_components/organism_components/view_visit_detail/view_visit_detail_widget.dart';
|
import '/components/organism_components/view_visit_detail/view_visit_detail_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'visit_details_modal_template_component_model.dart';
|
import 'visit_details_modal_template_component_model.dart';
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart';
|
|
||||||
import '/application_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart';
|
||||||
|
import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_icon_button.dart';
|
import '/flutter_flow/flutter_flow_icon_button.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -3,21 +3,21 @@ export '/legacy/on_boarding_legacy/login_page/login_page_widget.dart'
|
||||||
show LoginPageWidget;
|
show LoginPageWidget;
|
||||||
export '/legacy/on_boarding_legacy/forgot_password_page/forgot_password_page_widget.dart'
|
export '/legacy/on_boarding_legacy/forgot_password_page/forgot_password_page_widget.dart'
|
||||||
show ForgotPasswordPageWidget;
|
show ForgotPasswordPageWidget;
|
||||||
export '/application_pages/home_page/home_page_widget.dart' show HomePageWidget;
|
export '/pages/home_page/home_page_widget.dart' show HomePageWidget;
|
||||||
export '/legacy/on_boarding_legacy/register_page/register_page_widget.dart'
|
export '/legacy/on_boarding_legacy/register_page/register_page_widget.dart'
|
||||||
show RegisterPageWidget;
|
show RegisterPageWidget;
|
||||||
export '/legacy/on_boarding_legacy/welcome_page/welcome_page_widget.dart'
|
export '/legacy/on_boarding_legacy/welcome_page/welcome_page_widget.dart'
|
||||||
show WelcomePageWidget;
|
show WelcomePageWidget;
|
||||||
export '/application_pages/register_visitor_page/register_visitor_page_widget.dart'
|
export '/pages/register_visitor_page/register_visitor_page_widget.dart'
|
||||||
show RegisterVisitorPageWidget;
|
show RegisterVisitorPageWidget;
|
||||||
export '/application_pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart'
|
export '/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart'
|
||||||
show ScheduleCompleteVisitPageWidget;
|
show ScheduleCompleteVisitPageWidget;
|
||||||
export '/application_pages/schedule_provisional_visit_page/schedule_provisional_visit_page_widget.dart'
|
export '/pages/schedule_provisional_visit_page/schedule_provisional_visit_page_widget.dart'
|
||||||
show ScheduleProvisionalVisitPageWidget;
|
show ScheduleProvisionalVisitPageWidget;
|
||||||
export '/application_pages/on_boarding_page/on_boarding_page_widget.dart'
|
export '/pages/on_boarding_page/on_boarding_page_widget.dart'
|
||||||
show OnBoardingPageWidget;
|
show OnBoardingPageWidget;
|
||||||
export '/application_pages/fast_pass_page/fast_pass_page_widget.dart'
|
export '/pages/fast_pass_page/fast_pass_page_widget.dart'
|
||||||
show FastPassPageWidget;
|
show FastPassPageWidget;
|
||||||
export '/legacy/test/test_widget.dart' show TestWidget;
|
export '/legacy/test/test_widget.dart' show TestWidget;
|
||||||
export '/application_pages/people_on_the_property_page/people_on_the_property_page_widget.dart'
|
export '/pages/people_on_the_property_page/people_on_the_property_page_widget.dart'
|
||||||
show PeopleOnThePropertyPageWidget;
|
show PeopleOnThePropertyPageWidget;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import '/application_components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
import '/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import '/flutter_flow/custom_functions.dart' as functions;
|
import '/flutter_flow/custom_functions.dart' as functions;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import '/custom_code/actions/index.dart' as actions;
|
import '/custom_code/actions/index.dart' as actions;
|
||||||
import 'login_page_widget.dart' show LoginPageWidget;
|
import 'login_page_widget.dart' show LoginPageWidget;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/molecular_components/opt_modal/opt_modal_widget.dart';
|
|
||||||
import '/application_components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/opt_modal/opt_modal_widget.dart';
|
||||||
|
import '/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_icon_button.dart';
|
import '/flutter_flow/flutter_flow_icon_button.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/organism_components/local_profile_component/local_profile_component_widget.dart';
|
import '/components/organism_components/local_profile_component/local_profile_component_widget.dart';
|
||||||
import '/application_components/organism_components/menu_component/menu_component_widget.dart';
|
import '/components/organism_components/menu_component/menu_component_widget.dart';
|
||||||
import '/application_components/organism_components/message_well_component/message_well_component_widget.dart';
|
import '/components/organism_components/message_well_component/message_well_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import 'home_page_widget.dart' show HomePageWidget;
|
import 'home_page_widget.dart' show HomePageWidget;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
|
@ -1,7 +1,7 @@
|
||||||
import '/application_components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
import '/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
||||||
import '/application_components/organism_components/local_profile_component/local_profile_component_widget.dart';
|
import '/components/organism_components/local_profile_component/local_profile_component_widget.dart';
|
||||||
import '/application_components/organism_components/menu_component/menu_component_widget.dart';
|
import '/components/organism_components/menu_component/menu_component_widget.dart';
|
||||||
import '/application_components/organism_components/message_well_component/message_well_component_widget.dart';
|
import '/components/organism_components/message_well_component/message_well_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_icon_button.dart';
|
import '/flutter_flow/flutter_flow_icon_button.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart';
|
import '/components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart';
|
||||||
import '/application_components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart';
|
import '/components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart';
|
||||||
import '/application_components/templates_components/welcome_template_component/welcome_template_component_widget.dart';
|
import '/components/templates_components/welcome_template_component/welcome_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import 'on_boarding_page_widget.dart' show OnBoardingPageWidget;
|
import 'on_boarding_page_widget.dart' show OnBoardingPageWidget;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart';
|
import '/components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart';
|
||||||
import '/application_components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart';
|
import '/components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart';
|
||||||
import '/application_components/templates_components/welcome_template_component/welcome_template_component_widget.dart';
|
import '/components/templates_components/welcome_template_component/welcome_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
|
@ -1,5 +1,5 @@
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_drop_down.dart';
|
import '/flutter_flow/flutter_flow_drop_down.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
|
@ -1,9 +1,9 @@
|
||||||
import '/application_components/molecular_components/opt_modal/opt_modal_widget.dart';
|
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/application_components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart';
|
|
||||||
import '/application_components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart';
|
|
||||||
import '/application_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/opt_modal/opt_modal_widget.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
|
import '/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart';
|
||||||
|
import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
|
||||||
|
import '/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_drop_down.dart';
|
import '/flutter_flow/flutter_flow_drop_down.dart';
|
||||||
import '/flutter_flow/flutter_flow_icon_button.dart';
|
import '/flutter_flow/flutter_flow_icon_button.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
|
@ -1,6 +1,6 @@
|
||||||
import '/application_components/molecular_components/throw_exception/throw_exception_widget.dart';
|
|
||||||
import '/application_components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
|
||||||
import '/backend/api_requests/api_calls.dart';
|
import '/backend/api_requests/api_calls.dart';
|
||||||
|
import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
|
||||||
|
import '/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
|
||||||
import '/flutter_flow/flutter_flow_theme.dart';
|
import '/flutter_flow/flutter_flow_theme.dart';
|
||||||
import '/flutter_flow/flutter_flow_util.dart';
|
import '/flutter_flow/flutter_flow_util.dart';
|
||||||
import '/flutter_flow/flutter_flow_widgets.dart';
|
import '/flutter_flow/flutter_flow_widgets.dart';
|
|
@ -27,9 +27,6 @@ dependencies:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
auto_size_text: 3.0.0
|
auto_size_text: 3.0.0
|
||||||
cached_network_image: 3.3.1
|
cached_network_image: 3.3.1
|
||||||
cloud_functions: 4.6.7
|
|
||||||
cloud_functions_platform_interface: 5.5.18
|
|
||||||
cloud_functions_web: 4.7.1
|
|
||||||
collection: 1.18.0
|
collection: 1.18.0
|
||||||
crop_your_image: 1.0.0
|
crop_your_image: 1.0.0
|
||||||
data_table_2: 2.5.10
|
data_table_2: 2.5.10
|
||||||
|
@ -38,12 +35,6 @@ dependencies:
|
||||||
easy_debounce: 2.0.1
|
easy_debounce: 2.0.1
|
||||||
equatable: 2.0.5
|
equatable: 2.0.5
|
||||||
file_picker: 6.1.1
|
file_picker: 6.1.1
|
||||||
firebase_core: 2.26.0
|
|
||||||
firebase_core_platform_interface: 5.0.0
|
|
||||||
firebase_core_web: 2.11.5
|
|
||||||
firebase_messaging: 14.7.18
|
|
||||||
firebase_messaging_platform_interface: 4.5.26
|
|
||||||
firebase_messaging_web: 3.6.7
|
|
||||||
flutter_animate: 4.1.1+1
|
flutter_animate: 4.1.1+1
|
||||||
flutter_cache_manager: 3.3.1
|
flutter_cache_manager: 3.3.1
|
||||||
flutter_plugin_android_lifecycle: 2.0.17
|
flutter_plugin_android_lifecycle: 2.0.17
|
||||||
|
|
Loading…
Reference in New Issue