D1APP-99 studio progress
This commit is contained in:
parent
628ebbe271
commit
e1ea7630f5
|
|
@ -88,6 +88,8 @@ PODS:
|
||||||
- TOCropViewController (2.6.1)
|
- TOCropViewController (2.6.1)
|
||||||
- url_launcher_ios (0.0.1):
|
- url_launcher_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- webview_flutter_wkwebview (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
|
|
@ -103,6 +105,7 @@ DEPENDENCIES:
|
||||||
- record (from `.symlinks/plugins/record/ios`)
|
- record (from `.symlinks/plugins/record/ios`)
|
||||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
|
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
|
|
@ -145,6 +148,8 @@ EXTERNAL SOURCES:
|
||||||
:path: ".symlinks/plugins/sqflite/ios"
|
:path: ".symlinks/plugins/sqflite/ios"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
|
webview_flutter_wkwebview:
|
||||||
|
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
|
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
|
||||||
|
|
@ -171,6 +176,7 @@ SPEC CHECKSUMS:
|
||||||
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
||||||
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
||||||
url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af
|
url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af
|
||||||
|
webview_flutter_wkwebview: 005fbd90c888a42c5690919a1527ecc6649e1162
|
||||||
|
|
||||||
PODFILE CHECKSUM: fe0e1ee7f3d1f7d00b11b474b62dd62134535aea
|
PODFILE CHECKSUM: fe0e1ee7f3d1f7d00b11b474b62dd62134535aea
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,9 @@
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/config/theme_data.dart';
|
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
|
||||||
import 'package:didvan/models/studio_details_data.dart';
|
|
||||||
import 'package:didvan/models/view/app_bar_data.dart';
|
import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
import 'package:didvan/services/media/media.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:didvan/views/home/widgets/audio/audio_slider.dart';
|
|
||||||
import 'package:didvan/views/home/widgets/bookmark_button.dart';
|
|
||||||
import 'package:didvan/views/widgets/didvan/icon_button.dart';
|
|
||||||
import 'package:didvan/views/widgets/didvan/scaffold.dart';
|
import 'package:didvan/views/widgets/didvan/scaffold.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
|
||||||
import 'package:didvan/views/widgets/ink_wrapper.dart';
|
|
||||||
import 'package:didvan/views/widgets/skeleton_image.dart';
|
|
||||||
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
@ -117,6 +107,7 @@ class _StudioDetailsState extends State<StudioDetails> {
|
||||||
child: Stack(
|
child: Stack(
|
||||||
children: [
|
children: [
|
||||||
WebView(
|
WebView(
|
||||||
|
allowsInlineMediaPlayback: true,
|
||||||
initialUrl: Uri.dataFromString(
|
initialUrl: Uri.dataFromString(
|
||||||
'''
|
'''
|
||||||
<html>
|
<html>
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,19 @@ class StudioDetailsState extends CoreProvier {
|
||||||
final List<StudioDetailsData?> studios = [];
|
final List<StudioDetailsData?> studios = [];
|
||||||
late int initialIndex;
|
late int initialIndex;
|
||||||
late StudioRequestArgs args;
|
late StudioRequestArgs args;
|
||||||
|
int _selectedDetailsIndex = 0;
|
||||||
bool isFetchingNewItem = false;
|
bool isFetchingNewItem = false;
|
||||||
final List<int> relatedQueue = [];
|
final List<int> relatedQueue = [];
|
||||||
|
|
||||||
int _currentIndex = 0;
|
int _currentIndex = 0;
|
||||||
int get currentIndex => _currentIndex;
|
int get currentIndex => _currentIndex;
|
||||||
|
|
||||||
|
int get selectedDetailsIndex => _selectedDetailsIndex;
|
||||||
|
set selectedDetailsIndex(int value) {
|
||||||
|
_selectedDetailsIndex = value;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
StudioDetailsData get currentStudio {
|
StudioDetailsData get currentStudio {
|
||||||
try {
|
try {
|
||||||
return studios[_currentIndex]!;
|
return studios[_currentIndex]!;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
import 'package:didvan/config/theme_data.dart';
|
||||||
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
|
import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart';
|
||||||
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
|
import 'package:didvan/views/widgets/state_handlers/state_handler.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class StudioDetailsWidget extends StatelessWidget {
|
||||||
|
const StudioDetailsWidget({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Consumer<StudioDetailsState>(
|
||||||
|
builder: (context, state, child) => StateHandler<StudioDetailsState>(
|
||||||
|
onRetry: () {},
|
||||||
|
state: state,
|
||||||
|
builder: (context, state) => Container(
|
||||||
|
color: Theme.of(context).colorScheme.surface,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
children: [
|
||||||
|
_TabItem(
|
||||||
|
icon: DidvanIcons.description_solid,
|
||||||
|
title: 'توضیحات',
|
||||||
|
onTap: () => state.selectedDetailsIndex = 0,
|
||||||
|
isSelected: state.selectedDetailsIndex == 0,
|
||||||
|
),
|
||||||
|
_TabItem(
|
||||||
|
icon: DidvanIcons.chats_solid,
|
||||||
|
title: 'نظرات',
|
||||||
|
onTap: () => state.selectedDetailsIndex = 1,
|
||||||
|
isSelected: state.selectedDetailsIndex == 1,
|
||||||
|
),
|
||||||
|
_TabItem(
|
||||||
|
icon: DidvanIcons.puzzle_solid,
|
||||||
|
title: 'مطالب مرتبط',
|
||||||
|
onTap: () => state.selectedDetailsIndex = 2,
|
||||||
|
isSelected: state.selectedDetailsIndex == 2,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TabItem extends StatelessWidget {
|
||||||
|
final IconData icon;
|
||||||
|
final String title;
|
||||||
|
final VoidCallback onTap;
|
||||||
|
final bool isSelected;
|
||||||
|
const _TabItem({
|
||||||
|
Key? key,
|
||||||
|
required this.icon,
|
||||||
|
required this.title,
|
||||||
|
required this.onTap,
|
||||||
|
required this.isSelected,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
Color? _color(context) =>
|
||||||
|
isSelected ? Theme.of(context).colorScheme.focusedBorder : null;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: onTap,
|
||||||
|
child: Container(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
icon,
|
||||||
|
color: _color(context),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: 64,
|
||||||
|
height: 1,
|
||||||
|
color: _color(context),
|
||||||
|
),
|
||||||
|
DidvanText(
|
||||||
|
title,
|
||||||
|
color: _color(context),
|
||||||
|
style: Theme.of(context).textTheme.caption,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -104,11 +104,6 @@ class AudioPlayerWidget extends StatelessWidget {
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
DidvanIconButton(
|
|
||||||
size: 32,
|
|
||||||
icon: DidvanIcons.angle_down_regular,
|
|
||||||
onPressed: Navigator.of(context).pop,
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,9 @@
|
||||||
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';
|
||||||
import 'package:didvan/models/view/action_sheet_data.dart';
|
|
||||||
import 'package:didvan/routes/routes.dart';
|
|
||||||
import 'package:didvan/services/media/media.dart';
|
import 'package:didvan/services/media/media.dart';
|
||||||
import 'package:didvan/utils/action_sheet.dart';
|
|
||||||
import 'package:didvan/views/home/studio/studio_details/studio_details.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:didvan/views/home/studio/studio_state.dart';
|
import 'package:didvan/views/home/studio/studio_details/widgets/studio_details.dart';
|
||||||
import 'package:didvan/views/home/widgets/audio/audio_player_widget.dart';
|
import 'package:didvan/views/home/widgets/audio/audio_player_widget.dart';
|
||||||
import 'package:didvan/views/home/widgets/audio/audio_slider.dart';
|
import 'package:didvan/views/home/widgets/audio/audio_slider.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/icon_button.dart';
|
import 'package:didvan/views/widgets/didvan/icon_button.dart';
|
||||||
|
|
@ -180,6 +176,8 @@ class DidvanBNB extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _showPlayerBottomSheet(BuildContext context) {
|
void _showPlayerBottomSheet(BuildContext context) {
|
||||||
|
final sheetKey = GlobalKey<ExpandableBottomSheetState>();
|
||||||
|
bool isExpanded = false;
|
||||||
final detailsState = context.read<StudioDetailsState>();
|
final detailsState = context.read<StudioDetailsState>();
|
||||||
showModalBottomSheet(
|
showModalBottomSheet(
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
|
|
@ -188,17 +186,39 @@ class DidvanBNB extends StatelessWidget {
|
||||||
builder: (context) => ChangeNotifierProvider<StudioDetailsState>.value(
|
builder: (context) => ChangeNotifierProvider<StudioDetailsState>.value(
|
||||||
value: detailsState,
|
value: detailsState,
|
||||||
child: ExpandableBottomSheet(
|
child: ExpandableBottomSheet(
|
||||||
background: Container(),
|
key: sheetKey,
|
||||||
persistentHeader: AudioPlayerWidget(
|
background: const SizedBox(),
|
||||||
podcast: MediaService.currentPodcast!,
|
persistentHeader: Column(
|
||||||
),
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
expandableContent: Container(
|
children: [
|
||||||
height: 300,
|
AudioPlayerWidget(
|
||||||
width: double.infinity,
|
podcast: MediaService.currentPodcast!,
|
||||||
color: Theme.of(context).colorScheme.surface,
|
),
|
||||||
alignment: Alignment.center,
|
Container(
|
||||||
child: const DidvanText('!Under Construction'),
|
width: MediaQuery.of(context).size.width,
|
||||||
|
color: Theme.of(context).colorScheme.surface,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
DidvanIconButton(
|
||||||
|
size: 32,
|
||||||
|
icon: DidvanIcons.angle_down_regular,
|
||||||
|
onPressed: () {
|
||||||
|
if (!isExpanded) {
|
||||||
|
sheetKey.currentState?.expand();
|
||||||
|
isExpanded = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isExpanded = false;
|
||||||
|
sheetKey.currentState?.contract();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
|
expandableContent: const StudioDetailsWidget(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
import 'package:didvan/models/overview_data.dart';
|
import 'package:didvan/models/overview_data.dart';
|
||||||
import 'package:didvan/models/requests/studio.dart';
|
import 'package:didvan/models/requests/studio.dart';
|
||||||
import 'package:didvan/routes/routes.dart';
|
|
||||||
import 'package:didvan/services/media/media.dart';
|
|
||||||
import 'package:didvan/utils/date_time.dart';
|
import 'package:didvan/utils/date_time.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:didvan/views/home/widgets/bookmark_button.dart';
|
import 'package:didvan/views/home/widgets/bookmark_button.dart';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue