diff --git a/CHANGELOG.md b/CHANGELOG.md index 41cc7d8..e804772 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ ## 0.0.1 -* TODO: Describe initial release. +* Initial release +* Only supports Android for now. iOS support coming soon. + diff --git a/README.md b/README.md index 62b19f5..ffaa35c 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,16 @@ # readability -A new Flutter FFI plugin project. +A flutter plugin that wraps the native Readability [library](https://github.com/go-shiori/go-readability) for Android and iOS. -## Getting Started +## Usage +Simply call the `parseAsync` method with the URL of the article you want to parse. The method returns a `ArticleResult` object with the title, content, and excerpt of the article. -This project is a starting point for a Flutter -[FFI plugin](https://docs.flutter.dev/development/platform-integration/c-interop), -a specialized package that includes native code directly invoked with Dart FFI. +```dart +import 'package:readability/readability.dart'; -## Project structure - -This template uses the following structure: - -* `src`: Contains the native source code, and a CmakeFile.txt file for building - that source code into a dynamic library. - -* `lib`: Contains the Dart code that defines the API of the plugin, and which - calls into the native code using `dart:ffi`. - -* platform folders (`android`, `ios`, `windows`, etc.): Contains the build files - for building and bundling the native code library with the platform application. - -## Building and bundling native code - -The `pubspec.yaml` specifies FFI plugins as follows: - -```yaml - plugin: - platforms: - some_platform: - ffiPlugin: true +final result = await Readability.parseAsync('https://example.com/article'); +print(result.title); +print(result.content); ``` -This configuration invokes the native build for the various target platforms -and bundles the binaries in Flutter applications using these FFI plugins. - -This can be combined with dartPluginClass, such as when FFI is used for the -implementation of one platform in a federated plugin: - -```yaml - plugin: - implements: some_other_plugin - platforms: - some_platform: - dartPluginClass: SomeClass - ffiPlugin: true -``` - -A plugin can have both FFI and method channels: - -```yaml - plugin: - platforms: - some_platform: - pluginClass: SomeName - ffiPlugin: true -``` - -The native build systems that are invoked by FFI (and method channel) plugins are: - -* For Android: Gradle, which invokes the Android NDK for native builds. - * See the documentation in android/build.gradle. -* For iOS and MacOS: Xcode, via CocoaPods. - * See the documentation in ios/readability.podspec. - * See the documentation in macos/readability.podspec. -* For Linux and Windows: CMake. - * See the documentation in linux/CMakeLists.txt. - * See the documentation in windows/CMakeLists.txt. - -## Binding to native code - -To use the native code, bindings in Dart are needed. -To avoid writing these by hand, they are generated from the header file -(`src/readability.h`) by `package:ffigen`. -Regenerate the bindings by running `dart run ffigen --config ffigen.yaml`. - -## Invoking native code - -Very short-running native functions can be directly invoked from any isolate. -For example, see `sum` in `lib/readability.dart`. - -Longer-running functions should be invoked on a helper isolate to avoid -dropping frames in Flutter applications. -For example, see `sumAsync` in `lib/readability.dart`. - -## Flutter help - -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. - -The plugin project was generated without specifying the `--platforms` flag, so no platforms are currently supported. -To add platforms, run `flutter create -t plugin_ffi --platforms .` in this directory. -You can also find a detailed instruction on how to add platforms in the `pubspec.yaml` at https://flutter.dev/docs/development/packages-and-plugins/developing-packages#plugin-platforms. +An example of how to use this plugin can be found in the `example` directory. diff --git a/pubspec.yaml b/pubspec.yaml index 1c17fe0..7b7b463 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,6 +35,6 @@ flutter: android: pluginClass: ReadabilityPlugin ffiPlugin: true - ios: - pluginClass: ReadabilityPlugin - ffiPlugin: true + # ios: + # pluginClass: ReadabilityPlugin + # ffiPlugin: true