v2.2.2 build 20
This commit is contained in:
parent
fc2bf59620
commit
053f8d233b
|
|
@ -4,27 +4,12 @@ import 'package:didvan/providers/media.dart';
|
||||||
import 'package:didvan/providers/theme.dart';
|
import 'package:didvan/providers/theme.dart';
|
||||||
import 'package:didvan/providers/user.dart';
|
import 'package:didvan/providers/user.dart';
|
||||||
import 'package:didvan/routes/route_generator.dart';
|
import 'package:didvan/routes/route_generator.dart';
|
||||||
import 'package:didvan/services/app_initalizer.dart';
|
|
||||||
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
|
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
if (!kIsWeb) {
|
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
|
||||||
await Firebase.initializeApp();
|
|
||||||
final initMsg = await FirebaseMessaging.instance.getInitialMessage();
|
|
||||||
if (initMsg != null) {
|
|
||||||
AppInitializer.clickAction = initMsg.data['click_action'].replaceAll(
|
|
||||||
'navigate-',
|
|
||||||
'',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
runApp(const Didvan());
|
runApp(const Didvan());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,38 @@
|
||||||
import 'package:didvan/models/settings_data.dart';
|
import 'package:didvan/models/settings_data.dart';
|
||||||
|
import 'package:didvan/services/media/media.dart';
|
||||||
import 'package:didvan/services/storage/storage.dart';
|
import 'package:didvan/services/storage/storage.dart';
|
||||||
|
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class AppInitializer {
|
class AppInitializer {
|
||||||
static String? fcmToken;
|
static String? fcmToken;
|
||||||
static String? clickAction;
|
static String? clickAction;
|
||||||
|
|
||||||
static Future<void> setupServices() async {
|
static Future<void> setupServices(BuildContext context) async {
|
||||||
if (!kIsWeb) {
|
if (!kIsWeb) {
|
||||||
StorageService.appDocsDir =
|
StorageService.appDocsDir =
|
||||||
(await getApplicationDocumentsDirectory()).path;
|
(await getApplicationDocumentsDirectory()).path;
|
||||||
StorageService.appTempsDir = (await getTemporaryDirectory()).path;
|
StorageService.appTempsDir = (await getTemporaryDirectory()).path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final studioState = context.read<StudioDetailsState>();
|
||||||
|
|
||||||
|
MediaService.audioPlayer.isPlaying.listen((event) {
|
||||||
|
if (event &&
|
||||||
|
(MediaService.audioPlayerTag?.contains('podcast') ?? false)) {
|
||||||
|
studioState.handleTracking(
|
||||||
|
id: MediaService.currentPodcast!.id,
|
||||||
|
sendRequest: false,
|
||||||
|
);
|
||||||
|
} else if (MediaService.audioPlayerTag?.contains('podcast') ?? false) {
|
||||||
|
studioState.handleTracking(id: MediaService.currentPodcast!.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<SettingsData> initilizeSettings() async {
|
static Future<SettingsData> initilizeSettings() async {
|
||||||
|
|
@ -82,6 +99,13 @@ class AppInitializer {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Firebase.app();
|
Firebase.app();
|
||||||
}
|
}
|
||||||
|
final initMsg = await FirebaseMessaging.instance.getInitialMessage();
|
||||||
|
if (initMsg != null) {
|
||||||
|
clickAction = initMsg.data['click_action'].replaceAll(
|
||||||
|
'navigate-',
|
||||||
|
'',
|
||||||
|
);
|
||||||
|
}
|
||||||
final FirebaseMessaging fcm = FirebaseMessaging.instance;
|
final FirebaseMessaging fcm = FirebaseMessaging.instance;
|
||||||
fcmToken = await fcm.getToken(
|
fcmToken = await fcm.getToken(
|
||||||
vapidKey: kIsWeb
|
vapidKey: kIsWeb
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ class RequestHelper {
|
||||||
MapEntry('search', args.search),
|
MapEntry('search', args.search),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
static String sudioSlider(String type) =>
|
static String studioSlider(String type) =>
|
||||||
_baseStudioUrl +
|
_baseStudioUrl +
|
||||||
'/slider' +
|
'/slider' +
|
||||||
_urlConcatGenerator([MapEntry('type', type)]);
|
_urlConcatGenerator([MapEntry('type', type)]);
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,10 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/models/requests/news.dart';
|
|
||||||
import 'package:didvan/models/requests/radar.dart';
|
|
||||||
import 'package:didvan/models/requests/studio.dart';
|
|
||||||
import 'package:didvan/services/app_initalizer.dart';
|
|
||||||
import 'package:didvan/views/home/home_state.dart';
|
import 'package:didvan/views/home/home_state.dart';
|
||||||
import 'package:didvan/views/home/news/news.dart';
|
import 'package:didvan/views/home/news/news.dart';
|
||||||
import 'package:didvan/views/home/radar/radar.dart';
|
import 'package:didvan/views/home/radar/radar.dart';
|
||||||
import 'package:didvan/views/home/settings/settings.dart';
|
import 'package:didvan/views/home/settings/settings.dart';
|
||||||
import 'package:didvan/views/home/statistic/statistic.dart';
|
import 'package:didvan/views/home/statistic/statistic.dart';
|
||||||
import 'package:didvan/views/home/studio/studio.dart';
|
import 'package:didvan/views/home/studio/studio.dart';
|
||||||
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
|
|
||||||
import 'package:didvan/views/widgets/didvan/bnb.dart';
|
import 'package:didvan/views/widgets/didvan/bnb.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
@ -31,25 +26,6 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
|
||||||
_tabController.addListener(() {
|
_tabController.addListener(() {
|
||||||
context.read<HomeState>().currentPageIndex = _tabController.index;
|
context.read<HomeState>().currentPageIndex = _tabController.index;
|
||||||
});
|
});
|
||||||
// if (AppInitializer.clickAction != null) {
|
|
||||||
// final clickAction = AppInitializer.clickAction!;
|
|
||||||
// String routeName = '';
|
|
||||||
// if (clickAction.contains('podcast')) {
|
|
||||||
// context.read<StudioDetailsState>().getStudioDetails();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// Navigator.of(context).pushNamed(
|
|
||||||
// clickAction.split('-').first,
|
|
||||||
// arguments: {
|
|
||||||
// 'id': clickAction.split('-')[1],
|
|
||||||
// 'args': clickAction.contains('radar')
|
|
||||||
// ? const RadarRequestArgs(page: 0)
|
|
||||||
// : clickAction.contains('news')
|
|
||||||
// ? const NewsRequestArgs(page: 0)
|
|
||||||
// : const StudioRequestArgs(page: 0),
|
|
||||||
// },
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ class NewsDetailsState extends CoreProvier {
|
||||||
);
|
);
|
||||||
service.put();
|
service.put();
|
||||||
_trackingTimerCounter = 0;
|
_trackingTimerCounter = 0;
|
||||||
|
_trackingTimer.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> getRelatedContents() async {
|
Future<void> getRelatedContents() async {
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,7 @@ class RadarDetailsState extends CoreProvier {
|
||||||
);
|
);
|
||||||
service.put();
|
service.put();
|
||||||
_trackingTimerCounter = 0;
|
_trackingTimerCounter = 0;
|
||||||
|
_trackingTimer.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ class _StudioDetailsState extends State<StudioDetails> {
|
||||||
if (MediaService.currentPodcast != null) {
|
if (MediaService.currentPodcast != null) {
|
||||||
state.studio = MediaService.currentPodcast!;
|
state.studio = MediaService.currentPodcast!;
|
||||||
}
|
}
|
||||||
|
state.handleTracking(id: state.studio.id);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
child: SafeArea(
|
child: SafeArea(
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ class _StudioDetailsState extends State<StudioDetails> {
|
||||||
if (MediaService.currentPodcast != null) {
|
if (MediaService.currentPodcast != null) {
|
||||||
state.studio = MediaService.currentPodcast!;
|
state.studio = MediaService.currentPodcast!;
|
||||||
}
|
}
|
||||||
|
state.handleTracking(id: state.studio.id);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
child: SafeArea(
|
child: SafeArea(
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ class StudioDetailsState extends CoreProvier {
|
||||||
final List<int> relatedQueue = [];
|
final List<int> relatedQueue = [];
|
||||||
bool _positionListenerActivated = false;
|
bool _positionListenerActivated = false;
|
||||||
AppState alongSideState = AppState.idle;
|
AppState alongSideState = AppState.idle;
|
||||||
|
int _trackingTimerCounter = 0;
|
||||||
|
late Timer _trackingTimer;
|
||||||
|
|
||||||
int _selectedDetailsIndex = 0;
|
int _selectedDetailsIndex = 0;
|
||||||
Timer? timer;
|
Timer? timer;
|
||||||
|
|
@ -84,6 +86,9 @@ class StudioDetailsState extends CoreProvier {
|
||||||
}
|
}
|
||||||
stopOnPodcastEnds = false;
|
stopOnPodcastEnds = false;
|
||||||
if (service.isSuccess) {
|
if (service.isSuccess) {
|
||||||
|
if (args?.type == 'video') {
|
||||||
|
handleTracking(id: id, sendRequest: false);
|
||||||
|
}
|
||||||
final result = service.result;
|
final result = service.result;
|
||||||
studio = StudioDetailsData.fromJson(result['studio']);
|
studio = StudioDetailsData.fromJson(result['studio']);
|
||||||
if (result['nextStudio'].isNotEmpty && this.args.page != 0) {
|
if (result['nextStudio'].isNotEmpty && this.args.page != 0) {
|
||||||
|
|
@ -167,4 +172,32 @@ class StudioDetailsState extends CoreProvier {
|
||||||
studio.comments = count;
|
studio.comments = count;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> handleTracking({
|
||||||
|
required int id,
|
||||||
|
bool sendRequest = true,
|
||||||
|
}) async {
|
||||||
|
if (!sendRequest) {
|
||||||
|
_trackingTimerCounter = 0;
|
||||||
|
_trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
||||||
|
_trackingTimerCounter++;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final service = RequestService(
|
||||||
|
RequestHelper.tracking(id, 'studio'),
|
||||||
|
body: {
|
||||||
|
'sec': _trackingTimerCounter,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
service.put();
|
||||||
|
_trackingTimerCounter = 0;
|
||||||
|
_trackingTimer.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_trackingTimer.cancel();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ class StudioState extends CoreProvier {
|
||||||
|
|
||||||
Future<void> _getSliders() async {
|
Future<void> _getSliders() async {
|
||||||
final service = RequestService(
|
final service = RequestService(
|
||||||
RequestHelper.sudioSlider(type),
|
RequestHelper.studioSlider(type),
|
||||||
);
|
);
|
||||||
await service.httpGet();
|
await service.httpGet();
|
||||||
if (service.isSuccess) {
|
if (service.isSuccess) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:assets_audio_player/assets_audio_player.dart';
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/config/theme_data.dart';
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
|
|
@ -125,12 +126,20 @@ class AudioPlayerWidget extends StatelessWidget {
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Center(
|
child: Center(
|
||||||
child: StreamBuilder<bool>(
|
child: StreamBuilder<PlayingAudio?>(
|
||||||
stream: MediaService.audioPlayer.isPlaying,
|
stream: MediaService.audioPlayer.onReadyToPlay,
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
return _PlayPouseAnimatedIcon(
|
if (snapshot.data == null) {
|
||||||
audioSource: podcast.link,
|
return const CircularProgressIndicator();
|
||||||
id: podcast.id,
|
}
|
||||||
|
return StreamBuilder<bool>(
|
||||||
|
stream: MediaService.audioPlayer.isPlaying,
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
return _PlayPouseAnimatedIcon(
|
||||||
|
audioSource: podcast.link,
|
||||||
|
id: podcast.id,
|
||||||
|
);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,7 @@ class MultitypeOverview extends StatelessWidget {
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: const [
|
children: const [
|
||||||
ShimmerPlaceholder(height: 18, width: 200),
|
ShimmerPlaceholder(height: 18, width: 150),
|
||||||
SizedBox(height: 8),
|
SizedBox(height: 8),
|
||||||
ShimmerPlaceholder(height: 18, width: 100),
|
ShimmerPlaceholder(height: 18, width: 100),
|
||||||
Spacer(),
|
Spacer(),
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ class _SplashState extends State<Splash> {
|
||||||
_isGettingThemeData = false;
|
_isGettingThemeData = false;
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
await AppInitializer.setupServices();
|
await AppInitializer.setupServices(context);
|
||||||
final userProvider = context.read<UserProvider>();
|
final userProvider = context.read<UserProvider>();
|
||||||
final String? token = await userProvider.setAndGetToken();
|
final String? token = await userProvider.setAndGetToken();
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
|
|
|
||||||
|
|
@ -70,9 +70,12 @@ class DidvanButton extends StatelessWidget {
|
||||||
|
|
||||||
Widget? _childBuilder(Color color, context) {
|
Widget? _childBuilder(Color color, context) {
|
||||||
if (title != null) {
|
if (title != null) {
|
||||||
return DidvanText(
|
return FittedBox(
|
||||||
title!,
|
fit: BoxFit.scaleDown,
|
||||||
color: enabled ? color : Theme.of(context).colorScheme.disabledText,
|
child: DidvanText(
|
||||||
|
title!,
|
||||||
|
color: enabled ? color : Theme.of(context).colorScheme.disabledText,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -160,11 +160,7 @@ class _DidvanPageViewState extends State<DidvanPageView> {
|
||||||
i < item.relatedContents.length;
|
i < item.relatedContents.length;
|
||||||
i++)
|
i++)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(
|
padding: const EdgeInsets.only(bottom: 8),
|
||||||
bottom: 8,
|
|
||||||
left: 16,
|
|
||||||
right: 16,
|
|
||||||
),
|
|
||||||
child: MultitypeOverview(
|
child: MultitypeOverview(
|
||||||
item: item.relatedContents[i],
|
item: item.relatedContents[i],
|
||||||
onMarkChanged: (id, value) {},
|
onMarkChanged: (id, value) {},
|
||||||
|
|
|
||||||
26
pubspec.lock
26
pubspec.lock
|
|
@ -168,7 +168,7 @@ packages:
|
||||||
name: ffi
|
name: ffi
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.1"
|
||||||
file:
|
file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -182,42 +182,42 @@ packages:
|
||||||
name: firebase_core
|
name: firebase_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.17.1"
|
version: "1.18.0"
|
||||||
firebase_core_platform_interface:
|
firebase_core_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_core_platform_interface
|
name: firebase_core_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.4.0"
|
version: "4.4.1"
|
||||||
firebase_core_web:
|
firebase_core_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_core_web
|
name: firebase_core_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.4"
|
version: "1.6.5"
|
||||||
firebase_messaging:
|
firebase_messaging:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging
|
name: firebase_messaging
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "11.4.1"
|
version: "11.4.2"
|
||||||
firebase_messaging_platform_interface:
|
firebase_messaging_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging_platform_interface
|
name: firebase_messaging_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.5.1"
|
version: "3.5.2"
|
||||||
firebase_messaging_web:
|
firebase_messaging_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_messaging_web
|
name: firebase_messaging_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.1"
|
version: "2.4.2"
|
||||||
fl_chart:
|
fl_chart:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -250,7 +250,7 @@ packages:
|
||||||
name: flutter_html
|
name: flutter_html
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0-alpha.3"
|
version: "3.0.0-alpha.5"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
|
@ -405,7 +405,7 @@ packages:
|
||||||
name: image_picker_android
|
name: image_picker_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.5"
|
version: "0.8.5+1"
|
||||||
image_picker_for_web:
|
image_picker_for_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -524,14 +524,14 @@ packages:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.14"
|
version: "2.0.15"
|
||||||
path_provider_ios:
|
path_provider_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_ios
|
name: path_provider_ios
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.9"
|
version: "2.0.10"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -830,14 +830,14 @@ packages:
|
||||||
name: url_launcher_platform_interface
|
name: url_launcher_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.5"
|
version: "2.1.0"
|
||||||
url_launcher_web:
|
url_launcher_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.11"
|
version: "2.0.12"
|
||||||
url_launcher_windows:
|
url_launcher_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 2.2.1+19
|
version: 2.2.2+20
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.17.0 <3.0.0"
|
sdk: ">=2.17.0 <3.0.0"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue