Notion API client for dart.
See the ROADMAP file to see what is coming next.
API implemented
Endpoint | Avaliable | Notes |
---|---|---|
Retrieve a database | ✅ | |
Query a database | 🏗 | Working on it |
List databases | ✅ | |
Create a database | ✅ | Working on more properties |
Retrieve a page | ✅ | |
Create a page | ✅ | Working on more properties |
Update a page | ✅ | Working on more properties |
Retrieve block children | ✅ | |
Append block children | ✅ | |
Retrieve a user | ||
List all users | ||
Search |
Usage
Important: The methods return a NotionResponse
. You can find how to use it in its documentation.
NotionClient
class
You only have to create a new instance of the NotionClient
class and all the API requests will be available as class methods.
NotionClient notion = NotionClient(token: 'YOUR SECRET TOKEN FROM INTEGRATIONS PAGE');
Individual classes
You can also use individual request group class like NotionPagesClient
or NotionDatabasesClient
. They are used like the main client but the methods are class methods instead of class properties methods.
Example
// With main class
NotionClient notion = NotionClient(token: 'YOUR_TOKEN');
notion.databases.fetchAll();
// With individual class
NotionDatabasesClient databases = NotionDatabasesClient(token: 'YOUR_TOKEN');
databases.fetchAll();
A few examples
A page created and filled using only this package:
https://jonathangomz.notion.site/notion_api-example-0893dd2cb38a413d90165cb810b3c019
To see code to create the page above or see more examples go here.
Append blocks children
// Create children instance:
Children children = Children(blocks: [
Heading(text: Text('Test')),
Paragraph(texts: [
Text('Lorem ipsum (A)'),
Text('Lorem ipsum (B)',
annotations: TextAnnotations(
bold: true,
underline: true,
color: ColorsTypes.Orange,
))
])
]);
// Send the instance to Notion
notion.blocks.append(
to: 'YOUR_BLOCK_ID',
children: children,
);
Create a page
// Create a page instance
Page page = Page(
parent: Parent.database(id: 'YOUR_DATABASE_ID'),
title: Text('NotionClient (v1): Page test'),
);
// Send the instance to Notion.
notion.pages.create(page);
Errors
Some errors that I have encounter and still don't know how to solve because are errors that also occur on Postman are:
Create page with children
When the parent is a page the error is:
"body failed validation: body.properties.title.type should be an array, instead was `\"array\"`."
But when the parent is a database then the error is:
"body failed validation: body.parent.page_id should be defined, instead was `undefined`."
You can create the page first and then add the children as shown in the examples.
Contributions
Please help, I don't even know if what I'm doing is right.
Rules
Some rules to follow:
- Please follow the dart convention format:
- If you are adding a new function, please also add the documentation.
- If you are adding a new parameters, please also add it to the current documentation.
- (Optional) Run the tests to know that everything is working just fine (See how run the tests).
- This is optional because sometimes the tests fail on GitHub actions so anyway I will check this on my computer.
Tests
To be able to run the tests you will have to have a .env
file on the root directory with the next variables:
- TOKEN: The secret token.
- TEST_DATABASE_ID: The database id where you will be working on.
- TEST_PAGE_ID: Some page id inside the database specified above.
- TEST_BLOCK_ID: Some block id inside the page specified above.
- TEST_BLOCK_HEADING_ID: Some heading block id inside the page specified above.
Example:
The values are not valid of course.
TOKEN=secret_Oa24V8FbJ49JluJankVOQihyLiMXwqSQeeHuSFobQDW
TEST_DATABASE_ID=366da3d646bb458128071fdb2fbbf427
TEST_PAGE_ID=c3b53019-4470-443b-a141-95a3a1a44g60
TEST_BLOCK_ID=c8hac4bb32af48889228bf483d938e34
TEST_BLOCK_HEADING_ID=c8hac4bb32af48889228bf483d938e34
Releases
Next
v2.0.0
Release date: 13/Aug/2021
- 🔧 Fix any error on beta
Last
v2.0.0-beta2
Release date: 06/Aug/2021
- 🍗 Add more suggestions on issue #11:
- Copy some terminologies from
notion-sdk-js
- Copy some terminologies from
Libraries
- notion_api
- A wrapper for the public beta Notion API to manage it like a Notion SDK package for dart.