Add powerful PDF functionality to your Flutter apps with the Nutrient Flutter SDK. View, annotate, and edit PDFs seamlessly across Android, iOS, and Web platforms.
- Flutter SDK (latest stable version)
- For Android:
- Android Studio (latest stable version)
- Android NDK
- Android Virtual Device or physical device
- For iOS:
- Xcode 16 or later
- iOS 16.0 or later
- For Web:
- Modern web browser with WebAssembly support
- Add the Nutrient Flutter SDK to your
pubspec.yaml
:
dependencies:
pspdfkit_flutter: any
- Run the following command:
flutter pub get
- Update your Android configuration in
android/app/build.gradle
:
android {
compileSdkVersion 35
defaultConfig {
minSdkVersion 21
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:<version>'
}
- Update your theme in
android/app/src/main/res/values/styles.xml
:
- <style name="NormalTheme" parent="Theme.AppCompat.Light.NoActionBar">
+ <style name="NormalTheme" parent="PSPDFKit.Theme.Default">
- Update your main activity to use
FlutterAppCompatActivity
:
import io.flutter.embedding.android.FlutterAppCompatActivity
class MainActivity: FlutterAppCompatActivity() {
}
Make sure to set the minimum iOS version to 16.0 in your ios/Podfile
:
platform :ios, '16.0'
The Nutrient Web SDK files are distributed as an archive that needs to be extracted manually:
-
Download Nutrient Web SDK. The download will start immediately and save a
.tar.gz
archive likePSPDFKit-Web-binary-<version>.tar.gz
to your computer. -
Once downloaded, extract the archive and copy the entire contents of its
dist
folder to your project'sweb/assets
folder. -
Verify your
assets
folder contains:pspdfkit.js
filepspdfkit-lib
directory with library assets
-
Add the Nutrient library to your
web/index.html
:
<script src="assets/pspdfkit.js"></script>
Note: Your server must have the Content-Type: application/wasm
MIME type configured for WebAssembly files.
- Create a
PDFs
directory in your project root:
mkdir PDFs
-
Download our sample PDF document and save it as
Document.pdf
in thePDFs
directory. -
Add the assets directory to your
pubspec.yaml
:
flutter:
assets:
- PDFs/
Create a new file lib/main.dart
with the following content:
import 'package:flutter/material.dart';
import 'package:pspdfkit_flutter/pspdfkit_flutter.dart';
import 'dart:io';
import 'package:flutter/foundation.dart';
const String documentPath = 'PDFs/Document.pdf';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize the Nutrient SDK with your license key
await Pspdfkit.initialize(
androidLicenseKey: 'YOUR_ANDROID_LICENSE_KEY',
iosLicenseKey: 'YOUR_IOS_LICENSE_KEY',
webLicenseKey: 'YOUR_WEB_LICENSE_KEY',
);
runApp(const MaterialApp(
home: MyApp(),
));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Future<String> extractAsset(BuildContext context, String assetPath) async {
if (kIsWeb) {
return assetPath;
}
final bytes = await DefaultAssetBundle.of(context).load(assetPath);
final list = bytes.buffer.asUint8List();
final tempDir = await Pspdfkit.getTemporaryDirectory();
final tempDocumentPath = '${tempDir.path}/$assetPath';
final file = File(tempDocumentPath);
await file.create(recursive: true);
file.writeAsBytesSync(list);
return file.path;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<String>(
future: extractAsset(context, documentPath),
builder: (context, snapshot) {
if (snapshot.hasData) {
/// PspdfkitWidget is a widget that displays a PDF document.
return PspdfkitWidget(
documentPath: snapshot.data!,
);
} else if (snapshot.hasError) {
return Center(
child: Text('${snapshot.error}'),
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
}),
);
}
}
Note: Replace 'YOUR_ANDROID_LICENSE_KEY'
, 'YOUR_IOS_LICENSE_KEY'
, and 'YOUR_WEB_LICENSE_KEY'
with your actual license keys. Do not pass any license keys if you want to run the SDK in demo mode, the SDK will run in demo mode with a watermark.
Visit our Support Center for help with the SDK.
This project is licensed under the Nutrient Commercial License. See LICENSE for details.