diff --git a/README.md b/README.md
index 435327d..379f96b 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,3 @@
-# yatadabaron
+# Yatadabaron
-A new Flutter project.
-
-## Getting Started
-
-This project is a starting point for a Flutter application.
-
-A few resources to get you started if this is your first Flutter project:
-
-- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
-- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
-
-For help getting started with Flutter, view our
-[online documentation](https://flutter.dev/docs), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.
+Open source search engine in Holy Quran
diff --git a/abdlrhmanshehata.yatadabaron.jks b/abdlrhmanshehata.yatadabaron.jks
new file mode 100644
index 0000000..8914ff0
Binary files /dev/null and b/abdlrhmanshehata.yatadabaron.jks differ
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 73f65eb..957d3dc 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -30,7 +30,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
- compileSdkVersion 28
+ compileSdkVersion 29
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
@@ -44,7 +44,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "abdlrhmanshehata.yatadabaron"
minSdkVersion 16
- targetSdkVersion 28
+ targetSdkVersion 29
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 7484d15..51a92dd 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -29,4 +29,5 @@
+
\ No newline at end of file
diff --git a/kestore.credentials.txt b/kestore.credentials.txt
new file mode 100644
index 0000000..00b222a
--- /dev/null
+++ b/kestore.credentials.txt
@@ -0,0 +1,2 @@
+KeystoreAlias key1
+KeystorePassword ilp01bmrIDC!
diff --git a/lib/blocs/mushaf-bloc.dart b/lib/blocs/mushaf-bloc.dart
index 2bec6d6..bcd4f77 100644
--- a/lib/blocs/mushaf-bloc.dart
+++ b/lib/blocs/mushaf-bloc.dart
@@ -6,21 +6,29 @@ import '../repositories/chapters-repository.dart';
import '../repositories/verses-repository.dart';
class MushafBloc {
- MushafBloc() {
- selectChapter(1);
+ MushafBloc(int chapterId, int verseId) {
+ selectChapter(chapterId, verseId);
}
GenericBloc> _versesBloc = GenericBloc();
GenericBloc _selectedChapterBloc = GenericBloc();
- Stream get selectedChapterStream => _selectedChapterBloc.stream;
+ Stream get selectedChapterStream =>
+ _selectedChapterBloc.stream;
Stream> get versesStream => _versesBloc.stream;
- Future selectChapter(int id) async{
- List verses = await VersesRepository.instance.getVersesByChapterId(id,false);
- ChapterFullDTO chapter = await ChaptersRepository.instance.getFullChapterById(id);
+ Future selectChapter(int chapterId, int verseId) async {
+ chapterId = chapterId ?? 1;
+ ChapterFullDTO chapter =
+ await ChaptersRepository.instance.getFullChapterById(chapterId);
+ List verses =
+ await VersesRepository.instance.getVersesByChapterId(chapterId, false);
_selectedChapterBloc.add(chapter);
+ if (verseId != null && verseId > 0) {
+ verses.firstWhere((v) => v.verseID == verseId)?.isSelected = true;
+ }
_versesBloc.add(verses);
}
+
Future> get getChaptersSimple async {
return await ChaptersRepository.instance.getChaptersSimple();
}
diff --git a/lib/dtos/verse-dto.dart b/lib/dtos/verse-dto.dart
index 9f3fc4a..6ae501e 100644
--- a/lib/dtos/verse-dto.dart
+++ b/lib/dtos/verse-dto.dart
@@ -3,6 +3,8 @@ class VerseDTO {
final String verseText;
final String verseTextTashkel;
final int verseID;
+ final int chapterId;
+ bool isSelected = false;
- VerseDTO(this.chapterName, this.verseText,this.verseTextTashkel, this.verseID);
+ VerseDTO(this.chapterId,this.chapterName, this.verseText,this.verseTextTashkel, this.verseID);
}
diff --git a/lib/helpers/event_types.dart b/lib/helpers/event_types.dart
new file mode 100644
index 0000000..e6fcf47
--- /dev/null
+++ b/lib/helpers/event_types.dart
@@ -0,0 +1,5 @@
+class EventTypes{
+ static const String SEARCH_PAGE_BASMALA = "SEARCH-PAGE:BASMALA BUTTON";
+ static const String STAT_PAGE_BASMALA = "STAT-PAGE:BASMALA BUTTON";
+ static const String DRAWER_RATING_BUTTON = "DRAWER:RATING BUTTON";
+}
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
index ef78f88..1debf64 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,12 +1,14 @@
+import 'package:Yatadabaron/services/initialization-service.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'blocs/search-session-bloc.dart';
-import 'repositories/database-provider.dart';
+import 'services/database-provider.dart';
import 'helpers/localization.dart';
import 'helpers/theming.dart';
import 'views/home/home.dart';
import 'views/shared-widgets/loading-widget.dart';
import 'views/splash/splash.dart';
+import 'package:wisebay_essentials/analytics/analytics_helper.dart';
void main() {
runApp(App());
@@ -31,7 +33,7 @@ class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder(
- future: DatabaseProvider.initialize(),
+ future: InitializationService.instance.initialize(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
if (snapshot.data) {
diff --git a/lib/repositories/generic-repository.dart b/lib/repositories/generic-repository.dart
index dc8ac60..9c94a03 100644
--- a/lib/repositories/generic-repository.dart
+++ b/lib/repositories/generic-repository.dart
@@ -1,5 +1,5 @@
import 'package:sqflite/sqflite.dart';
-import '../repositories/database-provider.dart';
+import '../services/database-provider.dart';
class GenericRepository{
Database database;
diff --git a/lib/repositories/verses-repository.dart b/lib/repositories/verses-repository.dart
index 22a9d72..1975864 100644
--- a/lib/repositories/verses-repository.dart
+++ b/lib/repositories/verses-repository.dart
@@ -35,7 +35,7 @@ class VersesRepository extends GenericRepository {
//Prepare Query
String query =
- "SELECT ch.arabic as chapter_name,ve.ayah as verse_id,ve.text as verse_text,ve.text_tashkel as verse_text_tashkel "
+ "SELECT ch.arabic as chapter_name,ve.ayah as verse_id,ve.text as verse_text,ve.text_tashkel as verse_text_tashkel,ch.c0sura as chapter_id "
"FROM $table ve "
"INNER JOIN chapters ch on ve.sura = ch.c0sura "
"WHERE ve.sura $chapterCondition "
@@ -53,8 +53,9 @@ class VersesRepository extends GenericRepository {
String verseText = verse["verse_text"];
String verseTextTashkel = verse["verse_text_tashkel"];
int verseID = verse["verse_id"];
+ int chId = verse["chapter_id"];
VerseDTO result =
- VerseDTO(chapterName, verseText, verseTextTashkel, verseID);
+ VerseDTO(chId,chapterName, verseText, verseTextTashkel, verseID);
return result;
}).toList();
return results;
@@ -82,7 +83,7 @@ class VersesRepository extends GenericRepository {
String verseTextTashkel = verse["verse_text_tashkel"];
int verseID = verse["verse_id"];
VerseDTO result =
- VerseDTO(chapterName, verseText, verseTextTashkel, verseID);
+ VerseDTO(id,chapterName, verseText, verseTextTashkel, verseID);
return result;
}).toList();
return results;
diff --git a/lib/repositories/database-provider.dart b/lib/services/database-provider.dart
similarity index 100%
rename from lib/repositories/database-provider.dart
rename to lib/services/database-provider.dart
diff --git a/lib/services/initialization-service.dart b/lib/services/initialization-service.dart
new file mode 100644
index 0000000..366a987
--- /dev/null
+++ b/lib/services/initialization-service.dart
@@ -0,0 +1,23 @@
+import 'package:Yatadabaron/services/database-provider.dart';
+import 'package:package_info/package_info.dart';
+import 'package:wisebay_essentials/analytics/analytics_helper.dart';
+
+class InitializationService {
+ static InitializationService instance = InitializationService._();
+ InitializationService._();
+ Future initialize() async {
+ try {
+ await DatabaseProvider.initialize();
+ } catch (e) {
+ return false;
+ }
+ try {
+ PackageInfo packageInfo = await PackageInfo.fromPlatform();
+ String version = packageInfo.buildNumber;
+ await AnalyticsHelper.instance.initialize("YATADABARON", version);
+ await AnalyticsHelper.instance.logEvent(AnalyticsHelper.APP_STARTED);
+ await AnalyticsHelper.instance.pushEvents();
+ } catch (e) {}
+ return true;
+ }
+}
diff --git a/lib/views/home/search-form.dart b/lib/views/home/search-form.dart
index 47b7990..21bea9c 100644
--- a/lib/views/home/search-form.dart
+++ b/lib/views/home/search-form.dart
@@ -1,5 +1,7 @@
+import 'package:Yatadabaron/helpers/event_types.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
+import 'package:wisebay_essentials/analytics/analytics_helper.dart';
import '../../blocs/search-session-bloc.dart';
import '../../dtos/chapter-simple-dto.dart';
import '../../dtos/search-settings.dart';
@@ -52,7 +54,7 @@ class SearchForm extends StatelessWidget {
items: menuItems,
value: settings.mode,
onChanged: (SearchMode s) {
- setState((){
+ setState(() {
settings.mode = s;
});
},
@@ -77,7 +79,8 @@ class SearchForm extends StatelessWidget {
Expanded(
flex: 1,
child: FutureBuilder(
- future: ChaptersRepository.instance.getChaptersSimple(includeWholeQuran: true),
+ future: ChaptersRepository.instance
+ .getChaptersSimple(includeWholeQuran: true),
builder: (BuildContext context,
AsyncSnapshot> snapshot) {
if (snapshot.hasData) {
@@ -128,7 +131,9 @@ class SearchForm extends StatelessWidget {
builder: (context, setState) {
return Switch(
value: settings.basmala,
- onChanged: (bool val) {
+ onChanged: (bool val) async {
+ AnalyticsHelper.instance.logEvent(
+ EventTypes.SEARCH_PAGE_BASMALA + "-" + val.toString());
setState(() {
settings.basmala = val;
});
@@ -183,7 +188,7 @@ class SearchForm extends StatelessWidget {
@override
Widget build(BuildContext context) {
- keywordController.addListener((){
+ keywordController.addListener(() {
settings.keyword = keywordController.text;
});
return SingleChildScrollView(
diff --git a/lib/views/home/search-results-list.dart b/lib/views/home/search-results-list.dart
index 7d59ab3..4492a91 100644
--- a/lib/views/home/search-results-list.dart
+++ b/lib/views/home/search-results-list.dart
@@ -1,3 +1,6 @@
+import 'package:Yatadabaron/blocs/mushaf-bloc.dart';
+import 'package:Yatadabaron/helpers/global-colors.dart';
+import 'package:Yatadabaron/views/mushaf/mushaf.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@@ -12,6 +15,17 @@ import '../../views/shared-widgets/loading-widget.dart';
class SearchResultsList extends StatelessWidget {
@override
Widget build(BuildContext context) {
+ void navigateToMushaf(int chapterId, int verseId) {
+ Navigator.of(context).push(
+ MaterialPageRoute(builder: (_) {
+ return Provider(
+ child: MushafPage(),
+ create: (_) => MushafBloc(chapterId,verseId),
+ );
+ }),
+ );
+ }
+
SearchSessionBloc sessionBloc = Provider.of(context);
return StreamBuilder(
stream: sessionBloc.payloadStream,
@@ -33,7 +47,9 @@ class SearchResultsList extends StatelessWidget {
if (collections.length == 1) {
return ListView.separated(
itemCount: results.length,
- separatorBuilder: (_, __) => Divider(thickness: 1,),
+ separatorBuilder: (_, __) => Divider(
+ thickness: 1,
+ ),
itemBuilder: (_, i) {
VerseDTO verse = results[i];
return ListTile(
@@ -48,7 +64,7 @@ class SearchResultsList extends StatelessWidget {
"${verse.chapterName}",
style: TextStyle(fontWeight: FontWeight.bold),
),
- onTap: (){
+ onTap: () {
snapshot.data.copyVerse(verse);
},
);
@@ -70,21 +86,22 @@ class SearchResultsList extends StatelessWidget {
children: [
ListTile(
title: Text(
- "${verse.verseTextTashkel} {${verse.verseID}}",
+ "${verse.verseTextTashkel} [${verse.chapterName}-${verse.verseID}]",
style: TextStyle(
fontWeight: FontWeight.normal,
fontSize: 18,
),
),
- trailing: Text(
- "${verse.chapterName}",
- style: TextStyle(fontWeight: FontWeight.bold),
- ),
- onTap: (){
+ onTap: () {
+ navigateToMushaf(verse.chapterId, verse.verseID);
+ },
+ onLongPress: () {
snapshot.data.copyVerse(verse);
},
),
- Divider(thickness: 1,)
+ Divider(
+ thickness: 1,
+ )
],
);
}).toList(),
diff --git a/lib/views/mushaf/chapters-dropdown.dart b/lib/views/mushaf/chapters-dropdown.dart
index fb575c7..77f40e6 100644
--- a/lib/views/mushaf/chapters-dropdown.dart
+++ b/lib/views/mushaf/chapters-dropdown.dart
@@ -1,17 +1,18 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
import '../../blocs/mushaf-bloc.dart';
import '../../dtos/chapter-simple-dto.dart';
import '../../helpers/localization.dart';
import '../../views/shared-widgets/loading-widget.dart';
class ChaptersDropDown extends StatelessWidget {
- final MushafBloc mushafBloc;
-
- const ChaptersDropDown(this.mushafBloc);
+ final BuildContext parentContext;
+ const ChaptersDropDown(this.parentContext);
@override
Widget build(BuildContext context) {
+ MushafBloc mushafBloc = Provider.of(this.parentContext);
return FutureBuilder>(
future: mushafBloc.getChaptersSimple,
builder: (BuildContext context,
@@ -22,6 +23,7 @@ class ChaptersDropDown extends StatelessWidget {
List chapters = snapshot.data;
return Container(
height: 300,
+ width: double.maxFinite,
child: ListView.separated(
separatorBuilder: (_,__)=>Divider(),
itemCount: chapters.length,
@@ -31,7 +33,7 @@ class ChaptersDropDown extends StatelessWidget {
title: Text(chapter.chapterNameAR),
leading: Text("${chapter.chapterID}"),
onTap: () {
- mushafBloc.selectChapter(chapter.chapterID);
+ mushafBloc.selectChapter(chapter.chapterID,null);
Navigator.of(context).pop();
},
);
@@ -42,7 +44,7 @@ class ChaptersDropDown extends StatelessWidget {
);
}
- static show(BuildContext context, MushafBloc bloc) {
+ static show(BuildContext context) {
showDialog(
context: context,
child: SimpleDialog(
@@ -52,7 +54,7 @@ class ChaptersDropDown extends StatelessWidget {
),
contentPadding: EdgeInsets.all(5),
children: [
- ChaptersDropDown(bloc),
+ ChaptersDropDown(context),
],
),
);
diff --git a/lib/views/mushaf/mushaf.dart b/lib/views/mushaf/mushaf.dart
index d7f6d85..598c272 100644
--- a/lib/views/mushaf/mushaf.dart
+++ b/lib/views/mushaf/mushaf.dart
@@ -52,7 +52,7 @@ class MushafPage extends StatelessWidget {
],
),
onTap: () {
- ChaptersDropDown.show(context, mushafBloc);
+ ChaptersDropDown.show(context);
},
),
),
diff --git a/lib/views/mushaf/verse-list.dart b/lib/views/mushaf/verse-list.dart
index 250ba58..4d33f38 100644
--- a/lib/views/mushaf/verse-list.dart
+++ b/lib/views/mushaf/verse-list.dart
@@ -1,49 +1,64 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
+import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
+import 'package:share/share.dart';
import '../../blocs/mushaf-bloc.dart';
import '../../dtos/verse-dto.dart';
import '../../helpers/localization.dart';
import '../../helpers/utils.dart';
import '../../views/shared-widgets/loading-widget.dart';
-class VerseList extends StatelessWidget{
+class VerseList extends StatelessWidget {
@override
Widget build(BuildContext context) {
- MushafBloc mushafBloc = Provider.of(context);
+ MushafBloc mushafBloc = Provider.of(context);
+ ItemScrollController _scrollController = ItemScrollController();
+
return StreamBuilder>(
stream: mushafBloc.versesStream,
- builder: (BuildContext context,
- AsyncSnapshot> snapshot) {
+ builder: (BuildContext context, AsyncSnapshot> snapshot) {
if (!snapshot.hasData) {
return LoadingWidget();
}
List results = snapshot.data;
if (results.length == 0) {
return Center(
- child: Text(Localization.EMPTY_SEARCH_RESULTS,style: Utils.emptyListStyle(),),
+ child: Text(
+ Localization.EMPTY_SEARCH_RESULTS,
+ style: Utils.emptyListStyle(),
+ ),
);
}
- return ListView.separated(
- separatorBuilder: (BuildContext context, int index) {
- return Divider();
- },
+ int scrollIndex = 0;
+ if (results.any((v) => v.isSelected)) {
+ int selectedVerseId = results.firstWhere((v) => v.isSelected).verseID;
+ scrollIndex = selectedVerseId - 1;
+ }
+ return ScrollablePositionedList.builder(
+ itemScrollController: _scrollController,
itemCount: results.length,
- itemBuilder: (BuildContext context, int i) {
+ initialScrollIndex: scrollIndex,
+ itemBuilder: (context, i) {
VerseDTO result = results[i];
String body = "${result.verseTextTashkel}";
return ListTile(
title: Text(
body,
- style: TextStyle(fontWeight: FontWeight.w200,fontSize: 18),
+ style: TextStyle(fontWeight: FontWeight.w200, fontSize: 18),
),
+ selected: result.isSelected,
leading: Text("${result.verseID}"),
+ onTap: () {
+ String toCopy =
+ "${result.chapterName}\n${result.verseTextTashkel} {${result.verseID}}";
+ Share.share(toCopy);
+ },
);
},
);
},
);
}
-
-}
\ No newline at end of file
+}
diff --git a/lib/views/shared-widgets/custom-drawer.dart b/lib/views/shared-widgets/custom-drawer.dart
index e7a2f38..74a28da 100644
--- a/lib/views/shared-widgets/custom-drawer.dart
+++ b/lib/views/shared-widgets/custom-drawer.dart
@@ -43,7 +43,7 @@ class CustomDrawer extends StatelessWidget {
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => Provider(
child: MushafPage(),
- create: (contextt) => MushafBloc(),
+ create: (contextt) => MushafBloc(null,null),
),
));
},
diff --git a/lib/views/statistics/statistics-form.dart b/lib/views/statistics/statistics-form.dart
index 12118d9..056c257 100644
--- a/lib/views/statistics/statistics-form.dart
+++ b/lib/views/statistics/statistics-form.dart
@@ -1,5 +1,7 @@
+import 'package:Yatadabaron/helpers/event_types.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
+import 'package:wisebay_essentials/analytics/analytics_helper.dart';
import '../../blocs/statistics-bloc.dart';
import '../../dtos/chapter-simple-dto.dart';
import '../../dtos/statistics-settings.dart';
@@ -75,7 +77,8 @@ class StatisticsForm extends StatelessWidget{
builder: (context, setState) {
return Switch(
value: settings.basmala,
- onChanged: (bool val) {
+ onChanged: (bool val) async {
+ await AnalyticsHelper.instance.logEvent("${EventTypes.STAT_PAGE_BASMALA}-${val.toString()}");
setState(() {
settings.basmala = val;
});
@@ -104,7 +107,7 @@ class StatisticsForm extends StatelessWidget{
padding: EdgeInsets.all(5),
child: _customButton(
context: context,
- onPressed: () {
+ onPressed: (){
try {
this.bloc.changeSettings(settings);
} catch (e) {
diff --git a/pubspec.lock b/pubspec.lock
index c37863c..05bcb47 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -78,6 +78,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.2.1"
flutter:
dependency: "direct main"
description: flutter
@@ -95,6 +102,25 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ flutter_web_plugins:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ http:
+ dependency: "direct main"
+ description:
+ name: http
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.12.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.1.4"
image:
dependency: transitive
description:
@@ -165,6 +191,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.5"
+ path_provider_linux:
+ dependency: transitive
+ description:
+ name: path_provider_linux
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.1+2"
path_provider_macos:
dependency: transitive
description:
@@ -179,6 +212,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
+ pedantic:
+ dependency: transitive
+ description:
+ name: pedantic
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.9.0"
petitparser:
dependency: transitive
description:
@@ -200,6 +240,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
+ process:
+ dependency: transitive
+ description:
+ name: process
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.0.13"
provider:
dependency: "direct main"
description:
@@ -221,6 +268,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.23.1"
+ scrollable_positioned_list:
+ dependency: "direct main"
+ description:
+ name: scrollable_positioned_list
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.8"
share:
dependency: "direct main"
description:
@@ -228,6 +282,41 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4+3"
+ shared_preferences:
+ dependency: "direct main"
+ description:
+ name: shared_preferences
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.5.10"
+ shared_preferences_linux:
+ dependency: transitive
+ description:
+ name: shared_preferences_linux
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.2+4"
+ shared_preferences_macos:
+ dependency: transitive
+ description:
+ name: shared_preferences_macos
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.1+11"
+ shared_preferences_platform_interface:
+ dependency: transitive
+ description:
+ name: shared_preferences_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.4"
+ shared_preferences_web:
+ dependency: transitive
+ description:
+ name: shared_preferences_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.2+7"
sky_engine:
dependency: transitive
description: flutter
@@ -310,6 +399,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
+ wisebay_essentials:
+ dependency: "direct main"
+ description:
+ path: "c:/wisebay_essentials/"
+ relative: false
+ source: path
+ version: "0.0.1"
+ xdg_directories:
+ dependency: transitive
+ description:
+ name: xdg_directories
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.0"
xml:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 9368372..d9e0ab1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -11,7 +11,7 @@ description: Quran Search Engine and Statistics.
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-version: 6.2.0+16
+version: 6.4.0+19
environment:
sdk: ">=2.6.0 <3.0.0"
@@ -19,6 +19,8 @@ environment:
dependencies:
flutter:
sdk: flutter
+ wisebay_essentials:
+ path: c:/wisebay_essentials/
sqflite: any
rxdart: ^0.23.0
provider: ^4.0.5
@@ -27,10 +29,12 @@ dependencies:
share: ^0.6.4+3
launch_review: ^2.0.0
package_info: ^0.4.1
-
+ scrollable_positioned_list: ^0.1.8
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
+ shared_preferences: ^0.5.7+3
+ http: ^0.12.2
flutter_icons:
image_path: 'icon/icon.png'