notion_api
Dart用のNotion SDKパッケージのように管理できる、公開ベータ版Notion API用のラッパーです。
Dart用のNotion APIクライアント
以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。
Notion API client for dart.
CI codecov
See the ROADMAP file to see what is coming next.
| Endpoint | Avaliable | Notes |
|---|---|---|
| Retrieve a database | ✅ | |
| Query a database | 🏗 | Working on it |
| List databases | ✅ | |
| Create a database | ✅ | Workin on more properties |
| Retrieve a page | ✅ | |
| Create a page | ✅ | Workin on more properties |
| Update a page | ✅ | Workin on more properties |
| Retrieve block children | ✅ | |
| Append block children | ✅ | |
| Retrieve a user | ||
| List all users | ||
| Search |
Important: The methods return a NotionResponse. You can find how to use it in its documentation.
NotionClient classYou 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');
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 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.
// Create children instance:
Children children = Children.withBlocks([
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 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);
Some errors that I have encounter and still don't know how to solve because are errors that also occur on Postman are:
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.
Please help, I don't even know if what I'm doing is right.
Some rules to follow:
To be able to run the tests you will have to have a .env file on the root directory with the next variables:
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
Release date: 02/Aug/2021
Paragraph.text('some text here...')ToDo.text('some text here...', checked: true)Heading.text('some text here...', type: 2)BulletedListItem.text('some text here...')NumberedListItem.text('some text here...')Toggle.text('some text here...', children: [])Heading class:
one: Heading with type 1 by default.two: Heading with type 2 by default.three: Heading with type 3 by default.Text class:
code: Text with code style by default.italic: Text with italic style by default.bold: Text with bold style by default.list: List of words separated by comma (by default).
Text.list() will receive a list of Text and will be concatenated separated with comma by default. It may be unnecessary. Can help to make the code more readable.sep: Text separator.
Text.sep(), by default, will insert " " in a list of Text instances, but it will be able to do more things that I don't know yet, hehe. It may be unnecessary. Can help to make the code more readable.