Skip to content

Commit

Permalink
add: download
Browse files Browse the repository at this point in the history
  • Loading branch information
athallahmaajid committed Nov 30, 2021
1 parent 8a2ab7f commit 027ebbb
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 34 deletions.
2 changes: 1 addition & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
compileSdkVersion 30
compileSdkVersion 31

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
Expand Down
18 changes: 17 additions & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
package="com.example.wamo">
<application
android:label="wamo"
android:icon="@mipmap/ic_launcher">
android:icon="@mipmap/ic_launcher"
android:requestLegacyExternalStorage="true">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
Expand Down Expand Up @@ -37,5 +38,20 @@
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<provider
android:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"
android:authorities="${applicationId}.flutter_downloader.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>

</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
2 changes: 1 addition & 1 deletion android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
android.enableJetifier=true
6 changes: 5 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:wamo/bloc/wallpaper_bloc.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'view/main_page.dart';

void main() {
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterDownloader.initialize(debug: true // optional: set false to disable printing logs to console
);
runApp(const MyApp());
}

Expand Down
117 changes: 87 additions & 30 deletions lib/view/detail_page.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
import 'dart:io';
import 'dart:isolate';
import 'dart:ui';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:wallpaper/wallpaper.dart';

class DetailPage extends StatefulWidget {
Expand All @@ -17,6 +25,34 @@ class _DetailPageState extends State<DetailPage> {
bool downloading = false;
String home = "Home Screen", lock = "Lock Screen", both = "Both Screen", system = "System";

ReceivePort _port = ReceivePort();

@override
void initState() {
super.initState();

IsolateNameServer.registerPortWithName(_port.sendPort, 'downloader_send_port');
_port.listen((dynamic data) {
String id = data[0];
DownloadTaskStatus status = data[1];
int progress = data[2];
setState(() {});
});

FlutterDownloader.registerCallback(downloadCallback);
}

@override
void dispose() {
IsolateNameServer.removePortNameMapping('downloader_send_port');
super.dispose();
}

static void downloadCallback(String id, DownloadTaskStatus status, int progress) {
final SendPort? send = IsolateNameServer.lookupPortByName('downloader_send_port');
send!.send([id, status, progress]);
}

@override
Widget build(BuildContext context) {
return Scaffold(
Expand Down Expand Up @@ -56,47 +92,68 @@ class _DetailPageState extends State<DetailPage> {
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
GestureDetector(
onTap: () {
progressString = Wallpaper.ImageDownloadProgress(widget.url);
progressString!.listen((data) {
setState(() {
res = data;
downloading = true;
});
}, onDone: () async {
lock = await Wallpaper.homeScreen();
setState(() {
downloading = false;
lock = lock;
onTap: () {
progressString = Wallpaper.ImageDownloadProgress(widget.url);
progressString!.listen((data) {
setState(() {
res = data;
downloading = true;
});
}, onDone: () async {
lock = await Wallpaper.homeScreen();
setState(() {
downloading = false;
lock = lock;
});
}, onError: (error) {
setState(() {
downloading = false;
});
});
}, onError: (error) {
setState(() {
downloading = false;
});
});
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.wallpaper_outlined,
size: 32,
color: Theme.of(context).textTheme.bodyText1!.color,
),
Text("Set as Wallpaper", style: Theme.of(context).textTheme.bodyText1),
],
)),
GestureDetector(
onTap: () async {
var status = await Permission.storage.request();
if (status.isGranted) {
String fileName = widget.url.replaceAll("https://images.wallpaperscraft.com/image/single/", "");
final taskId = await FlutterDownloader.enqueue(
fileName: fileName,
url: widget.url,
savedDir: '/storage/emulated/0/Download/',
showNotification: true, // show download progress in status bar (for Android)
openFileFromNotification: true, // click on notification to open downloaded file (for Android)
);
} else {
showDialog(
context: context,
builder: (_) => const Dialog(
child: Text("Please grant the permission"),
),
);
}
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.wallpaper_outlined,
Icons.download_outlined,
size: 32,
color: Theme.of(context).textTheme.bodyText1!.color,
),
Text("Set as Wallpaper", style: Theme.of(context).textTheme.bodyText1),
Text("Download", style: Theme.of(context).textTheme.bodyText1),
],
),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.download_outlined,
size: 32,
color: Theme.of(context).textTheme.bodyText1!.color,
),
Text("Download", style: Theme.of(context).textTheme.bodyText1),
],
)
],
),
Expand Down
21 changes: 21 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "8.0.0"
flutter_downloader:
dependency: "direct main"
description:
name: flutter_downloader
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.1"
flutter_lints:
dependency: "direct dev"
description:
Expand Down Expand Up @@ -207,6 +214,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.4"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
url: "https://pub.dartlang.org"
source: hosted
version: "8.3.0"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "3.7.0"
platform:
dependency: transitive
description:
Expand Down
2 changes: 2 additions & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ dependencies:
flutter_bloc: 8.0.0
wallpaper: ^1.0.7
path_provider: ^2.0.7
flutter_downloader: ^1.7.1
permission_handler: ^8.3.0

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit 027ebbb

Please sign in to comment.