Merge branch 'main' into product
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:glassmorphism/glassmorphism.dart';
|
||||
import 'package:traderscircuit/Utils/Common/MainController.dart';
|
||||
|
||||
@@ -19,13 +16,13 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
borderGradient: LinearGradient(
|
||||
borderGradient: const LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
@@ -36,18 +33,18 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
child: BottomNavigationBar(
|
||||
// backgroundColor: ,
|
||||
type: BottomNavigationBarType.fixed,
|
||||
backgroundColor: Color(0xFFFFFFFF).withOpacity(0),
|
||||
backgroundColor: const Color(0xFFFFFFFF).withOpacity(0),
|
||||
showUnselectedLabels: true,
|
||||
selectedItemColor: Colors.white,
|
||||
unselectedItemColor: Color(0xFF676767),
|
||||
unselectedItemColor: const Color(0xFF676767),
|
||||
unselectedLabelStyle: TextStyle(
|
||||
fontSize: 10.sp,
|
||||
color: Color(0xFF676767),
|
||||
color: const Color(0xFF676767),
|
||||
fontWeight: FontWeight.w400,
|
||||
fontFamily: 'hiragino'),
|
||||
selectedLabelStyle: TextStyle(
|
||||
fontSize: 10.sp,
|
||||
color: Color(0xFFFFFFFF),
|
||||
color: const Color(0xFFFFFFFF),
|
||||
fontWeight: FontWeight.w400,
|
||||
fontFamily: 'hiragino'),
|
||||
currentIndex: _mainController.selectedIndex.value,
|
||||
@@ -78,7 +75,7 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
color: Colors.grey.withOpacity(0.4),
|
||||
spreadRadius: 15,
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, 10),
|
||||
offset: const Offset(0, 10),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -121,7 +118,7 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
color: Colors.grey.withOpacity(0.4),
|
||||
spreadRadius: 15,
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, 10),
|
||||
offset: const Offset(0, 10),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -163,7 +160,7 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
color: Colors.grey.withOpacity(0.4),
|
||||
spreadRadius: 15,
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, 10),
|
||||
offset: const Offset(0, 10),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -205,7 +202,7 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
color: Colors.grey.withOpacity(0.4),
|
||||
spreadRadius: 15,
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, 10),
|
||||
offset: const Offset(0, 10),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -94,6 +94,7 @@ class _CustomTextFormFieldState extends State<CustomTextFormField> {
|
||||
obscureText: obscureText,
|
||||
controller: widget.textEditingController,
|
||||
decoration: InputDecoration(
|
||||
hintStyle: TextStyle(color: Colors.white),
|
||||
hintText: widget.hintText,
|
||||
prefixIconColor: widget.prefixIconColor,
|
||||
// ignore: prefer_null_aware_operators
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/HomeScreen.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/PastPerformance.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/Portfolio/Holdings.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/Portfolio/PortfolioEmpty.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/ShortTrade.dart';
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:glassmorphism/glassmorphism.dart';
|
||||
|
||||
Widget commonGlassContainer(
|
||||
@@ -19,14 +18,14 @@ Widget commonGlassContainer(
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
],
|
||||
),
|
||||
borderGradient: LinearGradient(
|
||||
borderGradient: const LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
|
||||
class NoInternet extends StatefulWidget {
|
||||
const NoInternet({super.key});
|
||||
|
||||
@@ -49,6 +49,8 @@ class ApiUrls {
|
||||
"${base}getContentByteCategories";
|
||||
static String getContentBytesApi = "${base}getContentBytes";
|
||||
static String morevideoApi = "${base}get-content-bytes-of-videos";
|
||||
static String getPreviousReadApi = "${base}get-previous-reads-of-user";
|
||||
static String storeReadCountApi = "${base}store-content-byte-read-click";
|
||||
|
||||
//Profile
|
||||
static String Getprofile = "${base}getuserDetails";
|
||||
|
||||
@@ -3,9 +3,10 @@ import 'dart:io';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/model/ContactUsModel/contact_us_cat_model.dart';
|
||||
import 'package:traderscircuit/model/ContactUsModel/contact_us_model.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import 'package:timeago/timeago.dart' as timeago;
|
||||
import '../model/ContactUsModel/ticket_details_model.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class ContactUsController extends GetxController {
|
||||
RxBool isLoading = true.obs;
|
||||
@@ -29,11 +30,23 @@ class ContactUsController extends GetxController {
|
||||
|
||||
RxString selectedValue = "".obs;
|
||||
|
||||
//formated date
|
||||
String formatedDateTimeMethod(String originalDateTimeString) {
|
||||
DateTime dateTime = DateTime.parse(originalDateTimeString);
|
||||
|
||||
return DateFormat("dd MMM yyyy, hh:mm a").format(dateTime.toLocal());
|
||||
}
|
||||
|
||||
// RxList<dynamic> contactUsDetailsChatContent = [].obs;
|
||||
|
||||
String timeAgoConverter(String originalDateTimeString) {
|
||||
DateTime dateTime = DateTime.parse(originalDateTimeString);
|
||||
|
||||
// Get the difference in days
|
||||
DateTime now = DateTime.now();
|
||||
int differenceInDays = now.difference(dateTime).inDays;
|
||||
|
||||
// Convert to "2 days ago" format
|
||||
return timeago.format(now.subtract(Duration(days: differenceInDays)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:just_audio/just_audio.dart';
|
||||
import 'package:traderscircuit/Utils/base_manager.dart';
|
||||
import 'package:traderscircuit/model/ContentBytesModel/content_bytes_categories_model.dart';
|
||||
import 'package:traderscircuit/model/ContentBytesModel/content_bytes_model.dart';
|
||||
import 'package:traderscircuit/view_model/ContentBytesApi/content_bytes_api.dart';
|
||||
|
||||
import '../model/ContentBytesModel/previous_read_user_model.dart';
|
||||
import '../view/Sidemenu/ContentByte/ContentBytes.dart';
|
||||
|
||||
class ContentBytesController extends GetxController {
|
||||
@@ -13,12 +14,15 @@ class ContentBytesController extends GetxController {
|
||||
ContentBytesCategoriesModel contentBytesCategoriesModel =
|
||||
ContentBytesCategoriesModel();
|
||||
ContentBytesModel contentBytesModel = ContentBytesModel();
|
||||
|
||||
PreviousReadOfUserModel previousReadOfUserModel = PreviousReadOfUserModel();
|
||||
int filterId = 0;
|
||||
RxBool isApiCalling = true.obs;
|
||||
RxBool isAudioSeekBarVisible = false.obs;
|
||||
RxInt indexForAudios = 0.obs;
|
||||
RxBool titlePlaying = false.obs;
|
||||
RxList<bool>? titlePlayingList = <bool>[].obs;
|
||||
bool isAudioInitialize = false;
|
||||
|
||||
final progressNotifier = ValueNotifier<ProgressBarState>(
|
||||
ProgressBarState(
|
||||
@@ -29,22 +33,21 @@ class ContentBytesController extends GetxController {
|
||||
);
|
||||
final buttonNotifier = ValueNotifier<ButtonState>(ButtonState.paused);
|
||||
|
||||
late AudioPlayer _audioPlayer;
|
||||
late AudioPlayer audioPlayer;
|
||||
@override
|
||||
void dispose() {
|
||||
_audioPlayer.stop();
|
||||
audioPlayer.stop();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void getAudio() => _audioPlayer;
|
||||
|
||||
void init(index) async {
|
||||
_audioPlayer = AudioPlayer();
|
||||
audioPlayer = AudioPlayer();
|
||||
isAudioInitialize = true;
|
||||
indexForAudios.value = index;
|
||||
try {
|
||||
await _audioPlayer.setUrl(
|
||||
//contentBytesModel.data!.audio![index].file ??
|
||||
'https://ghantalele.com/uploads/files/data-78/38825/Besharam%20Rang_192(Ghantalele.com).mp3');
|
||||
// await _audioPlayer.setAsset(url);
|
||||
log(index.toString());
|
||||
await audioPlayer.setUrl(contentBytesModel.data!.audio![index].link!);
|
||||
// await audioPlayer.setAsset(url);
|
||||
} on PlayerException catch (e) {
|
||||
print("Error code: ${e.code}");
|
||||
// iOS/macOS: maps to NSError.localizedDescription
|
||||
@@ -54,7 +57,7 @@ class ContentBytesController extends GetxController {
|
||||
print("Error message: ${e.message}");
|
||||
}
|
||||
//Catching errors during playback (e.g. lost network connection)
|
||||
_audioPlayer.playbackEventStream.listen((event) {},
|
||||
audioPlayer.playbackEventStream.listen((event) {},
|
||||
onError: (Object e, StackTrace st) {
|
||||
if (e is PlayerException) {
|
||||
print('Error code: ${e.code}');
|
||||
@@ -64,7 +67,7 @@ class ContentBytesController extends GetxController {
|
||||
}
|
||||
});
|
||||
|
||||
_audioPlayer.playerStateStream.listen((playerState) {
|
||||
audioPlayer.playerStateStream.listen((playerState) {
|
||||
final isPlaying = playerState.playing;
|
||||
final processingState = playerState.processingState;
|
||||
if (!isPlaying) {
|
||||
@@ -74,12 +77,12 @@ class ContentBytesController extends GetxController {
|
||||
} else {
|
||||
_playNextTrack();
|
||||
|
||||
// _audioPlayer.seek(Duration.zero);
|
||||
// _audioPlayer.pause();
|
||||
// audioPlayer.seek(Duration.zero);
|
||||
// audioPlayer.pause();
|
||||
}
|
||||
});
|
||||
|
||||
_audioPlayer.positionStream.listen((position) {
|
||||
audioPlayer.positionStream.listen((position) {
|
||||
final oldState = progressNotifier.value;
|
||||
progressNotifier.value = ProgressBarState(
|
||||
current: position,
|
||||
@@ -88,7 +91,7 @@ class ContentBytesController extends GetxController {
|
||||
);
|
||||
});
|
||||
|
||||
_audioPlayer.bufferedPositionStream.listen((bufferedPosition) {
|
||||
audioPlayer.bufferedPositionStream.listen((bufferedPosition) {
|
||||
final oldState = progressNotifier.value;
|
||||
progressNotifier.value = ProgressBarState(
|
||||
current: oldState.current,
|
||||
@@ -97,7 +100,7 @@ class ContentBytesController extends GetxController {
|
||||
);
|
||||
});
|
||||
|
||||
_audioPlayer.durationStream.listen((totalDuration) {
|
||||
audioPlayer.durationStream.listen((totalDuration) {
|
||||
final oldState = progressNotifier.value;
|
||||
progressNotifier.value = ProgressBarState(
|
||||
current: oldState.current,
|
||||
@@ -120,8 +123,8 @@ class ContentBytesController extends GetxController {
|
||||
init(nextIndex);
|
||||
play(nextIndex);
|
||||
} else {
|
||||
_audioPlayer.seek(Duration.zero);
|
||||
_audioPlayer.pause();
|
||||
audioPlayer.seek(Duration.zero);
|
||||
audioPlayer.pause();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,26 +143,26 @@ class ContentBytesController extends GetxController {
|
||||
}
|
||||
|
||||
void play(index) {
|
||||
_audioPlayer.play();
|
||||
audioPlayer.play();
|
||||
isAudioSeekBarVisible.value = false;
|
||||
isAudioSeekBarVisible.value = true;
|
||||
indexForAudios.value = index;
|
||||
}
|
||||
|
||||
void pause() {
|
||||
_audioPlayer.pause();
|
||||
audioPlayer.pause();
|
||||
}
|
||||
|
||||
void seek(Duration position) {
|
||||
_audioPlayer.seek(position);
|
||||
audioPlayer.seek(position);
|
||||
}
|
||||
|
||||
void stop() {
|
||||
_audioPlayer.stop();
|
||||
audioPlayer.stop();
|
||||
}
|
||||
|
||||
bool isPlaying() {
|
||||
return _audioPlayer.playing;
|
||||
return audioPlayer.playing;
|
||||
}
|
||||
|
||||
addTitles() {
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/model/ProductsModel/call_recommendations_model.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class ProductsController extends GetxController {
|
||||
RxBool isLoaded = true.obs;
|
||||
CallRecommendationsModel swingTradeModel = CallRecommendationsModel();
|
||||
CallRecommendationsModel multibaggerModel = CallRecommendationsModel();
|
||||
CallRecommendationsModel optionModel = CallRecommendationsModel();
|
||||
|
||||
final selectedIndex = 0.obs;
|
||||
String dateConverterMethod(String dateV) {
|
||||
DateTime dateTime = DateTime.parse(dateV);
|
||||
DateTime newDateTime = DateTime(dateTime.year, 3, 25);
|
||||
return DateFormat("dd MMMM yyyy").format(newDateTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:traderscircuit/Utils/utils.dart';
|
||||
import '../../Utils/base_manager.dart';
|
||||
import 'base_api_services.dart';
|
||||
|
||||
class NetworkApiServices {
|
||||
Dio dio = Dio();
|
||||
|
||||
@@ -29,8 +29,16 @@ class Data {
|
||||
List<Video>? video;
|
||||
List<Audio>? audio;
|
||||
List<Read>? read;
|
||||
List<NewReleaseAudio>? newReleaseAudio;
|
||||
List<MostReads>? mostReads;
|
||||
|
||||
Data({this.video, this.audio, this.read});
|
||||
Data({
|
||||
this.video,
|
||||
this.audio,
|
||||
this.read,
|
||||
this.newReleaseAudio,
|
||||
this.mostReads,
|
||||
});
|
||||
|
||||
Data.fromJson(Map<String, dynamic> json) {
|
||||
if (json['video'] != null) {
|
||||
@@ -51,6 +59,18 @@ class Data {
|
||||
read!.add(Read.fromJson(v));
|
||||
});
|
||||
}
|
||||
if (json['new_release_audio'] != null) {
|
||||
newReleaseAudio = <NewReleaseAudio>[];
|
||||
json['new_release_audio'].forEach((v) {
|
||||
newReleaseAudio!.add(NewReleaseAudio.fromJson(v));
|
||||
});
|
||||
}
|
||||
if (json['most_reads'] != null) {
|
||||
mostReads = <MostReads>[];
|
||||
json['most_reads'].forEach((v) {
|
||||
mostReads!.add(MostReads.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
@@ -64,6 +84,144 @@ class Data {
|
||||
if (read != null) {
|
||||
data['read'] = read!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
if (newReleaseAudio != null) {
|
||||
data['new_release_audio'] =
|
||||
newReleaseAudio!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
if (mostReads != null) {
|
||||
data['most_reads'] = mostReads!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class MostReads {
|
||||
int? id;
|
||||
int? contentByteReadXid;
|
||||
int? clickCount;
|
||||
int? isActive;
|
||||
String? createdAt;
|
||||
ContentByteData? contentByteData;
|
||||
|
||||
MostReads(
|
||||
{this.id,
|
||||
this.contentByteReadXid,
|
||||
this.clickCount,
|
||||
this.isActive,
|
||||
this.createdAt,
|
||||
this.contentByteData});
|
||||
|
||||
MostReads.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
contentByteReadXid = json['content_byte_read_xid'];
|
||||
clickCount = json['click_count'];
|
||||
isActive = json['is_active'];
|
||||
createdAt = json['created_at'];
|
||||
contentByteData = json['content_byte_data'] != null
|
||||
? ContentByteData.fromJson(json['content_byte_data'])
|
||||
: null;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['content_byte_read_xid'] = contentByteReadXid;
|
||||
data['click_count'] = clickCount;
|
||||
data['is_active'] = isActive;
|
||||
data['created_at'] = createdAt;
|
||||
if (contentByteData != null) {
|
||||
data['content_byte_data'] = contentByteData!.toJson();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class ContentByteData {
|
||||
int? id;
|
||||
String? title;
|
||||
String? file;
|
||||
int? categoryId;
|
||||
String? image;
|
||||
String? isActive;
|
||||
String? createdAt;
|
||||
|
||||
ContentByteData(
|
||||
{this.id,
|
||||
this.title,
|
||||
this.file,
|
||||
this.categoryId,
|
||||
this.image,
|
||||
this.isActive,
|
||||
this.createdAt});
|
||||
|
||||
ContentByteData.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
title = json['title'];
|
||||
file = json['file'];
|
||||
categoryId = json['category_id'];
|
||||
image = json['image'];
|
||||
isActive = json['is_active'];
|
||||
createdAt = json['created_at'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['title'] = title;
|
||||
data['file'] = file;
|
||||
data['category_id'] = categoryId;
|
||||
data['image'] = image;
|
||||
data['is_active'] = isActive;
|
||||
data['created_at'] = createdAt;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class NewReleaseAudio {
|
||||
int? id;
|
||||
String? title;
|
||||
String? file;
|
||||
int? categoryId;
|
||||
String? image;
|
||||
String? isActive;
|
||||
String? createdAt;
|
||||
String? formattedCreatedAt;
|
||||
String? fullCreatedAt;
|
||||
|
||||
NewReleaseAudio(
|
||||
{this.id,
|
||||
this.title,
|
||||
this.file,
|
||||
this.categoryId,
|
||||
this.image,
|
||||
this.isActive,
|
||||
this.createdAt,
|
||||
this.formattedCreatedAt,
|
||||
this.fullCreatedAt});
|
||||
|
||||
NewReleaseAudio.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
title = json['title'];
|
||||
file = json['file'];
|
||||
categoryId = json['category_id'];
|
||||
image = json['image'];
|
||||
isActive = json['is_active'];
|
||||
createdAt = json['created_at'];
|
||||
formattedCreatedAt = json['formatted_created_at'];
|
||||
fullCreatedAt = json['full_created_at'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['title'] = title;
|
||||
data['file'] = file;
|
||||
data['category_id'] = categoryId;
|
||||
data['image'] = image;
|
||||
data['is_active'] = isActive;
|
||||
data['created_at'] = createdAt;
|
||||
data['formatted_created_at'] = formattedCreatedAt;
|
||||
data['full_created_at'] = fullCreatedAt;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@@ -77,6 +235,8 @@ class Video {
|
||||
String? file;
|
||||
int? categoryId;
|
||||
String? image;
|
||||
String? createdAt;
|
||||
String? link;
|
||||
String? isActive;
|
||||
|
||||
Video({
|
||||
@@ -86,6 +246,8 @@ class Video {
|
||||
this.description,
|
||||
this.tags,
|
||||
this.file,
|
||||
this.createdAt,
|
||||
this.link,
|
||||
this.categoryId,
|
||||
this.image,
|
||||
this.isActive,
|
||||
@@ -95,7 +257,9 @@ class Video {
|
||||
id = json['id'];
|
||||
contentType = json['content_type'];
|
||||
title = json['title'];
|
||||
link = json["link"];
|
||||
description = json['description'];
|
||||
createdAt = json['created_at'];
|
||||
tags = json['tags'];
|
||||
file = json['file'];
|
||||
categoryId = json['category_id'];
|
||||
@@ -126,6 +290,7 @@ class Audio {
|
||||
String? description;
|
||||
String? tags;
|
||||
String? file;
|
||||
String? link;
|
||||
int? categoryId;
|
||||
String? image;
|
||||
String? isActive;
|
||||
@@ -138,6 +303,7 @@ class Audio {
|
||||
this.tags,
|
||||
this.file,
|
||||
this.categoryId,
|
||||
this.link,
|
||||
this.image,
|
||||
this.isActive,
|
||||
});
|
||||
@@ -148,6 +314,7 @@ class Audio {
|
||||
title = json['title'];
|
||||
description = json['description'];
|
||||
tags = json['tags'];
|
||||
link = json['link'];
|
||||
file = json['file'];
|
||||
categoryId = json['category_id'];
|
||||
image = json['image'];
|
||||
|
||||
110
lib/model/ContentBytesModel/previous_read_user_model.dart
Normal file
110
lib/model/ContentBytesModel/previous_read_user_model.dart
Normal file
@@ -0,0 +1,110 @@
|
||||
class PreviousReadOfUserModel {
|
||||
String? status;
|
||||
int? statusCode;
|
||||
String? message;
|
||||
List<Data>? data;
|
||||
|
||||
PreviousReadOfUserModel(
|
||||
{this.status, this.statusCode, this.message, this.data});
|
||||
|
||||
PreviousReadOfUserModel.fromJson(Map<String, dynamic> json) {
|
||||
status = json['status'];
|
||||
statusCode = json['status_code'];
|
||||
message = json['message'];
|
||||
if (json['data'] != null) {
|
||||
data = <Data>[];
|
||||
json['data'].forEach((v) {
|
||||
data!.add(Data.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['status'] = status;
|
||||
data['status_code'] = statusCode;
|
||||
data['message'] = message;
|
||||
if (this.data != null) {
|
||||
data['data'] = this.data!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Data {
|
||||
int? id;
|
||||
int? contentByteReadXid;
|
||||
int? iamPrincipalXid;
|
||||
String? readAt;
|
||||
ContentByteData? contentByteData;
|
||||
|
||||
Data(
|
||||
{this.id,
|
||||
this.contentByteReadXid,
|
||||
this.iamPrincipalXid,
|
||||
this.readAt,
|
||||
this.contentByteData});
|
||||
|
||||
Data.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
contentByteReadXid = json['content_byte_read_xid'];
|
||||
iamPrincipalXid = json['iam_principal_xid'];
|
||||
readAt = json['read_at'];
|
||||
contentByteData = json['content_byte_data'] != null
|
||||
? ContentByteData.fromJson(json['content_byte_data'])
|
||||
: null;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['content_byte_read_xid'] = contentByteReadXid;
|
||||
data['iam_principal_xid'] = iamPrincipalXid;
|
||||
data['read_at'] = readAt;
|
||||
if (contentByteData != null) {
|
||||
data['content_byte_data'] = contentByteData!.toJson();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class ContentByteData {
|
||||
int? id;
|
||||
String? title;
|
||||
String? file;
|
||||
int? categoryId;
|
||||
String? image;
|
||||
String? isActive;
|
||||
String? createdAt;
|
||||
|
||||
ContentByteData(
|
||||
{this.id,
|
||||
this.title,
|
||||
this.file,
|
||||
this.categoryId,
|
||||
this.image,
|
||||
this.isActive,
|
||||
this.createdAt});
|
||||
|
||||
ContentByteData.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
title = json['title'];
|
||||
file = json['file'];
|
||||
categoryId = json['category_id'];
|
||||
image = json['image'];
|
||||
isActive = json['is_active'];
|
||||
createdAt = json['created_at'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['title'] = title;
|
||||
data['file'] = file;
|
||||
data['category_id'] = categoryId;
|
||||
data['image'] = image;
|
||||
data['is_active'] = isActive;
|
||||
data['created_at'] = createdAt;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class FAQModel {
|
||||
String? status;
|
||||
int? statusCode;
|
||||
|
||||
@@ -68,14 +68,16 @@ class ActiveCalls {
|
||||
String? stockImage;
|
||||
String? qty;
|
||||
String? duration;
|
||||
int? currentPrice;
|
||||
int? buyPrice;
|
||||
int? targetPrice;
|
||||
int? stopLoss;
|
||||
String? currentPrice;
|
||||
String? buyPrice;
|
||||
String? targetPrice;
|
||||
String? stopLoss;
|
||||
int? isSendRecommendationNow;
|
||||
Null? scheduleDateTime;
|
||||
String? createdAt;
|
||||
ProductData? productData;
|
||||
int? optionTypeXid;
|
||||
ProductTypeData? productTypeData;
|
||||
ActionData? optionTypeData;
|
||||
ActionData? actionData;
|
||||
|
||||
ActiveCalls(
|
||||
@@ -94,7 +96,9 @@ class ActiveCalls {
|
||||
this.isSendRecommendationNow,
|
||||
this.scheduleDateTime,
|
||||
this.createdAt,
|
||||
this.productData,
|
||||
this.optionTypeXid,
|
||||
this.productTypeData,
|
||||
this.optionTypeData,
|
||||
this.actionData});
|
||||
|
||||
ActiveCalls.fromJson(Map<String, dynamic> json) {
|
||||
@@ -112,9 +116,13 @@ class ActiveCalls {
|
||||
stopLoss = json['stop_loss'];
|
||||
isSendRecommendationNow = json['is_send_recommendation_now'];
|
||||
scheduleDateTime = json['schedule_date_time'];
|
||||
optionTypeXid = json['option_type_xid'];
|
||||
createdAt = json['created_at'];
|
||||
productData = json['product_data'] != null
|
||||
? ProductData.fromJson(json['product_data'])
|
||||
productTypeData = json['product_type_data'] != null
|
||||
? ProductTypeData.fromJson(json['product_type_data'])
|
||||
: null;
|
||||
optionTypeData = json['option_type_data'] != null
|
||||
? ActionData.fromJson(json['option_type_data'])
|
||||
: null;
|
||||
actionData = json['action_data'] != null
|
||||
? ActionData.fromJson(json['action_data'])
|
||||
@@ -138,8 +146,11 @@ class ActiveCalls {
|
||||
data['is_send_recommendation_now'] = isSendRecommendationNow;
|
||||
data['schedule_date_time'] = scheduleDateTime;
|
||||
data['created_at'] = createdAt;
|
||||
if (productData != null) {
|
||||
data['product_data'] = productData!.toJson();
|
||||
if (productTypeData != null) {
|
||||
data['product_type_data'] = productTypeData!.toJson();
|
||||
}
|
||||
if (optionTypeData != null) {
|
||||
data['option_type_data'] = optionTypeData!.toJson();
|
||||
}
|
||||
if (actionData != null) {
|
||||
data['action_data'] = actionData!.toJson();
|
||||
@@ -148,15 +159,15 @@ class ActiveCalls {
|
||||
}
|
||||
}
|
||||
|
||||
class ProductData {
|
||||
class ProductTypeData {
|
||||
int? id;
|
||||
String? productName;
|
||||
int? isActive;
|
||||
String? isActive;
|
||||
String? createdAt;
|
||||
|
||||
ProductData({this.id, this.productName, this.isActive, this.createdAt});
|
||||
ProductTypeData({this.id, this.productName, this.isActive, this.createdAt});
|
||||
|
||||
ProductData.fromJson(Map<String, dynamic> json) {
|
||||
ProductTypeData.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
productName = json['product_name'];
|
||||
isActive = json['is_active'];
|
||||
|
||||
@@ -10,7 +10,11 @@ import 'package:traderscircuit/Utils/Common/CommonTabBar.dart';
|
||||
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
|
||||
import 'package:traderscircuit/model/HomeModel/home_model.dart';
|
||||
|
||||
import 'package:traderscircuit/controller/products_controller.dart';
|
||||
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/ContentByte/PlayerWidget.dart';
|
||||
@@ -30,10 +34,14 @@ class HomeScreen extends StatefulWidget {
|
||||
class _HomeScreenState extends State<HomeScreen> {
|
||||
GlobalKey<ScaffoldState> _scaffoldKey1 = GlobalKey<ScaffoldState>();
|
||||
RxString userName = "User".obs;
|
||||
|
||||
HomeModel homeModel = HomeModel();
|
||||
|
||||
RxBool isApiCalling = true.obs;
|
||||
|
||||
ProductsController productsController = Get.put(ProductsController());
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
GetProfile().GetProfileAPI().then((value) {
|
||||
@@ -103,6 +111,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
: ListView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
children: [
|
||||
|
||||
sizedBoxHeight(20.h),
|
||||
Obx(
|
||||
() => Text(
|
||||
@@ -113,6 +122,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
fontFamily: 'hiragino',
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
SingleChildScrollView(
|
||||
|
||||
@@ -11,6 +11,7 @@ import 'package:traderscircuit/Utils/Common/commonBotton.dart';
|
||||
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/controller/contact_us_controller.dart';
|
||||
import 'package:traderscircuit/controller/products_controller.dart';
|
||||
import 'package:traderscircuit/model/ProductsModel/call_recommendations_model.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
|
||||
@@ -28,7 +29,6 @@ class ShortTrade extends StatefulWidget {
|
||||
class _ShortTradeState extends State<ShortTrade> {
|
||||
GlobalKey<ScaffoldState> _scaffoldKey1 = GlobalKey<ScaffoldState>();
|
||||
List<String> containerTexts = ["Swing Trade", "Multibagger", "Options"];
|
||||
final selectedIndex = 0.obs;
|
||||
ProductsController productsController = Get.put(ProductsController());
|
||||
|
||||
@override
|
||||
@@ -129,7 +129,8 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
itemBuilder: (context, index) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
selectedIndex.value = index;
|
||||
productsController.selectedIndex.value =
|
||||
index;
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
@@ -155,27 +156,35 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
children: [
|
||||
MyTabBar(),
|
||||
SizedBox(
|
||||
height: 700.h,
|
||||
height: 0.57.sh,
|
||||
child: TabBarView(
|
||||
children: [
|
||||
ActiveCallsTab(
|
||||
selectedIndex.value == 0
|
||||
ActiveCallsTab(productsController
|
||||
.selectedIndex.value ==
|
||||
0
|
||||
? productsController
|
||||
.swingTradeModel
|
||||
: productsController
|
||||
.selectedIndex
|
||||
.value ==
|
||||
1
|
||||
? productsController
|
||||
.swingTradeModel
|
||||
: selectedIndex.value == 1
|
||||
? productsController
|
||||
.multibaggerModel
|
||||
: productsController
|
||||
.optionModel),
|
||||
ExitedCallsTab(
|
||||
selectedIndex.value == 0
|
||||
.multibaggerModel
|
||||
: productsController
|
||||
.optionModel),
|
||||
ExitedCallsTab(productsController
|
||||
.selectedIndex.value ==
|
||||
0
|
||||
? productsController
|
||||
.swingTradeModel
|
||||
: productsController
|
||||
.selectedIndex
|
||||
.value ==
|
||||
1
|
||||
? productsController
|
||||
.swingTradeModel
|
||||
: selectedIndex.value == 1
|
||||
? productsController
|
||||
.multibaggerModel
|
||||
: productsController
|
||||
.optionModel),
|
||||
.multibaggerModel
|
||||
: productsController
|
||||
.optionModel),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -245,7 +254,7 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
itemBuilder: (ctx, index) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(top: 20.h, bottom: 5.h),
|
||||
child: selectedIndex.value == 0
|
||||
child: productsController.selectedIndex.value == 0
|
||||
? cardSwingWidget(
|
||||
image: callRecommendationsModel
|
||||
.data!.activeCalls![index].stockImage!,
|
||||
@@ -261,8 +270,12 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
action: callRecommendationsModel
|
||||
.data!.activeCalls![index].actionData!.name!,
|
||||
)
|
||||
: selectedIndex.value == 1
|
||||
: productsController.selectedIndex.value == 1
|
||||
? cardMultibaggerWidget(
|
||||
image: callRecommendationsModel
|
||||
.data!.activeCalls![index].stockImage!,
|
||||
action: callRecommendationsModel
|
||||
.data!.activeCalls![index].actionData!.name!,
|
||||
text: callRecommendationsModel
|
||||
.data!.activeCalls![index].stockName!,
|
||||
price:
|
||||
@@ -270,14 +283,33 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
date: callRecommendationsModel
|
||||
.data!.activeCalls![index].createdAt!,
|
||||
returns:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].stopLoss}",
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].targetPrice}",
|
||||
stoploss:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].stopLoss}",
|
||||
duration: callRecommendationsModel
|
||||
.data!.activeCalls![index].duration!,
|
||||
pdfname: "Download Pdf",
|
||||
)
|
||||
: SizedBox(),
|
||||
: cardOptionWidget(
|
||||
image: callRecommendationsModel
|
||||
.data!.activeCalls![index].stockImage!,
|
||||
action: callRecommendationsModel
|
||||
.data!.activeCalls![index].actionData!.name!,
|
||||
text: callRecommendationsModel
|
||||
.data!.activeCalls![index].stockName!,
|
||||
optiontype: callRecommendationsModel.data!
|
||||
.activeCalls![index].optionTypeData!.name!,
|
||||
price:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].buyPrice}",
|
||||
date: callRecommendationsModel
|
||||
.data!.activeCalls![index].createdAt!,
|
||||
premium:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].stopLoss}",
|
||||
price1:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].targetPrice}",
|
||||
stoploss:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].stopLoss}",
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -319,175 +351,77 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
}
|
||||
|
||||
Widget ExitedCallsTab(CallRecommendationsModel callRecommendationsModel) {
|
||||
List<Map<String, String>> cardSwing = [
|
||||
{
|
||||
'text': 'Indiabulls Housing Finance Ltd',
|
||||
'amount': '₹ 196.50 - ₹ 197',
|
||||
'targetamount': '₹ 204',
|
||||
'stoploss': '₹ 190',
|
||||
'time': '4-5 Days',
|
||||
},
|
||||
{
|
||||
'text': 'Indiabulls Housing Finance Ltd',
|
||||
'amount': '₹ 196.50 - ₹ 197',
|
||||
'targetamount': '₹ 204',
|
||||
'stoploss': '₹ 190',
|
||||
'time': '4-5 Days',
|
||||
},
|
||||
{
|
||||
'text': 'Indiabulls Housing Finance Ltd',
|
||||
'amount': '₹ 196.50 - ₹ 197',
|
||||
'targetamount': '₹ 204',
|
||||
'stoploss': '₹ 190',
|
||||
'time': '4-5 Days',
|
||||
},
|
||||
];
|
||||
|
||||
List<Map<String, String>> cardMultibagger = [
|
||||
{
|
||||
'text': 'TATA MOTORS',
|
||||
'price': '₹ 453 - ₹234',
|
||||
'date': '25 March 2024',
|
||||
'returns': '103%',
|
||||
'stoploss': '₹ 198',
|
||||
'duration': '271 Days',
|
||||
'pdfname': 'Download Pdf'
|
||||
},
|
||||
{
|
||||
'text': 'TATA MOTORS',
|
||||
'price': '₹ 453 - ₹234',
|
||||
'date': '25 March 2024',
|
||||
'returns': '103%',
|
||||
'stoploss': '₹ 198',
|
||||
'duration': '271 Days',
|
||||
'pdfname': 'Download Pdf'
|
||||
},
|
||||
{
|
||||
'text': 'TATA MOTORS',
|
||||
'price': '₹ 453 - ₹234',
|
||||
'date': '25 March 2024',
|
||||
'returns': '103%',
|
||||
'stoploss': '₹ 198',
|
||||
'duration': '271 Days',
|
||||
'pdfname': 'Download Pdf'
|
||||
},
|
||||
];
|
||||
|
||||
List<Map<String, String>> cardOptionsbagger = [
|
||||
{
|
||||
'text': 'NIFTY/ BANK NIFTY',
|
||||
'optiontype': 'Call',
|
||||
'price': '₹ 46500',
|
||||
'date': '6th Mar',
|
||||
'premium': 'Buy above₹ 690',
|
||||
'price1': '₹ 740',
|
||||
'price2': '₹ 780',
|
||||
'stoploss': '₹ 645',
|
||||
},
|
||||
{
|
||||
'text': 'NIFTY/ BANK NIFTY',
|
||||
'optiontype': 'Call',
|
||||
'price': '₹ 46500',
|
||||
'date': '6th Mar',
|
||||
'premium': 'Buy above₹ 690',
|
||||
'price1': '₹ 740',
|
||||
'price2': '₹ 780',
|
||||
'stoploss': '₹ 645',
|
||||
},
|
||||
{
|
||||
'text': 'NIFTY/ BANK NIFTY',
|
||||
'optiontype': 'Call',
|
||||
'price': '₹ 46500',
|
||||
'date': '6th Mar',
|
||||
'premium': 'Buy above₹ 690',
|
||||
'price1': '₹ 740',
|
||||
'price2': '₹ 780',
|
||||
'stoploss': '₹ 645',
|
||||
},
|
||||
];
|
||||
|
||||
return SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
sizedBoxHeight(20.h),
|
||||
Obx(() {
|
||||
return selectedIndex.value == 0
|
||||
? callRecommendationsModel.data!.exitedCalls!.isEmpty
|
||||
? Center(
|
||||
child: Column(
|
||||
children: [
|
||||
const Gap(200),
|
||||
text22W600("No Data Available !"),
|
||||
],
|
||||
))
|
||||
: ListView.builder(
|
||||
itemCount:
|
||||
callRecommendationsModel.data!.exitedCalls!.length,
|
||||
itemBuilder: (ctx, index) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(top: 20.h, bottom: 5.h),
|
||||
child: cardSwingWidget(
|
||||
image: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockImage!,
|
||||
text: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockName!,
|
||||
amount: '₹ 196.50 - ₹ 197',
|
||||
targetamount:
|
||||
'₹ ${callRecommendationsModel.data!.exitedCalls![index].targetPrice}',
|
||||
stoploss:
|
||||
'₹ ${callRecommendationsModel.data!.exitedCalls![index].stopLoss}',
|
||||
time:
|
||||
'${callRecommendationsModel.data!.exitedCalls![index].duration}',
|
||||
action: callRecommendationsModel
|
||||
.data!.exitedCalls![index].actionData!.name!,
|
||||
),
|
||||
);
|
||||
})
|
||||
: selectedIndex == 1
|
||||
? Column(
|
||||
children:
|
||||
List.generate(cardMultibagger.length, (index) {
|
||||
return Column(
|
||||
children: [
|
||||
cardMultibaggerWidget(
|
||||
text: cardMultibagger[index]['text']!,
|
||||
price: cardMultibagger[index]['price']!,
|
||||
date: cardMultibagger[index]['date']!,
|
||||
returns: cardMultibagger[index]['returns']!,
|
||||
stoploss: cardMultibagger[index]['stoploss']!,
|
||||
duration: cardMultibagger[index]['duration']!,
|
||||
pdfname: cardMultibagger[index]['pdfname']!),
|
||||
sizedBoxHeight(20.h)
|
||||
],
|
||||
);
|
||||
}),
|
||||
return callRecommendationsModel.data!.exitedCalls!.isEmpty
|
||||
? Center(
|
||||
child: Column(
|
||||
children: [
|
||||
const Gap(200),
|
||||
text22W600("No Data Available !"),
|
||||
],
|
||||
))
|
||||
: ListView.builder(
|
||||
itemCount: callRecommendationsModel.data!.exitedCalls!.length,
|
||||
itemBuilder: (ctx, index) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(top: 20.h, bottom: 5.h),
|
||||
child: productsController.selectedIndex.value == 0
|
||||
? cardSwingWidget(
|
||||
image: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockImage!,
|
||||
text: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockName!,
|
||||
amount: '₹ 196.50 - ₹ 197',
|
||||
targetamount:
|
||||
'₹ ${callRecommendationsModel.data!.exitedCalls![index].targetPrice}',
|
||||
stoploss:
|
||||
'₹ ${callRecommendationsModel.data!.exitedCalls![index].stopLoss}',
|
||||
time:
|
||||
'${callRecommendationsModel.data!.exitedCalls![index].duration}',
|
||||
action: callRecommendationsModel
|
||||
.data!.exitedCalls![index].actionData!.name!,
|
||||
)
|
||||
: Column(
|
||||
children:
|
||||
List.generate(cardMultibagger.length, (index) {
|
||||
return Column(
|
||||
children: [
|
||||
cardOptionWidget(
|
||||
text: cardOptionsbagger[index]['text']!,
|
||||
optiontype: cardOptionsbagger[index]
|
||||
['optiontype']!,
|
||||
price: cardOptionsbagger[index]['price']!,
|
||||
date: cardOptionsbagger[index]['date']!,
|
||||
premium: cardOptionsbagger[index]['premium']!,
|
||||
price1: cardOptionsbagger[index]['price1']!,
|
||||
price2: cardOptionsbagger[index]['price2']!,
|
||||
stoploss: cardOptionsbagger[index]
|
||||
['stoploss']!),
|
||||
sizedBoxHeight(20.h)
|
||||
],
|
||||
);
|
||||
}),
|
||||
);
|
||||
}),
|
||||
sizedBoxHeight(200.h)
|
||||
],
|
||||
),
|
||||
);
|
||||
: productsController.selectedIndex.value == 1
|
||||
? cardMultibaggerWidget(
|
||||
image: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockImage!,
|
||||
action: callRecommendationsModel
|
||||
.data!.exitedCalls![index].actionData!.name!,
|
||||
text: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockName!,
|
||||
price:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].buyPrice}",
|
||||
date: callRecommendationsModel
|
||||
.data!.exitedCalls![index].createdAt!,
|
||||
returns:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].targetPrice}",
|
||||
stoploss:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].stopLoss}",
|
||||
duration: callRecommendationsModel
|
||||
.data!.exitedCalls![index].duration!,
|
||||
pdfname: "Download Pdf",
|
||||
)
|
||||
: cardOptionWidget(
|
||||
image: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockImage!,
|
||||
action: callRecommendationsModel
|
||||
.data!.exitedCalls![index].actionData!.name!,
|
||||
text: callRecommendationsModel
|
||||
.data!.exitedCalls![index].stockName!,
|
||||
optiontype: callRecommendationsModel.data!
|
||||
.exitedCalls![index].optionTypeData!.name!,
|
||||
price:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].buyPrice}",
|
||||
date: callRecommendationsModel
|
||||
.data!.exitedCalls![index].createdAt!,
|
||||
premium:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].stopLoss}",
|
||||
price1:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].targetPrice}",
|
||||
stoploss:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].stopLoss}",
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Widget cardOptionWidget({
|
||||
@@ -497,9 +431,11 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
required String date,
|
||||
required String premium,
|
||||
required String price1,
|
||||
required String price2,
|
||||
required String stoploss,
|
||||
required String action,
|
||||
required String image,
|
||||
}) {
|
||||
ContactUsController contactUsController = Get.put(ContactUsController());
|
||||
return commonGlassContainer(
|
||||
width: double.infinity,
|
||||
height: 400.h,
|
||||
@@ -534,8 +470,8 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
],
|
||||
),
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/Group 1000004495.png',
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: image,
|
||||
width: 26.w,
|
||||
height: 23.h,
|
||||
),
|
||||
@@ -549,9 +485,11 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
height: 25.h,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(4.r),
|
||||
color: const Color(0xFFFFAD31),
|
||||
color: action == "Buy"
|
||||
? const Color(0xFF00FF19)
|
||||
: const Color(0xFFFFAD31),
|
||||
),
|
||||
child: Center(child: text14W600_1B1B1B('Hold')),
|
||||
child: Center(child: text14W600_1B1B1B(action)),
|
||||
)
|
||||
],
|
||||
),
|
||||
@@ -596,7 +534,10 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
children: [
|
||||
text14W400_979797('Expiry Date'),
|
||||
sizedBoxHeight(5.h),
|
||||
SizedBox(width: 150.w, child: text15W600(date))
|
||||
SizedBox(
|
||||
width: 150.w,
|
||||
child: text15W600(contactUsController
|
||||
.formatedDateTimeMethod(date)))
|
||||
],
|
||||
),
|
||||
sizedBoxWidth(30.w),
|
||||
@@ -616,7 +557,7 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text14W400_979797('Target Price 01'),
|
||||
text14W400_979797('Target Price'),
|
||||
sizedBoxHeight(5.h),
|
||||
SizedBox(width: 150.w, child: text15W600(price1))
|
||||
],
|
||||
@@ -625,22 +566,13 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text14W400_979797('Target Price 01'),
|
||||
text14W400_979797('Stop Loss'),
|
||||
sizedBoxHeight(5.h),
|
||||
text15W600(price2)
|
||||
text15W600(stoploss)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(15.h),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text14W400_979797('Stop Loss'),
|
||||
sizedBoxHeight(5.h),
|
||||
text15W600(stoploss)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
@@ -657,6 +589,8 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
required String stoploss,
|
||||
required String duration,
|
||||
required String pdfname,
|
||||
required String action,
|
||||
required String image,
|
||||
}) {
|
||||
return commonGlassContainer(
|
||||
width: double.infinity,
|
||||
@@ -692,8 +626,8 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
],
|
||||
),
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/TATAMOTORS.NS_BIG 1.png',
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: image,
|
||||
width: 26.w,
|
||||
height: 23.h,
|
||||
),
|
||||
@@ -707,9 +641,11 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
height: 25.h,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(4.r),
|
||||
color: const Color(0xFFFFAD31),
|
||||
color: action == "Buy"
|
||||
? const Color(0xFF00FF19)
|
||||
: const Color(0xFFFFAD31),
|
||||
),
|
||||
child: Center(child: text14W600_1B1B1B('Hold')),
|
||||
child: Center(child: text14W600_1B1B1B(action)),
|
||||
)
|
||||
],
|
||||
),
|
||||
@@ -742,7 +678,7 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
width: 130.w,
|
||||
child: text14W400_979797('Date of recommendation')),
|
||||
sizedBoxHeight(5.h),
|
||||
text15W600(date)
|
||||
text15W600(productsController.dateConverterMethod(date))
|
||||
],
|
||||
)
|
||||
],
|
||||
@@ -753,10 +689,9 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text14W400_979797('% Return'),
|
||||
text14W400_979797('Target Price'),
|
||||
sizedBoxHeight(5.h),
|
||||
SizedBox(
|
||||
width: 150.w, child: text15W600_00FF19(returns))
|
||||
SizedBox(width: 150.w, child: text15W600(returns))
|
||||
],
|
||||
),
|
||||
sizedBoxWidth(30.w),
|
||||
@@ -782,23 +717,23 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
],
|
||||
),
|
||||
sizedBoxWidth(30.w),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text14W400_979797('Report'),
|
||||
sizedBoxHeight(5.h),
|
||||
Row(
|
||||
children: [
|
||||
Image.asset(
|
||||
'assets/images/png/pdf.png',
|
||||
height: 20.h,
|
||||
width: 20.w,
|
||||
),
|
||||
text15W600(pdfname),
|
||||
],
|
||||
)
|
||||
],
|
||||
)
|
||||
// Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
// children: [
|
||||
// text14W400_979797('Report'),
|
||||
// sizedBoxHeight(5.h),
|
||||
// Row(
|
||||
// children: [
|
||||
// Image.asset(
|
||||
// 'assets/images/png/pdf.png',
|
||||
// height: 20.h,
|
||||
// width: 20.w,
|
||||
// ),
|
||||
// text15W600(pdfname),
|
||||
// ],
|
||||
// )
|
||||
// ],
|
||||
// )
|
||||
],
|
||||
),
|
||||
],
|
||||
@@ -934,7 +869,7 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
|
||||
Widget topContainer(String text, int index) {
|
||||
return Obx(() {
|
||||
return selectedIndex.value == index
|
||||
return productsController.selectedIndex.value == index
|
||||
? Container(
|
||||
height: 40.h,
|
||||
width: 126.w,
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
import 'dart:developer';
|
||||
import 'package:audio_video_progress_bar/audio_video_progress_bar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart';
|
||||
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/controller/content_bytes_controller.dart';
|
||||
import 'package:traderscircuit/model/ContentBytesModel/content_bytes_model.dart';
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/ContentByte/PlayerWidget.dart';
|
||||
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
|
||||
import 'package:traderscircuit/view_model/ContentBytesApi/content_bytes_api.dart';
|
||||
|
||||
import '../../../Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'ContentBytes.dart';
|
||||
|
||||
class AudioMore extends StatefulWidget {
|
||||
const AudioMore({super.key});
|
||||
|
||||
@@ -29,7 +29,7 @@ class _VideosMoreState extends State<AudioMore> {
|
||||
var data;
|
||||
RxBool isLoading = false.obs;
|
||||
|
||||
TextEditingController searchControllera = TextEditingController();
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -55,146 +55,286 @@ class _VideosMoreState extends State<AudioMore> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: const CommonAppbar(
|
||||
titleTxt: "Audio",
|
||||
),
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Obx(
|
||||
() => Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
isLoading.value
|
||||
? const Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: Color(0xFF9A0000),
|
||||
),
|
||||
)
|
||||
: Stack(
|
||||
return PopScope(
|
||||
canPop: true,
|
||||
onPopInvoked: (didPop) {
|
||||
if (contentBytesController.isAudioInitialize) {
|
||||
contentBytesController.isAudioSeekBarVisible.value = false;
|
||||
contentBytesController.pause();
|
||||
contentBytesController.stop();
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
|
||||
floatingActionButton: Obx(
|
||||
() => contentBytesController.isAudioSeekBarVisible.value
|
||||
? commonGlassContainer(
|
||||
borderradius: 8,
|
||||
width: Get.size.width,
|
||||
height: 100,
|
||||
customWidget: Row(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16, vertical: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text16W400_DADADA('The Beauty and Power of Audios'),
|
||||
sizedBoxHeight(8.w),
|
||||
Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 295.w,
|
||||
child: TextField(
|
||||
controller: searchControllera,
|
||||
onChanged: (value) {
|
||||
// Call method to handle search
|
||||
handleSearch(value, "");
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
prefixIcon: Icon(Icons.search),
|
||||
hintText: 'Search videos',
|
||||
border: OutlineInputBorder(),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 12.w,
|
||||
),
|
||||
filter(),
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(20.h),
|
||||
GridView.builder(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
gridDelegate:
|
||||
const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
mainAxisExtent: 172,
|
||||
crossAxisCount:
|
||||
2, // number of items in each row
|
||||
mainAxisSpacing: 8.0, // spacing between rows
|
||||
crossAxisSpacing:
|
||||
8.0, // spacing between columns
|
||||
),
|
||||
|
||||
itemCount: contentBytesController
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: Align(
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
child: Image.network(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio!
|
||||
.length, // total number of items
|
||||
itemBuilder: (context, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
contentBytesController.init(0);
|
||||
contentBytesController
|
||||
.isAudioSeekBarVisible.value = true;
|
||||
//https://actions.google.com/sounds/v1/horror/aggressive_zombie_snarls.ogg
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF)
|
||||
.withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
0.1,
|
||||
1,
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Image.network(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio![index]
|
||||
.image!,
|
||||
),
|
||||
Positioned(
|
||||
bottom: 5,
|
||||
left: 5,
|
||||
child: Row(
|
||||
children: [
|
||||
CircleAvatar(
|
||||
radius: 18.sp,
|
||||
child: const Icon(
|
||||
Icons.headphones),
|
||||
),
|
||||
SizedBox(
|
||||
width: 5.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 125.w,
|
||||
child: text14W500(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio![index]
|
||||
.title!),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
.audio![contentBytesController
|
||||
.indexForAudios.value]
|
||||
.image!,
|
||||
width: 57,
|
||||
height: 57,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 3,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio![contentBytesController
|
||||
.indexForAudios.value]
|
||||
.title!,
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.white,
|
||||
fontFamily: 'hiragino',
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.5,
|
||||
),
|
||||
),
|
||||
// SizedBox(height: 5),
|
||||
Text(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio![contentBytesController
|
||||
.indexForAudios.value]
|
||||
.description!,
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.white,
|
||||
fontFamily: 'hiragino',
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.5,
|
||||
),
|
||||
),
|
||||
ValueListenableBuilder<ProgressBarState>(
|
||||
valueListenable:
|
||||
contentBytesController.progressNotifier,
|
||||
builder: (context, value, _) {
|
||||
return ProgressBar(
|
||||
progress: value.current,
|
||||
buffered: value.buffered,
|
||||
total: value.total,
|
||||
onSeek: contentBytesController.seek,
|
||||
barHeight: 4,
|
||||
thumbRadius: 6,
|
||||
thumbGlowRadius: 15,
|
||||
timeLabelTextStyle: const TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
thumbColor: Colors.white,
|
||||
baseBarColor: Colors.white.withOpacity(0.3),
|
||||
progressBarColor: Colors.white,
|
||||
bufferedBarColor:
|
||||
Colors.white.withOpacity(0.3),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: ValueListenableBuilder<ButtonState>(
|
||||
valueListenable:
|
||||
contentBytesController.buttonNotifier,
|
||||
builder: (context, value, _) {
|
||||
switch (value) {
|
||||
case ButtonState.paused:
|
||||
return IconButton(
|
||||
icon: const Icon(
|
||||
Icons.play_arrow_rounded,
|
||||
color: Colors.white,
|
||||
),
|
||||
iconSize: 50.0,
|
||||
onPressed: () => contentBytesController.play(
|
||||
contentBytesController
|
||||
.indexForAudios.value),
|
||||
);
|
||||
case ButtonState.playing:
|
||||
return IconButton(
|
||||
icon: const Icon(Icons.pause,
|
||||
color: Colors.white),
|
||||
iconSize: 50.0,
|
||||
onPressed: contentBytesController.pause,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
: Container(),
|
||||
),
|
||||
appBar: const CommonAppbar(
|
||||
titleTxt: "Audio",
|
||||
),
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Obx(
|
||||
() => Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
isLoading.value
|
||||
? const Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: Color(0xFF9A0000),
|
||||
),
|
||||
)
|
||||
: Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16, vertical: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text16W400_DADADA(
|
||||
'The Beauty and Power of Audios'),
|
||||
sizedBoxHeight(8.w),
|
||||
Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 295.w,
|
||||
child: CustomTextFormField(
|
||||
textEditingController: searchController,
|
||||
onInput: (value) {
|
||||
// Call method to handle search
|
||||
handleSearch(value, "");
|
||||
},
|
||||
hintText: "Search Audio",
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 12.w,
|
||||
),
|
||||
filter(),
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(20.h),
|
||||
GridView.builder(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
gridDelegate:
|
||||
const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
mainAxisExtent: 172,
|
||||
crossAxisCount:
|
||||
2, // number of items in each row
|
||||
mainAxisSpacing: 8.0, // spacing between rows
|
||||
crossAxisSpacing:
|
||||
8.0, // spacing between columns
|
||||
),
|
||||
|
||||
itemCount: contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio!
|
||||
.length, // total number of items
|
||||
itemBuilder: (context, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
if (contentBytesController
|
||||
.isAudioInitialize) {
|
||||
contentBytesController
|
||||
.isAudioSeekBarVisible
|
||||
.value = false;
|
||||
contentBytesController.pause();
|
||||
contentBytesController.stop();
|
||||
}
|
||||
contentBytesController.init(index);
|
||||
contentBytesController
|
||||
.isAudioSeekBarVisible.value = true;
|
||||
//https://actions.google.com/sounds/v1/horror/aggressive_zombie_snarls.ogg
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF)
|
||||
.withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Image.network(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio![index]
|
||||
.image!,
|
||||
),
|
||||
Positioned(
|
||||
bottom: 5,
|
||||
left: 5,
|
||||
child: Row(
|
||||
children: [
|
||||
CircleAvatar(
|
||||
radius: 18.sp,
|
||||
child: const Icon(
|
||||
Icons.headphones),
|
||||
),
|
||||
SizedBox(
|
||||
width: 5.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 125.w,
|
||||
child: text14W500(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.audio![index]
|
||||
.title!),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -237,7 +377,7 @@ class _VideosMoreState extends State<AudioMore> {
|
||||
.data![index]
|
||||
.id!;
|
||||
log(contentBytesController.filterId.toString());
|
||||
handleSearch(searchControllera.text,
|
||||
handleSearch(searchController.text,
|
||||
contentBytesController.filterId.toString());
|
||||
},
|
||||
child: itemFilter(index));
|
||||
|
||||
@@ -6,13 +6,14 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
|
||||
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/controller/contact_us_controller.dart';
|
||||
import 'package:traderscircuit/controller/content_bytes_controller.dart';
|
||||
import 'package:traderscircuit/model/ContentBytesModel/content_bytes_categories_model.dart';
|
||||
import 'package:traderscircuit/model/ContentBytesModel/content_bytes_model.dart';
|
||||
import 'package:traderscircuit/model/ContentBytesModel/previous_read_user_model.dart';
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/ContentByte/PlayerWidget.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/ContentByte/read_pdf.dart';
|
||||
@@ -67,23 +68,36 @@ class _ContentBytesState extends State<ContentBytes> {
|
||||
ContentBytesApi().getContentBytesData("", "", "").then((value) {
|
||||
contentBytesController.contentBytesModel =
|
||||
ContentBytesModel.fromJson(value.data);
|
||||
contentBytesController.isApiCalling.value = false;
|
||||
setState(() {});
|
||||
ContentBytesApi().getPreviousReadData().then((value) {
|
||||
contentBytesController.previousReadOfUserModel =
|
||||
PreviousReadOfUserModel.fromJson(value.data);
|
||||
contentBytesController.isApiCalling.value = false;
|
||||
setState(() {});
|
||||
});
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
contentBytesController.stop();
|
||||
if (contentBytesController.isAudioInitialize) {
|
||||
contentBytesController.isAudioSeekBarVisible.value = false;
|
||||
contentBytesController.pause();
|
||||
contentBytesController.stop();
|
||||
}
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
return true;
|
||||
return PopScope(
|
||||
canPop: true,
|
||||
onPopInvoked: (didPop) {
|
||||
if (contentBytesController.isAudioInitialize) {
|
||||
contentBytesController.isAudioSeekBarVisible.value = false;
|
||||
contentBytesController.pause();
|
||||
contentBytesController.stop();
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
@@ -164,7 +178,7 @@ class _ContentBytesState extends State<ContentBytes> {
|
||||
barHeight: 4,
|
||||
thumbRadius: 6,
|
||||
thumbGlowRadius: 15,
|
||||
timeLabelTextStyle: TextStyle(
|
||||
timeLabelTextStyle: const TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
thumbColor: Colors.white,
|
||||
@@ -214,7 +228,67 @@ class _ContentBytesState extends State<ContentBytes> {
|
||||
),
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
appBar: const CommonAppbar(titleTxt: "Content Bytes"),
|
||||
appBar: PreferredSize(
|
||||
preferredSize: const Size.fromHeight(130),
|
||||
child: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
leadingWidth: 56.w,
|
||||
leading: Padding(
|
||||
padding: EdgeInsets.only(left: 16.w, top: 20.h),
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
if (contentBytesController.isAudioInitialize) {
|
||||
contentBytesController.isAudioSeekBarVisible.value = false;
|
||||
contentBytesController.pause();
|
||||
contentBytesController.stop();
|
||||
}
|
||||
Get.back();
|
||||
},
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(left: 8.w),
|
||||
child: Icon(
|
||||
Icons.arrow_back_ios,
|
||||
color: Colors.white,
|
||||
size: 25.r,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
flexibleSpace: FlexibleSpaceBar(
|
||||
centerTitle: false,
|
||||
titlePadding: const EdgeInsets.all(0),
|
||||
title: Padding(
|
||||
padding: EdgeInsets.only(left: 16.w, right: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
"Content Bytes",
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'hiragino'),
|
||||
maxLines: 2,
|
||||
softWrap: true,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// newTextfield(
|
||||
// FontWeight.w400, 0)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
@@ -243,7 +317,7 @@ class _ContentBytesState extends State<ContentBytes> {
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Videos(images: reels),
|
||||
Audios(),
|
||||
const Audios(),
|
||||
Reads(mostread: mostread),
|
||||
],
|
||||
),
|
||||
@@ -297,10 +371,10 @@ class _ReadsState extends State<Reads> {
|
||||
height: 35.h,
|
||||
width: 105.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
color: const Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
borderRadius: BorderRadius.circular(5.r),
|
||||
border: Border.all(
|
||||
color: Color(0xFF3A3A3A),
|
||||
color: const Color(0xFF3A3A3A),
|
||||
)),
|
||||
child: Center(
|
||||
child: text16W500('View More'),
|
||||
@@ -316,18 +390,23 @@ class _ReadsState extends State<Reads> {
|
||||
itemCount:
|
||||
contentBytesController.contentBytesModel.data!.read!.length,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (ctx, index) {
|
||||
return Column(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.to(ReadPDF(
|
||||
title: contentBytesController
|
||||
.contentBytesModel.data!.read![index].title,
|
||||
pdfUrfl: contentBytesController
|
||||
.contentBytesModel.data!.read![index].file,
|
||||
));
|
||||
ContentBytesApi()
|
||||
.updateReadCounts(contentBytesController
|
||||
.contentBytesModel.data!.read![index].id!)
|
||||
.then((value) {
|
||||
Get.to(ReadPDF(
|
||||
title: contentBytesController
|
||||
.contentBytesModel.data!.read![index].title,
|
||||
pdfUrfl: contentBytesController
|
||||
.contentBytesModel.data!.read![index].file,
|
||||
));
|
||||
});
|
||||
},
|
||||
child: commonGlassContainer(
|
||||
borderradius: 8,
|
||||
@@ -352,22 +431,17 @@ class _ReadsState extends State<Reads> {
|
||||
sizedBoxHeight(10.h),
|
||||
SizedBox(
|
||||
width: 230.w,
|
||||
height: 50,
|
||||
child: text16W400(
|
||||
'"${contentBytesController.contentBytesModel.data!.read![index].description}"'),
|
||||
),
|
||||
const Spacer()
|
||||
],
|
||||
),
|
||||
Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Image.network(
|
||||
"${contentBytesController.contentBytesModel.data!.read![index].image}",
|
||||
height: 110,
|
||||
),
|
||||
],
|
||||
)
|
||||
Image.network(
|
||||
"${contentBytesController.contentBytesModel.data!.read![index].image}",
|
||||
height: 110,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -376,117 +450,173 @@ class _ReadsState extends State<Reads> {
|
||||
],
|
||||
);
|
||||
}),
|
||||
// sizedBoxHeight(30.h),
|
||||
// text22W500("Most Read"),
|
||||
// sizedBoxHeight(25.h),
|
||||
// Container(
|
||||
// height: 220.h,
|
||||
// child: ListView.separated(
|
||||
// separatorBuilder: (context, index) {
|
||||
// return SizedBox(
|
||||
// width: 10.w,
|
||||
// );
|
||||
// },
|
||||
// scrollDirection: Axis.horizontal,
|
||||
// itemCount: 3,
|
||||
// itemBuilder: (context, index) {
|
||||
// return Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
// children: [
|
||||
// Container(
|
||||
// height: 216.h,
|
||||
// width: 150.w,
|
||||
// decoration: BoxDecoration(
|
||||
// gradient: LinearGradient(
|
||||
// begin: Alignment.topLeft,
|
||||
// end: Alignment.bottomRight,
|
||||
// colors: [
|
||||
// Colors.white.withOpacity(0.1),
|
||||
// const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
// ],
|
||||
// stops: [
|
||||
// 0.1,
|
||||
// 1,
|
||||
// ],
|
||||
// ),
|
||||
// borderRadius: BorderRadius.circular(8),
|
||||
// ),
|
||||
// child: Image.asset(mostread[index]),
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// ),
|
||||
// ),
|
||||
// sizedBoxHeight(30.h),
|
||||
// text22W500("Previous Read"),
|
||||
// sizedBoxHeight(20.h),
|
||||
// Container(
|
||||
// height: 90.h,
|
||||
// child: ListView.separated(
|
||||
// separatorBuilder: (context, index) {
|
||||
// return SizedBox(
|
||||
// width: 10.w,
|
||||
// );
|
||||
// },
|
||||
// scrollDirection: Axis.horizontal,
|
||||
// itemCount: 2,
|
||||
// itemBuilder: (context, index) {
|
||||
// return Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
// children: [
|
||||
// Container(
|
||||
// height: 85.h,
|
||||
// width: 230.w,
|
||||
// decoration: BoxDecoration(
|
||||
// gradient: LinearGradient(
|
||||
// begin: Alignment.topLeft,
|
||||
// end: Alignment.bottomRight,
|
||||
// colors: [
|
||||
// Colors.white.withOpacity(0.1),
|
||||
// const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
// ],
|
||||
// stops: [
|
||||
// 0.1,
|
||||
// 1,
|
||||
// ],
|
||||
// ),
|
||||
// borderRadius: BorderRadius.circular(8),
|
||||
// ),
|
||||
// child: Row(
|
||||
// // mainAxisAlignment:
|
||||
// // MainAxisAlignment.start,
|
||||
// children: [
|
||||
// const SizedBox(
|
||||
// width: 10,
|
||||
// ),
|
||||
// Image.asset(mostread[index]),
|
||||
// SizedBox(
|
||||
// width: 15.w,
|
||||
// ),
|
||||
// Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
// children: [
|
||||
// SizedBox(
|
||||
// width: 135.w,
|
||||
// child: text12W500("Stock Market Essentials"),
|
||||
// ),
|
||||
// SizedBox(
|
||||
// width: 130.w,
|
||||
// child: text10W300(
|
||||
// "A Comprehensive Guide to Understanding the Market"),
|
||||
// )
|
||||
// ],
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// ),
|
||||
// ),
|
||||
contentBytesController.contentBytesModel.data!.mostReads!.isEmpty
|
||||
? const SizedBox()
|
||||
: sizedBoxHeight(30.h),
|
||||
contentBytesController.contentBytesModel.data!.mostReads!.isEmpty
|
||||
? const SizedBox()
|
||||
: text22W500("Most Read"),
|
||||
contentBytesController.contentBytesModel.data!.mostReads!.isEmpty
|
||||
? const SizedBox()
|
||||
: sizedBoxHeight(25.h),
|
||||
contentBytesController.contentBytesModel.data!.mostReads!.isEmpty
|
||||
? const SizedBox()
|
||||
: SizedBox(
|
||||
height: 220.h,
|
||||
child: ListView.separated(
|
||||
separatorBuilder: (context, index) {
|
||||
return SizedBox(
|
||||
width: 10.w,
|
||||
);
|
||||
},
|
||||
scrollDirection: Axis.horizontal,
|
||||
itemCount: contentBytesController
|
||||
.contentBytesModel.data!.mostReads!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
ContentBytesApi()
|
||||
.updateReadCounts(contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.mostReads![index]
|
||||
.id!)
|
||||
.then((value) {
|
||||
Get.to(ReadPDF(
|
||||
title: contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.mostReads![index]
|
||||
.contentByteData!
|
||||
.title,
|
||||
pdfUrfl: contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.mostReads![index]
|
||||
.contentByteData!
|
||||
.file,
|
||||
));
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
height: 216.h,
|
||||
width: 150.w,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
0.1,
|
||||
1,
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Image.network(
|
||||
contentBytesController.contentBytesModel.data!
|
||||
.mostReads![index].contentByteData!.image!,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
contentBytesController.previousReadOfUserModel.data!.isEmpty
|
||||
? const SizedBox()
|
||||
: sizedBoxHeight(30.h),
|
||||
contentBytesController.previousReadOfUserModel.data!.isEmpty
|
||||
? const SizedBox()
|
||||
: text22W500("Previous Read"),
|
||||
contentBytesController.previousReadOfUserModel.data!.isEmpty
|
||||
? const SizedBox()
|
||||
: sizedBoxHeight(20.h),
|
||||
contentBytesController.previousReadOfUserModel.data!.isEmpty
|
||||
? const SizedBox()
|
||||
: SizedBox(
|
||||
height: 100.h,
|
||||
child: ListView.separated(
|
||||
separatorBuilder: (context, index) {
|
||||
return SizedBox(
|
||||
width: 10.w,
|
||||
);
|
||||
},
|
||||
scrollDirection: Axis.horizontal,
|
||||
itemCount: contentBytesController
|
||||
.previousReadOfUserModel.data!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
height: 100.h,
|
||||
width: 261.w,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
0.1,
|
||||
1,
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Row(
|
||||
// mainAxisAlignment:
|
||||
// MainAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Image.network(contentBytesController
|
||||
.previousReadOfUserModel
|
||||
.data![index]
|
||||
.contentByteData!
|
||||
.image!),
|
||||
SizedBox(
|
||||
width: 15.w,
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 135.w,
|
||||
child: text12W500(contentBytesController
|
||||
.previousReadOfUserModel
|
||||
.data![index]
|
||||
.contentByteData!
|
||||
.title!),
|
||||
),
|
||||
SizedBox(
|
||||
width: 130.w,
|
||||
child: text10W300(
|
||||
" contentBytesControlle",
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 50,
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -545,10 +675,10 @@ class _AudiosState extends State<Audios> {
|
||||
height: 35.h,
|
||||
width: 105.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
color: const Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
borderRadius: BorderRadius.circular(5.r),
|
||||
border: Border.all(
|
||||
color: Color(0xFF3A3A3A),
|
||||
color: const Color(0xFF3A3A3A),
|
||||
)),
|
||||
child: Center(
|
||||
child: text16W500('View More'),
|
||||
@@ -575,9 +705,14 @@ class _AudiosState extends State<Audios> {
|
||||
itemBuilder: (context, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
contentBytesController.init(0);
|
||||
if (contentBytesController.isAudioInitialize) {
|
||||
contentBytesController.isAudioSeekBarVisible.value = false;
|
||||
contentBytesController.pause();
|
||||
contentBytesController.stop();
|
||||
}
|
||||
contentBytesController.init(index);
|
||||
contentBytesController.isAudioSeekBarVisible.value = true;
|
||||
//https://actions.google.com/sounds/v1/horror/aggressive_zombie_snarls.ogg
|
||||
contentBytesController.indexForAudios.value = index;
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
@@ -630,86 +765,85 @@ class _AudiosState extends State<Audios> {
|
||||
);
|
||||
},
|
||||
),
|
||||
// SizedBox(
|
||||
// height: 20.h,
|
||||
// ),
|
||||
// text22W600("New Release"),
|
||||
// SizedBox(
|
||||
// height: 25.h,
|
||||
// ),
|
||||
// Container(
|
||||
// height: 250.h,
|
||||
// child: ListView.separated(
|
||||
// separatorBuilder: (context, index) {
|
||||
// return const SizedBox(
|
||||
// width: 10,
|
||||
// );
|
||||
// },
|
||||
// scrollDirection: Axis.horizontal,
|
||||
// itemCount:
|
||||
// contentBytesController.contentBytesModel.data!.audio!.length,
|
||||
// itemBuilder: (context, index) {
|
||||
// return Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
// children: [
|
||||
// Container(
|
||||
// height: 183.h,
|
||||
// width: 148.w,
|
||||
// decoration: BoxDecoration(
|
||||
// gradient: LinearGradient(
|
||||
// begin: Alignment.topLeft,
|
||||
// end: Alignment.bottomRight,
|
||||
// colors: [
|
||||
// Colors.white.withOpacity(0.1),
|
||||
// const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
// ],
|
||||
// stops: [
|
||||
// 0.1,
|
||||
// 1,
|
||||
// ],
|
||||
// ),
|
||||
// borderRadius: BorderRadius.circular(8),
|
||||
// ),
|
||||
// child: Stack(
|
||||
// children: [
|
||||
// Image.network(
|
||||
// contentBytesController
|
||||
// .contentBytesModel.data!.audio![index].image!,
|
||||
// ),
|
||||
// const Positioned(
|
||||
// right: 5,
|
||||
// top: 5,
|
||||
// child: CircleAvatar(
|
||||
// radius: 15,
|
||||
// child: Icon(
|
||||
// Icons.headphones,
|
||||
// size: 20,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// const SizedBox(
|
||||
// height: 10,
|
||||
// ),
|
||||
// Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
// children: [
|
||||
// SizedBox(
|
||||
// width: 148.w,
|
||||
// child: text14W500Overflow(
|
||||
// contentBytesController
|
||||
// .contentBytesModel.data!.audio![index].title!,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// )
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// ),
|
||||
// )
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
text22W600("New Release"),
|
||||
SizedBox(
|
||||
height: 25.h,
|
||||
),
|
||||
SizedBox(
|
||||
height: 250.h,
|
||||
child: ListView.separated(
|
||||
separatorBuilder: (context, index) {
|
||||
return const SizedBox(
|
||||
width: 10,
|
||||
);
|
||||
},
|
||||
scrollDirection: Axis.horizontal,
|
||||
itemCount: contentBytesController
|
||||
.contentBytesModel.data!.newReleaseAudio!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 148.w,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
0.1,
|
||||
1,
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Image.network(
|
||||
contentBytesController.contentBytesModel.data!
|
||||
.newReleaseAudio![index].image!,
|
||||
),
|
||||
const Positioned(
|
||||
right: 5,
|
||||
top: 5,
|
||||
child: CircleAvatar(
|
||||
radius: 15,
|
||||
child: Icon(
|
||||
Icons.headphones,
|
||||
size: 20,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 148.w,
|
||||
child: text14W500Overflow(
|
||||
contentBytesController.contentBytesModel.data!
|
||||
.newReleaseAudio![index].title!,
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -835,16 +969,17 @@ class _VideosState extends State<Videos> {
|
||||
}
|
||||
|
||||
Widget videoCard(Video video) {
|
||||
ContactUsController contactUsController = Get.put(ContactUsController());
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Get.to(() => const PlayerWidget(), arguments: {
|
||||
"video_url": video.file,
|
||||
"video_url": video.link,
|
||||
});
|
||||
},
|
||||
child: commonGlassContainer(
|
||||
borderradius: 8,
|
||||
width: double.infinity,
|
||||
height: 320.h,
|
||||
height: 340.h,
|
||||
customWidget: Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 10.w),
|
||||
child: Column(
|
||||
@@ -879,10 +1014,13 @@ class _VideosState extends State<Videos> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text18W500(video.title!),
|
||||
text16W400(video.description!),
|
||||
// sizedBoxHeight(10.h),
|
||||
//text12W400_979797('20k views . 2 days ago'),
|
||||
text12W400_979797('2 days ago'),
|
||||
SizedBox(
|
||||
width: 0.81.sw,
|
||||
height: 50,
|
||||
child: text16W400(video.description!,
|
||||
textOver: TextOverflow.ellipsis)),
|
||||
text12W400_979797(contactUsController
|
||||
.timeAgoConverter(video.createdAt!)),
|
||||
],
|
||||
)
|
||||
],
|
||||
@@ -929,10 +1067,10 @@ class _VideosState extends State<Videos> {
|
||||
height: 35.h,
|
||||
width: 105.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
color: const Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
borderRadius: BorderRadius.circular(5.r),
|
||||
border: Border.all(
|
||||
color: Color(0xFF3A3A3A),
|
||||
color: const Color(0xFF3A3A3A),
|
||||
)),
|
||||
child: Center(
|
||||
child: text16W500('View More'),
|
||||
@@ -1052,8 +1190,24 @@ class _VideosState extends State<Videos> {
|
||||
}
|
||||
}
|
||||
|
||||
class ContentTabBar extends StatelessWidget {
|
||||
class ContentTabBar extends StatefulWidget {
|
||||
@override
|
||||
State<ContentTabBar> createState() => _ContentTabBarState();
|
||||
}
|
||||
|
||||
class _ContentTabBarState extends State<ContentTabBar>
|
||||
with SingleTickerProviderStateMixin {
|
||||
// Set the desired height
|
||||
TabController? tabController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
tabController = TabController(length: 3, vsync: this);
|
||||
tabController!.addListener(() {
|
||||
print("${tabController!.index}");
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
@@ -30,7 +30,7 @@ class _VideosMoreState extends State<ReadMore> {
|
||||
Get.put(ContentBytesController());
|
||||
var data;
|
||||
RxBool isLoading = false.obs;
|
||||
TextEditingController searchControllerr = TextEditingController();
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -87,17 +87,13 @@ class _VideosMoreState extends State<ReadMore> {
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 295.w,
|
||||
child: TextField(
|
||||
controller: searchControllerr,
|
||||
onChanged: (value) {
|
||||
child: CustomTextFormField(
|
||||
textEditingController: searchController,
|
||||
onInput: (value) {
|
||||
// Call method to handle search
|
||||
handleSearch(value, "");
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
prefixIcon: Icon(Icons.search),
|
||||
hintText: 'Search videos',
|
||||
border: OutlineInputBorder(),
|
||||
),
|
||||
hintText: "Search Books",
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
@@ -111,81 +107,93 @@ class _VideosMoreState extends State<ReadMore> {
|
||||
// ),
|
||||
|
||||
sizedBoxHeight(20.h),
|
||||
ListView.builder(
|
||||
itemCount: contentBytesController
|
||||
.contentBytesModel.data!.read!.length,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (ctx, index) {
|
||||
return Column(
|
||||
contentBytesController
|
||||
.contentBytesModel.data!.read!.isEmpty
|
||||
? Center(
|
||||
child: Column(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.to(ReadPDF(
|
||||
title: contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.read![index]
|
||||
.title,
|
||||
pdfUrfl: contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.read![index]
|
||||
.file,
|
||||
));
|
||||
},
|
||||
child: commonGlassContainer(
|
||||
borderradius: 8,
|
||||
width: double.infinity,
|
||||
height: 150.h,
|
||||
customWidget: Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.end,
|
||||
children: [
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Spacer(),
|
||||
SizedBox(
|
||||
width: 235.w,
|
||||
child: text20W400(
|
||||
'"${contentBytesController.contentBytesModel.data!.read![index].title}"'),
|
||||
),
|
||||
sizedBoxHeight(10.h),
|
||||
SizedBox(
|
||||
width: 230.w,
|
||||
child: text16W400(
|
||||
'"${contentBytesController.contentBytesModel.data!.read![index].description}"'),
|
||||
),
|
||||
const Spacer()
|
||||
],
|
||||
),
|
||||
Column(
|
||||
Gap(250),
|
||||
text24W500("No Data Found !"),
|
||||
],
|
||||
))
|
||||
: ListView.builder(
|
||||
itemCount: contentBytesController
|
||||
.contentBytesModel.data!.read!.length,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (ctx, index) {
|
||||
return Column(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.to(ReadPDF(
|
||||
title: contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.read![index]
|
||||
.title,
|
||||
pdfUrfl: contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.read![index]
|
||||
.file,
|
||||
));
|
||||
},
|
||||
child: commonGlassContainer(
|
||||
borderradius: 8,
|
||||
width: double.infinity,
|
||||
height: 150.h,
|
||||
customWidget: Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.end,
|
||||
MainAxisAlignment
|
||||
.spaceBetween,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.end,
|
||||
children: [
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment
|
||||
.start,
|
||||
children: [
|
||||
const Spacer(),
|
||||
SizedBox(
|
||||
width: 235.w,
|
||||
child: text20W400(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.read![index]
|
||||
.title!),
|
||||
),
|
||||
sizedBoxHeight(10.h),
|
||||
SizedBox(
|
||||
width: 230.w,
|
||||
height: 50,
|
||||
child: text16W400(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.read![index]
|
||||
.description!),
|
||||
),
|
||||
const Spacer()
|
||||
],
|
||||
),
|
||||
Image.network(
|
||||
"${contentBytesController.contentBytesModel.data!.read![index].image}",
|
||||
height: 110,
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
sizedBoxHeight(20.h),
|
||||
],
|
||||
);
|
||||
}),
|
||||
sizedBoxHeight(20.h),
|
||||
],
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -235,7 +243,7 @@ class _VideosMoreState extends State<ReadMore> {
|
||||
.id!;
|
||||
|
||||
log(contentBytesController.filterId.toString());
|
||||
handleSearch(searchControllerr.text,
|
||||
handleSearch(searchController.text,
|
||||
contentBytesController.filterId.toString());
|
||||
},
|
||||
child: itemFilter(index));
|
||||
|
||||
@@ -5,9 +5,11 @@ import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CommonAppBar.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart';
|
||||
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/controller/contact_us_controller.dart';
|
||||
import 'package:traderscircuit/controller/content_bytes_controller.dart';
|
||||
import 'package:traderscircuit/model/ContentBytesModel/content_bytes_model.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/ContentByte/PlayerWidget.dart';
|
||||
@@ -81,17 +83,13 @@ class _VideosMoreState extends State<VideosMore> {
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 295.w,
|
||||
child: TextField(
|
||||
controller: searchController,
|
||||
onChanged: (value) {
|
||||
child: CustomTextFormField(
|
||||
textEditingController: searchController,
|
||||
onInput: (value) {
|
||||
// Call method to handle search
|
||||
handleSearch(value, "");
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
prefixIcon: Icon(Icons.search),
|
||||
hintText: 'Search videos',
|
||||
border: OutlineInputBorder(),
|
||||
),
|
||||
hintText: "Search videos",
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
@@ -104,43 +102,64 @@ class _VideosMoreState extends State<VideosMore> {
|
||||
height: 10.h,
|
||||
),
|
||||
// Display search results or regular list
|
||||
SizedBox(
|
||||
height: 620.h,
|
||||
child: ListView.separated(
|
||||
padding: EdgeInsets.zero,
|
||||
shrinkWrap: true,
|
||||
itemCount: contentBytesController
|
||||
.contentBytesModel.data!.video!.length,
|
||||
itemBuilder: (ctx, index) {
|
||||
return Container(
|
||||
margin: const EdgeInsets.only(
|
||||
bottom: 20,
|
||||
),
|
||||
child: videoCard(
|
||||
contentBytesController.contentBytesModel
|
||||
.data!.video![index].file ??
|
||||
"",
|
||||
contentBytesController.contentBytesModel
|
||||
.data!.video![index].title ??
|
||||
"",
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.video![index]
|
||||
.description ??
|
||||
"",
|
||||
contentBytesController.contentBytesModel
|
||||
.data!.video![index].image ??
|
||||
""),
|
||||
);
|
||||
},
|
||||
separatorBuilder: (ctx, inndex) {
|
||||
return SizedBox(
|
||||
height: 10,
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
contentBytesController
|
||||
.contentBytesModel.data!.video!.isEmpty
|
||||
? Center(
|
||||
child: Column(
|
||||
children: [
|
||||
Gap(250),
|
||||
text24W500("No Data Found !"),
|
||||
],
|
||||
))
|
||||
: ListView.separated(
|
||||
padding: EdgeInsets.zero,
|
||||
shrinkWrap: true,
|
||||
itemCount: contentBytesController
|
||||
.contentBytesModel.data!.video!.length,
|
||||
itemBuilder: (ctx, index) {
|
||||
return Container(
|
||||
margin: const EdgeInsets.only(
|
||||
bottom: 20,
|
||||
),
|
||||
child: videoCard(
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.video![index]
|
||||
.link ??
|
||||
"",
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.video![index]
|
||||
.title ??
|
||||
"",
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.video![index]
|
||||
.description ??
|
||||
"",
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.video![index]
|
||||
.image ??
|
||||
"",
|
||||
contentBytesController
|
||||
.contentBytesModel
|
||||
.data!
|
||||
.video![index]
|
||||
.createdAt ??
|
||||
""),
|
||||
);
|
||||
},
|
||||
separatorBuilder: (ctx, inndex) {
|
||||
return SizedBox(
|
||||
height: 10,
|
||||
);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -235,8 +254,9 @@ class _VideosMoreState extends State<VideosMore> {
|
||||
return SizedBox();
|
||||
}
|
||||
|
||||
Widget videoCard(
|
||||
String video, String title, String description, String image) {
|
||||
Widget videoCard(String video, String title, String description, String image,
|
||||
String createdAt) {
|
||||
ContactUsController contactUsController = Get.put(ContactUsController());
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Get.to(() => const PlayerWidget(), arguments: {
|
||||
@@ -246,7 +266,7 @@ class _VideosMoreState extends State<VideosMore> {
|
||||
child: commonGlassContainer(
|
||||
borderradius: 8,
|
||||
width: double.infinity,
|
||||
height: 320.h,
|
||||
height: 340.h,
|
||||
customWidget: Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 10.w),
|
||||
child: Column(
|
||||
@@ -271,12 +291,23 @@ class _VideosMoreState extends State<VideosMore> {
|
||||
sizedBoxHeight(20.h),
|
||||
Row(
|
||||
children: [
|
||||
// CircleAvatar(
|
||||
// radius: 23.r,
|
||||
// backgroundImage: const AssetImage(
|
||||
// 'assets/images/png/Ellipse 1494.png'),
|
||||
// ),
|
||||
sizedBoxWidth(10.w),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
text18W500(title),
|
||||
text16W400(description),
|
||||
text12W400_979797('2 days ago'),
|
||||
SizedBox(
|
||||
width: 0.81.sw,
|
||||
height: 50,
|
||||
child: text16W400(description,
|
||||
textOver: TextOverflow.ellipsis)),
|
||||
text12W400_979797(
|
||||
contactUsController.timeAgoConverter(createdAt)),
|
||||
],
|
||||
)
|
||||
],
|
||||
|
||||
@@ -17,7 +17,7 @@ class ReadPDF extends StatelessWidget {
|
||||
title: Text(title!),
|
||||
),
|
||||
body: SfPdfViewer.network(
|
||||
'https://cdn.syncfusion.com/content/PDFViewer/flutter-succinctly.pdf',
|
||||
pdfUrfl!,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -47,4 +47,42 @@ class ContentBytesApi {
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<ResponseData<dynamic>> getPreviousReadData() async {
|
||||
final response = await NetworkApiServices()
|
||||
.getApi(ApiUrls.getPreviousReadApi, isAuth: true);
|
||||
log(response.data.toString());
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
Map<String, dynamic> responseData =
|
||||
Map<String, dynamic>.from(response.data);
|
||||
if (responseData['status'] == "success") {
|
||||
return response;
|
||||
} else {
|
||||
return ResponseData<dynamic>(
|
||||
responseData['message'], ResponseStatus.FAILED);
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<ResponseData<dynamic>> updateReadCounts(int xid) async {
|
||||
final response = await NetworkApiServices().postApi(
|
||||
{
|
||||
'content_byte_read_xid': xid,
|
||||
},
|
||||
ApiUrls.storeReadCountApi,
|
||||
);
|
||||
log(response.data.toString());
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
Map<String, dynamic> responseData =
|
||||
Map<String, dynamic>.from(response.data);
|
||||
if (responseData['status'] == "success") {
|
||||
return response;
|
||||
} else {
|
||||
return ResponseData<dynamic>(
|
||||
responseData['message'], ResponseStatus.FAILED);
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
84
pubspec.lock
84
pubspec.lock
@@ -580,10 +580,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: intl
|
||||
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
|
||||
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.19.0"
|
||||
version: "0.18.1"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -616,6 +616,30 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.9"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.0"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_testing
|
||||
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
lints:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -636,10 +660,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: local_auth
|
||||
sha256: "280421b416b32de31405b0a25c3bd42dfcef2538dfbb20c03019e02a5ed55ed0"
|
||||
sha256: "27679ed8e0d7daab2357db6bb7076359e083a56b295c0c59723845301da6aed9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
version: "2.1.8"
|
||||
local_auth_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -648,14 +672,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.37"
|
||||
local_auth_darwin:
|
||||
local_auth_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: local_auth_darwin
|
||||
sha256: "33381a15b0de2279523eca694089393bb146baebdce72a404555d03174ebc1e9"
|
||||
name: local_auth_ios
|
||||
sha256: eb283b530029b334698918f1e282d4483737cbca972ff21b9193be3d6de8e2b8
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.2"
|
||||
version: "1.1.6"
|
||||
local_auth_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -684,26 +708,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.16"
|
||||
version: "0.12.16+1"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
|
||||
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.0"
|
||||
version: "0.8.0"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
|
||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
version: "1.11.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -748,10 +772,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
|
||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.8.3"
|
||||
version: "1.9.0"
|
||||
path_drawing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1085,6 +1109,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.1"
|
||||
timeago:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: timeago
|
||||
sha256: d3204eb4c788214883380253da7f23485320a58c11d145babc82ad16bf4e7764
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.6.1"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1246,6 +1278,14 @@ packages:
|
||||
url: "https://github.com/kishan06/videoPlayerKB.git"
|
||||
source: git
|
||||
version: "0.0.2"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "13.0.0"
|
||||
wakelock:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1286,14 +1326,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.1"
|
||||
web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1319,5 +1351,5 @@ packages:
|
||||
source: hosted
|
||||
version: "6.3.0"
|
||||
sdks:
|
||||
dart: ">=3.2.3 <4.0.0"
|
||||
flutter: ">=3.16.6"
|
||||
dart: ">=3.2.0-0 <4.0.0"
|
||||
flutter: ">=3.13.0"
|
||||
|
||||
@@ -50,6 +50,7 @@ dependencies:
|
||||
flutter_html: ^3.0.0-beta.2
|
||||
flutter_bloc: ^8.1.5
|
||||
equatable: ^2.0.5
|
||||
timeago: ^3.6.1
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user