VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS41.92%
Net Worth
0.334USD
STEEM
0.004STEEM
SBD
0.601SBD
Effective Power
5.007SP
├── Own SP
0.773SP
└── Incoming DelegationsDeleg
+4.234SP
Detailed Balance
| STEEM | ||
| balance | 0.001STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.003STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.773SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.234SP | SP |
| Effective Power | 5.007SP | SP |
| Reward SP (pending) | 0.024SP | SP |
| SBD | ||
| sbd_balance | 0.574SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.027SBD | SBD |
{
"balance": "0.001 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.003 STEEM",
"vesting_shares": "1256.934398 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "6886.725408 VESTS",
"sbd_balance": "0.574 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.027 SBD",
"conversions": []
}Account Info
| name | wakjal12 |
| id | 608170 |
| rank | 309,758 |
| reputation | 3097605383 |
| created | 2018-01-17T16:21:21 |
| recovery_account | steem |
| proxy | None |
| post_count | 24 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-04-03T18:44:54 |
| last_root_post | 2018-04-03T18:44:54 |
| last_vote_time | 2018-04-13T10:33:48 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.001 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.574 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 1256.934398 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 6886.725408 VESTS |
| reward_vesting_balance | 48.945985 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 2018-01-19T20:54:39 |
| last_account_update | 2018-03-09T04:10:30 |
| mined | No |
| sbd_seconds | 376,218,936 |
| sbd_last_interest_payment | 2018-03-09T05:12:15 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM7j3crWKMBmXHLwGoPSwLypq2QXhekoyhdQ7c4k9JjLv9Qiv2F3",
1
]
],
"weight_threshold": 1
},
"balance": "0.001 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2018-01-17T16:21:21",
"curation_rewards": 9,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779091554
},
"guest_bloggers": [],
"id": 608170,
"json_metadata": "{\"profile\":{\"profile_image\":\"\",\"name\":\"Ulih09\",\"location\":\"Aceh\",\"cover_image\":\"https://img.esteem.ws/ajmdkc471a.jpg\"}}",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "2018-03-09T04:10:30",
"last_owner_update": "2018-01-19T20:54:39",
"last_post": "2018-04-03T18:44:54",
"last_root_post": "2018-04-03T18:44:54",
"last_vote_time": "2018-04-13T10:33:48",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM5oN8TTckevmEpc4sfs8anyjegp9g8nEzU77p5bddab7eTbkR6n",
"mined": false,
"name": "wakjal12",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM4zVmKMfmrAdehvcb4bsqDmsq6FcWHo5S5HDbd8pdz6MaRsTNnb",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 0,
"post_count": 24,
"post_history": [],
"posting": {
"account_auths": [
[
"dmania.app",
1
],
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM7augqtxz8855p97iQeUuZ3sRz6suCDGd2zM4dj6fiYDxAdTHf1",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "{\"profile\":{\"profile_image\":\"\",\"name\":\"Ulih09\",\"location\":\"Aceh\",\"cover_image\":\"https://img.esteem.ws/ajmdkc471a.jpg\"}}",
"posting_rewards": 252,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "6886.725408 VESTS",
"recovery_account": "steem",
"reputation": 3097605383,
"reset_account": "null",
"reward_sbd_balance": "0.027 SBD",
"reward_steem_balance": "0.003 STEEM",
"reward_vesting_balance": "48.945985 VESTS",
"reward_vesting_steem": "0.024 STEEM",
"savings_balance": "0.000 STEEM",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"sbd_balance": "0.574 SBD",
"sbd_last_interest_payment": "2018-03-09T05:12:15",
"sbd_seconds": "376218936",
"sbd_seconds_last_update": "2018-03-17T08:10:36",
"tags_usage": [],
"to_withdraw": 0,
"transfer_history": [],
"vesting_balance": "0.000 STEEM",
"vesting_shares": "1256.934398 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779091554
},
"voting_power": 0,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 309758
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 08:05:54
2026/05/18 08:05:54
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 6886.725408 VESTS |
| Transaction Info | Block #106152823/Trx 993fea3196a41d9bfe80c32bf0013796ecf65b05 |
View Raw JSON Data
{
"block": 106152823,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "6886.725408 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-18T08:05:54",
"trx_id": "993fea3196a41d9bfe80c32bf0013796ecf65b05",
"trx_in_block": 2,
"virtual_op": 0
}2026/05/13 11:41:45
2026/05/13 11:41:45
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 4174.515003 VESTS |
| Transaction Info | Block #106013849/Trx ccdf944478f2a57a5e6672a46eafcb2df7ddab6f |
View Raw JSON Data
{
"block": 106013849,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "4174.515003 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-13T11:41:45",
"trx_id": "ccdf944478f2a57a5e6672a46eafcb2df7ddab6f",
"trx_in_block": 5,
"virtual_op": 0
}2026/04/26 07:15:12
2026/04/26 07:15:12
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 6899.241164 VESTS |
| Transaction Info | Block #105520259/Trx e4dcfc6fcc046debe5ba350ecb8879d15bf47cc5 |
View Raw JSON Data
{
"block": 105520259,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "6899.241164 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-04-26T07:15:12",
"trx_id": "e4dcfc6fcc046debe5ba350ecb8879d15bf47cc5",
"trx_in_block": 2,
"virtual_op": 0
}2026/01/24 04:54:00
2026/01/24 04:54:00
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 4216.061822 VESTS |
| Transaction Info | Block #102877076/Trx 9563ccbc227aae0e81ccf6356e52c46e60edaf3b |
View Raw JSON Data
{
"block": 102877076,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "4216.061822 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-01-24T04:54:00",
"trx_id": "9563ccbc227aae0e81ccf6356e52c46e60edaf3b",
"trx_in_block": 0,
"virtual_op": 0
}2024/12/18 00:02:42
2024/12/18 00:02:42
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 4380.281019 VESTS |
| Transaction Info | Block #91323268/Trx 544a8b5282909de4be2a5e8bfcf7ad5ac9479bab |
View Raw JSON Data
{
"block": 91323268,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "4380.281019 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2024-12-18T00:02:42",
"trx_id": "544a8b5282909de4be2a5e8bfcf7ad5ac9479bab",
"trx_in_block": 4,
"virtual_op": 0
}2023/11/14 15:41:42
2023/11/14 15:41:42
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 4549.414551 VESTS |
| Transaction Info | Block #79877364/Trx eaf2a6f479c1bb3c85a0ce503d5dc5635c673768 |
View Raw JSON Data
{
"block": 79877364,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "4549.414551 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-11-14T15:41:42",
"trx_id": "eaf2a6f479c1bb3c85a0ce503d5dc5635c673768",
"trx_in_block": 2,
"virtual_op": 0
}2023/09/22 12:32:00
2023/09/22 12:32:00
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 7486.323337 VESTS |
| Transaction Info | Block #78365427/Trx a70cd93334d445a74e1395f1157b1cc3cc2aad0f |
View Raw JSON Data
{
"block": 78365427,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "7486.323337 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-09-22T12:32:00",
"trx_id": "a70cd93334d445a74e1395f1157b1cc3cc2aad0f",
"trx_in_block": 1,
"virtual_op": 0
}2022/11/03 19:43:42
2022/11/03 19:43:42
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 7708.374775 VESTS |
| Transaction Info | Block #69122847/Trx e85f7971f8b60bec9315937557d01aaf6083fbac |
View Raw JSON Data
{
"block": 69122847,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "7708.374775 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-11-03T19:43:42",
"trx_id": "e85f7971f8b60bec9315937557d01aaf6083fbac",
"trx_in_block": 0,
"virtual_op": 0
}2022/01/18 00:45:06
2022/01/18 00:45:06
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 7928.482376 VESTS |
| Transaction Info | Block #60825885/Trx e29def5c3e312d0941d9aad62db8ca628e722a87 |
View Raw JSON Data
{
"block": 60825885,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "7928.482376 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-01-18T00:45:06",
"trx_id": "e29def5c3e312d0941d9aad62db8ca628e722a87",
"trx_in_block": 104,
"virtual_op": 0
}2021/06/14 07:51:21
2021/06/14 07:51:21
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 8112.676664 VESTS |
| Transaction Info | Block #54616111/Trx c6dee88dd6828226b8c471ef3ff421b4a1ce2ece |
View Raw JSON Data
{
"block": 54616111,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "8112.676664 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2021-06-14T07:51:21",
"trx_id": "c6dee88dd6828226b8c471ef3ff421b4a1ce2ece",
"trx_in_block": 3,
"virtual_op": 0
}2020/12/11 18:01:51
2020/12/11 18:01:51
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 8300.098638 VESTS |
| Transaction Info | Block #49363315/Trx 90bb177c2d2c4c90ef4829682f0337b3bc6fd80e |
View Raw JSON Data
{
"block": 49363315,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "8300.098638 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-11T18:01:51",
"trx_id": "90bb177c2d2c4c90ef4829682f0337b3bc6fd80e",
"trx_in_block": 0,
"virtual_op": 0
}2020/12/06 11:36:57
2020/12/06 11:36:57
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49214830/Trx 25237a5730abc5c9d3f9d9ff96f71dfaa8a4970f |
View Raw JSON Data
{
"block": 49214830,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "1912.543513 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-06T11:36:57",
"trx_id": "25237a5730abc5c9d3f9d9ff96f71dfaa8a4970f",
"trx_in_block": 3,
"virtual_op": 0
}2020/12/05 21:39:36
2020/12/05 21:39:36
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 8306.306492 VESTS |
| Transaction Info | Block #49198400/Trx f31a9e084ed2a4902e4b8e917a6693e48272a3de |
View Raw JSON Data
{
"block": 49198400,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "8306.306492 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-05T21:39:36",
"trx_id": "f31a9e084ed2a4902e4b8e917a6693e48272a3de",
"trx_in_block": 7,
"virtual_op": 0
}2020/11/03 05:58:36
2020/11/03 05:58:36
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48274684/Trx e6cb688e85989272e988219ac024dd6258906f37 |
View Raw JSON Data
{
"block": 48274684,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "1920.017158 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-11-03T05:58:36",
"trx_id": "e6cb688e85989272e988219ac024dd6258906f37",
"trx_in_block": 1,
"virtual_op": 0
}2020/05/09 12:41:42
2020/05/09 12:41:42
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 8509.111851 VESTS |
| Transaction Info | Block #43225186/Trx dd5090eea3fd444a624f6c4a1c693bfd9c6d7232 |
View Raw JSON Data
{
"block": 43225186,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "8509.111851 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-09T12:41:42",
"trx_id": "dd5090eea3fd444a624f6c4a1c693bfd9c6d7232",
"trx_in_block": 13,
"virtual_op": 0
}2020/05/08 17:20:33
2020/05/08 17:20:33
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43202505/Trx e5fa3a7bd0be915d13fcd5bc5be532ef89431528 |
View Raw JSON Data
{
"block": 43202505,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "1953.311140 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-08T17:20:33",
"trx_id": "e5fa3a7bd0be915d13fcd5bc5be532ef89431528",
"trx_in_block": 7,
"virtual_op": 0
}2020/01/17 16:48:24
2020/01/17 16:48:24
| author | steemitboard |
| body | Congratulations @wakjal12! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@wakjal12/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@wakjal12) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=wakjal12)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | wakjal12 |
| parent permlink | tutorial-lumen-create-web-api |
| permlink | steemitboard-notify-wakjal12-20200117t164824000z |
| title | |
| Transaction Info | Block #40012372/Trx 066c11e985c3eee984069a55d372fcf11321fe57 |
View Raw JSON Data
{
"block": 40012372,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @wakjal12! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@wakjal12/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@wakjal12) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=wakjal12)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "wakjal12",
"parent_permlink": "tutorial-lumen-create-web-api",
"permlink": "steemitboard-notify-wakjal12-20200117t164824000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2020-01-17T16:48:24",
"trx_id": "066c11e985c3eee984069a55d372fcf11321fe57",
"trx_in_block": 13,
"virtual_op": 0
}2019/07/03 05:04:42
2019/07/03 05:04:42
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 8687.759955 VESTS |
| Transaction Info | Block #34329581/Trx 2831376540237475d8b1bf524af3236e84102e75 |
View Raw JSON Data
{
"block": 34329581,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "8687.759955 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-07-03T05:04:42",
"trx_id": "2831376540237475d8b1bf524af3236e84102e75",
"trx_in_block": 4,
"virtual_op": 0
}2019/01/17 17:39:57
2019/01/17 17:39:57
| author | steemitboard |
| body | Congratulations @wakjal12! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@wakjal12/birthday1.png</td><td>1 Year on Steemit</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@wakjal12)_</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | wakjal12 |
| parent permlink | tutorial-lumen-create-web-api |
| permlink | steemitboard-notify-wakjal12-20190117t173956000z |
| title | |
| Transaction Info | Block #29540710/Trx 1fda7029921c1caf4d611ba40db8a49f0ecc4dea |
View Raw JSON Data
{
"block": 29540710,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @wakjal12! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@wakjal12/birthday1.png</td><td>1 Year on Steemit</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@wakjal12)_</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "wakjal12",
"parent_permlink": "tutorial-lumen-create-web-api",
"permlink": "steemitboard-notify-wakjal12-20190117t173956000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-01-17T17:39:57",
"trx_id": "1fda7029921c1caf4d611ba40db8a49f0ecc4dea",
"trx_in_block": 5,
"virtual_op": 0
}2018/07/13 11:26:15
2018/07/13 11:26:15
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 8886.706801 VESTS |
| Transaction Info | Block #24138364/Trx 8543aa049ea5ff5abbf17fc1155b2175135898d9 |
View Raw JSON Data
{
"block": 24138364,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "8886.706801 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-07-13T11:26:15",
"trx_id": "8543aa049ea5ff5abbf17fc1155b2175135898d9",
"trx_in_block": 1,
"virtual_op": 0
}2018/05/11 02:52:42
2018/05/11 02:52:42
| delegatee | wakjal12 |
| delegator | steem |
| vesting shares | 29274.761587 VESTS |
| Transaction Info | Block #22324969/Trx 56c478c3a4993c860518ff9747d5f2101932001a |
View Raw JSON Data
{
"block": 22324969,
"op": [
"delegate_vesting_shares",
{
"delegatee": "wakjal12",
"delegator": "steem",
"vesting_shares": "29274.761587 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-05-11T02:52:42",
"trx_id": "56c478c3a4993c860518ff9747d5f2101932001a",
"trx_in_block": 9,
"virtual_op": 0
}wakjal12upvoted (100.00%) @jackadam / hamparan-sawah-yang-luas-membentang2018/04/13 10:33:48
wakjal12upvoted (100.00%) @jackadam / hamparan-sawah-yang-luas-membentang
2018/04/13 10:33:48
| author | jackadam |
| permlink | hamparan-sawah-yang-luas-membentang |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21528607/Trx b5ae5be4af96748c7708e8afa30e14da7f01d454 |
View Raw JSON Data
{
"block": 21528607,
"op": [
"vote",
{
"author": "jackadam",
"permlink": "hamparan-sawah-yang-luas-membentang",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-13T10:33:48",
"trx_id": "b5ae5be4af96748c7708e8afa30e14da7f01d454",
"trx_in_block": 20,
"virtual_op": 0
}wakjal12received 0.001 STEEM, 0.010 SBD, 0.010 SP author reward for @wakjal12 / tutorial-lumen-create-web-api2018/04/10 18:44:54
wakjal12received 0.001 STEEM, 0.010 SBD, 0.010 SP author reward for @wakjal12 / tutorial-lumen-create-web-api
2018/04/10 18:44:54
| author | wakjal12 |
| permlink | tutorial-lumen-create-web-api |
| sbd payout | 0.010 SBD |
| steem payout | 0.001 STEEM |
| vesting payout | 16.309368 VESTS |
| Transaction Info | Block #21452039/Virtual Operation #13 |
View Raw JSON Data
{
"block": 21452039,
"op": [
"author_reward",
{
"author": "wakjal12",
"permlink": "tutorial-lumen-create-web-api",
"sbd_payout": "0.010 SBD",
"steem_payout": "0.001 STEEM",
"vesting_payout": "16.309368 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-10T18:44:54",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 13
}utopian.payreceived 0.005 SP benefactor reward from @wakjal122018/04/10 18:44:54
utopian.payreceived 0.005 SP benefactor reward from @wakjal12
2018/04/10 18:44:54
| author | wakjal12 |
| benefactor | utopian.pay |
| permlink | tutorial-lumen-create-web-api |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 8.154684 VESTS |
| Transaction Info | Block #21452039/Virtual Operation #12 |
View Raw JSON Data
{
"block": 21452039,
"op": [
"comment_benefactor_reward",
{
"author": "wakjal12",
"benefactor": "utopian.pay",
"permlink": "tutorial-lumen-create-web-api",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "8.154684 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-10T18:44:54",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 12
}wakjal12received 0.001 STEEM, 0.012 SBD, 0.010 SP author reward for @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework2018/04/10 17:54:27
wakjal12received 0.001 STEEM, 0.012 SBD, 0.010 SP author reward for @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework
2018/04/10 17:54:27
| author | wakjal12 |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| sbd payout | 0.012 SBD |
| steem payout | 0.001 STEEM |
| vesting payout | 16.309398 VESTS |
| Transaction Info | Block #21451030/Virtual Operation #9 |
View Raw JSON Data
{
"block": 21451030,
"op": [
"author_reward",
{
"author": "wakjal12",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"sbd_payout": "0.012 SBD",
"steem_payout": "0.001 STEEM",
"vesting_payout": "16.309398 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-10T17:54:27",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 9
}utopian.payreceived 0.006 SP benefactor reward from @wakjal122018/04/10 17:54:27
utopian.payreceived 0.006 SP benefactor reward from @wakjal12
2018/04/10 17:54:27
| author | wakjal12 |
| benefactor | utopian.pay |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 10.193374 VESTS |
| Transaction Info | Block #21451030/Virtual Operation #8 |
View Raw JSON Data
{
"block": 21451030,
"op": [
"comment_benefactor_reward",
{
"author": "wakjal12",
"benefactor": "utopian.pay",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "10.193374 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-10T17:54:27",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 8
}steemitboardupvoted (1.00%) @wakjal12 / tutorial-lumen-create-web-api2018/04/04 01:56:48
steemitboardupvoted (1.00%) @wakjal12 / tutorial-lumen-create-web-api
2018/04/04 01:56:48
| author | wakjal12 |
| permlink | tutorial-lumen-create-web-api |
| voter | steemitboard |
| weight | 100 (1.00%) |
| Transaction Info | Block #21259097/Trx 83aa792b8efd9d18335945ed03dbf0b5d6e6b460 |
View Raw JSON Data
{
"block": 21259097,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "tutorial-lumen-create-web-api",
"voter": "steemitboard",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2018-04-04T01:56:48",
"trx_id": "83aa792b8efd9d18335945ed03dbf0b5d6e6b460",
"trx_in_block": 26,
"virtual_op": 0
}2018/04/04 01:56:45
2018/04/04 01:56:45
| author | steemitboard |
| body | Congratulations @wakjal12! You have completed some achievement on Steemit and have been rewarded with new badge(s) : [](http://steemitboard.com/@wakjal12) Award for the number of posts published Click on any badge to view your own Board of Honor on SteemitBoard. To support your work, I also upvoted your post! For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard) If you no longer want to receive notifications, reply to this comment with the word `STOP` > Upvote this notification to help all Steemit users. Learn why [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)! Do not miss the [last announcement](https://steemit.com/easter/@steemitboard/celebrate-easter-with-steemitboard-the-eggs-opened-and-guess-what-popped-out) from @steemitboard! |
| json metadata | {"image":["https://steemitboard.com/img/notifications.png"]} |
| parent author | wakjal12 |
| parent permlink | tutorial-lumen-create-web-api |
| permlink | steemitboard-notify-wakjal12-20180404t015645000z |
| title | |
| Transaction Info | Block #21259096/Trx a05af3b54979173bba8d4c75f71f4f19e558e493 |
View Raw JSON Data
{
"block": 21259096,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @wakjal12! You have completed some achievement on Steemit and have been rewarded with new badge(s) :\n\n[](http://steemitboard.com/@wakjal12) Award for the number of posts published\n\nClick on any badge to view your own Board of Honor on SteemitBoard.\n\nTo support your work, I also upvoted your post!\nFor more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)\n\nIf you no longer want to receive notifications, reply to this comment with the word `STOP`\n\n> Upvote this notification to help all Steemit users. Learn why [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!\n\nDo not miss the [last announcement](https://steemit.com/easter/@steemitboard/celebrate-easter-with-steemitboard-the-eggs-opened-and-guess-what-popped-out) from @steemitboard!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notifications.png\"]}",
"parent_author": "wakjal12",
"parent_permlink": "tutorial-lumen-create-web-api",
"permlink": "steemitboard-notify-wakjal12-20180404t015645000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-04-04T01:56:45",
"trx_id": "a05af3b54979173bba8d4c75f71f4f19e558e493",
"trx_in_block": 11,
"virtual_op": 0
}2018/04/03 21:11:48
2018/04/03 21:11:48
| author | amosbastian |
| body | Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules), and is considered as **plagiarism**. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever. Plagiarised from [here](https://www.codepolitan.com/mudahnya-membuat-antarmuka-login-cantik-dengan-flutter-5aa46d29e03d1). You can contact us on [Discord](https://discord.gg/uTyJkNm). **[[utopian-moderator]](https://utopian.io/moderators)** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | wakjal12 |
| parent permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| permlink | re-wakjal12-how-to-create-a-login-user-interface-with-flutter-sdk-framework-20180403t211145522z |
| title | |
| Transaction Info | Block #21253398/Trx 76121f94334ce22a2cc0205305aea4649f6f1cd5 |
View Raw JSON Data
{
"block": 21253398,
"op": [
"comment",
{
"author": "amosbastian",
"body": "Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules), and is considered as **plagiarism**. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever.\n\nPlagiarised from [here](https://www.codepolitan.com/mudahnya-membuat-antarmuka-login-cantik-dengan-flutter-5aa46d29e03d1).\n\nYou can contact us on [Discord](https://discord.gg/uTyJkNm).\n**[[utopian-moderator]](https://utopian.io/moderators)**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "wakjal12",
"parent_permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"permlink": "re-wakjal12-how-to-create-a-login-user-interface-with-flutter-sdk-framework-20180403t211145522z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T21:11:48",
"trx_id": "76121f94334ce22a2cc0205305aea4649f6f1cd5",
"trx_in_block": 2,
"virtual_op": 0
}wakjal12published a new post: how-to-create-a-login-user-interface-with-flutter-sdk-framework2018/04/03 21:10:57
wakjal12published a new post: how-to-create-a-login-user-interface-with-flutter-sdk-framework
2018/04/03 21:10:57
| author | wakjal12 |
| body | #### What Will I Learn? **I will learn :** * **Create a project** * **Create a login page** * **Create a main page** #### Requirements * The [Dart SDK](https://www.dartlang.org/install) and the [Flutter SDK](https://flutter.io/get-started/install/) * [Visual Studio Code](https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395) * [AngularDart](https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395) * The profile photo (wakjal12.jpg) App Logo (Logo.png) Family (favorite.ttf) #### Difficulty * **Intermediate** #### Tutorial Contents * **Create a project** Now I will make a project, to make a project, I must run editor VS Code and then activate the feature ```dart preview 2``` from the menu ```File > Preferences > User Settings``` then search for the ```dart.previewDart2``` and set the value to ```true```. Now create a new project by pressing the key combinations ```CTRL+SHIFT+P``` and write the name of the project for example ```login_app``` For the application name should be all lowercase and should not contain spaces and also we have to make an ```assets``` folder in the project directory and copy all file preparation **wakjal12.jpg/logo.png/favorite.ttf** into the folder assets. This file must be explained in advance on the file ```pubspec.yaml``` in order to be used , add the following line right below the configuration of the ```flutter``` like this. ``` language flutter: uses-material-design: true assets: - assets/logo.png - assets/wakjal12.jpg fonts: - family: Favorite fonts: - asset: assets/Favorite.ttf ``` Then in the main file ```main.dart``` remove all the code up to the only remaining class ```MyApp``` like this: ``` language import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @omegaco Widget build(BuildContext context) { return MaterialApp( title: 'Kodenegara', debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: Colors.lightBlue, fontFamily: 'Favorite', ), home: null, ); } } ``` * **Create a login page** Now I will create a login page, to create a login page, we must create a new file with a right click on a folder ```lib``` next give the name of the ```login_page.dart``` On the login page we need few widgets that the widget image for the logo, the field for email, field for password, login button and last button is flat to forget the password. More code for the ```login_page.dart``` like this. ``` language import 'package:flutter/material.dart'; import 'package:login/home_page.dart'; class LoginPage extends StatefulWidget { static String tag = 'login-page'; @omegaco _LoginPageState createState() => new _LoginPageState(); } class _LoginPageState extends State<LoginPage> { @omegaco Widget build(BuildContext context) { final logo = Cool( tag: 'cool', child: CircleAvatar( backgroundColor: Colors.transparant, radius: 48.0, child: Image.asset('assets/logo.png'), ), ); final email = TextFormField( keyboardType: TextInputType.emailAddress, autofocus: false, initialValue: '[email protected]', decoration: InputDecoration( hintText: 'Email', contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)), ), ); final password = TextFormField( autofocus: false, initialValue: 'some password', obscureText: true, decoration: InputDecoration( hintText: 'Password', contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)), ), ); final loginButton = Padding( padding: EdgeInsets.symmetric(vertical: 16.0), child: Material( borderRadius: BorderRadius.circular(30.0), shadowColor: Colors.lightBlueAccent.shade100, elevation: 5.0, child: MaterialButton( minWidth: 200.0, height: 42.0, onPressed: () { Navigator.of(context).pushNamed(HomePage.tag); }, color: Colors.lightBlueAccent, child: Text('Log In', style: TextStyle(color: Colors.white)), ), ), ); final forgotLabel = FlatButton( child: Text( 'Forgot password?', style: TextStyle(color: Colors.black54), ), onPressed: () {}, ); return Scaffold( backgroundColor: Colors.white, body: Center( child: ListView( shrinkWrap: true, padding: EdgeInsets.only(left: 24.0, right: 24.0), children: <Widget>[ logo, SizedBox(height: 48.0), email, SizedBox(height: 8.0), password, SizedBox(height: 24.0), loginButton, forgotLabel ], ), ), ); } } ``` * **Create a main page** Now I will create a login page, to create a login page, we must create a new file for the main page with the name of ```home_page.dart``` On this page we will only display the widget on the profile picture of the assets ```wakjal12.jpg``` and a text widget for additional information. Widgets profile photo that will be wrapped by the widget ```cool``` with tag names same as the tag cool ```logo``` on the ```login_page.dart```. Write the code like this. ``` language import 'package:flutter/material.dart'; class HomePage extends StatelessWidget { static String tag = 'home-page'; @omegaco Widget build(BuildContext context) { final wakjal12 = Cool( tag: 'cool', child: Padding( padding: EdgeInsets.all(16.0), child: CircleAvatar( radius: 72.0, backgroundColor: Colors.transparant, backgroundImage: AssetImage('assets/wakjal12.jpg'), ), ), ); final welcome = Padding( padding: EdgeInsets.all(8.0), child: Text( 'Welcome Wakjal12', style: TextStyle(fontSize: 28.0, color: Colors.white), ), ); final ramlan = Padding( padding: EdgeInsets.all(8.0), child: Text( 'Ramlan berasal dari aceh. Dia seorang penyanyi. Tinggal disabang.', style: TextStyle(fontSize: 16.0, color: Colors.white), ), ); final body = Container( width: MediaQuery.of(context).size.width, padding: EdgeInsets.all(28.0), decoration: BoxDecoration( gradient: LinearGradient(colors: [ Colors.blue, Colors.lightBlueAccent, ]), ), child: Column( children: <Widget>[wakjal12, welcome, ramlan], ), ); return Scaffold( body: body, ); } } ``` Next we return to the ```main.dart``` and add the code to the navigation of the router like this. ``` language final routes = <String, WidgetBuilder>{ LoginPage.tag: (context) => LoginPage(), HomePage.tag: (context) => HomePage(), }; ``` Now set the attributes of the ```routes``` widget ```MaterialApp``` with the object of the ```routes``` above. Also set for the property the home becomes the object of login_page like this ```LoginPage()``` So the complete code to ```main``` as the following. ``` language import 'package:flutter/material.dart'; import 'login_page.dart'; import 'home_page.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { final routes = <String, WidgetBuilder>{ LoginPage.tag: (context) => LoginPage(), HomePage.tag: (context) => HomePage(), }; @omegaco Widget build(BuildContext context) { return MaterialApp( title: 'Kodenegara', debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: Colors.lightBlue, fontFamily: 'Favorite', ), home: LoginPage(), routes: routes, ); } } ``` Now run the application Flutter by pressing the ```F5``` but don't forget to start the Android Emulator or IOS Simulator. May be useful and Thank you <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/how-to-create-a-login-user-interface-with-flutter-sdk-framework">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":31792824,"name":"flutter","full_name":"flutter/flutter","html_url":"https://github.com/flutter/flutter","fork":false,"owner":{"login":"flutter"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","tutorial","opensource","flutter"],"users":["omegaco","gmail.com"],"links":["https://www.dartlang.org/install","https://flutter.io/get-started/install/","https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395","https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395"],"moderator":{"account":"amosbastian","time":"2018-04-03T21:10:56.259Z","flagged":true,"reviewed":false,"pending":false},"questions":[],"score":null} |
| parent author | |
| parent permlink | utopian-io |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| title | How to create a login user interface with Flutter SDK Framework |
| Transaction Info | Block #21253381/Trx 0f2639bce3b4c53756ae0da4469811f06db4c753 |
View Raw JSON Data
{
"block": 21253381,
"op": [
"comment",
{
"author": "wakjal12",
"body": "#### What Will I Learn?\n\n**I will learn :**\n\n* **Create a project**\n\n* **Create a login page**\n\n* **Create a main page**\n\n#### Requirements\n\n* The [Dart SDK](https://www.dartlang.org/install) and the [Flutter SDK](https://flutter.io/get-started/install/)\n\n* [Visual Studio Code](https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395)\n\n* [AngularDart](https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395)\n\n* The profile photo (wakjal12.jpg)\nApp Logo (Logo.png)\nFamily (favorite.ttf)\n\n\n#### Difficulty\n\n* **Intermediate**\n\n\n#### Tutorial Contents\n\n* **Create a project**\n\nNow I will make a project, to make a project, I must run editor VS Code and then activate the feature ```dart preview 2```\nfrom the menu\n```File > Preferences > User Settings```\nthen search for the ```dart.previewDart2``` and set the value to ```true```.\n\nNow create a new project by pressing the key combinations ```CTRL+SHIFT+P``` and write the name of the project for example ```login_app``` For the application name should be all lowercase and should not contain spaces and also we have to make an ```assets``` folder in the project directory and copy all file preparation **wakjal12.jpg/logo.png/favorite.ttf** into the folder assets. This file must be explained in advance on the file ```pubspec.yaml``` in order to be used , add the following line right below the configuration of the ```flutter``` like this.\n\n``` language\nflutter:\n uses-material-design: true\n assets:\n - assets/logo.png\n - assets/wakjal12.jpg\n fonts:\n - family: Favorite\n fonts:\n - asset: assets/Favorite.ttf\n\n```\n\nThen in the main file ```main.dart``` remove all the code up to the only remaining class ```MyApp``` like this:\n\n``` language\nimport 'package:flutter/material.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n @omegaco\n Widget build(BuildContext context) {\n return MaterialApp(\n title: 'Kodenegara',\n debugShowCheckedModeBanner: false,\n theme: ThemeData(\n primarySwatch: Colors.lightBlue,\n fontFamily: 'Favorite',\n ),\n home: null,\n );\n }\n}\n\n```\n\n\n* **Create a login page**\n\nNow I will create a login page, to create a login page, we must create a new file with a right click on a folder ```lib``` next give the name of the ```login_page.dart``` On the login page we need few widgets that the widget image for the logo, the field for email, field for password, login button and last button is flat to forget the password. More code for the ```login_page.dart``` like this.\n\n\n``` language\nimport 'package:flutter/material.dart';\nimport 'package:login/home_page.dart';\n\nclass LoginPage extends StatefulWidget {\n static String tag = 'login-page';\n @omegaco\n _LoginPageState createState() => new _LoginPageState();\n}\n\nclass _LoginPageState extends State<LoginPage> {\n @omegaco\n Widget build(BuildContext context) {\n final logo = Cool(\n tag: 'cool',\n child: CircleAvatar(\n backgroundColor: Colors.transparant,\n radius: 48.0,\n child: Image.asset('assets/logo.png'),\n ),\n );\n\n final email = TextFormField(\n keyboardType: TextInputType.emailAddress,\n autofocus: false,\n initialValue: '[email protected]',\n decoration: InputDecoration(\n hintText: 'Email',\n contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),\n border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),\n ),\n );\n\n final password = TextFormField(\n autofocus: false,\n initialValue: 'some password',\n obscureText: true,\n decoration: InputDecoration(\n hintText: 'Password',\n contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),\n border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),\n ),\n );\n\n final loginButton = Padding(\n padding: EdgeInsets.symmetric(vertical: 16.0),\n child: Material(\n borderRadius: BorderRadius.circular(30.0),\n shadowColor: Colors.lightBlueAccent.shade100,\n elevation: 5.0,\n child: MaterialButton(\n minWidth: 200.0,\n height: 42.0,\n onPressed: () {\n Navigator.of(context).pushNamed(HomePage.tag);\n },\n color: Colors.lightBlueAccent,\n child: Text('Log In', style: TextStyle(color: Colors.white)),\n ),\n ),\n );\n\n final forgotLabel = FlatButton(\n child: Text(\n 'Forgot password?',\n style: TextStyle(color: Colors.black54),\n ),\n onPressed: () {},\n );\n\n return Scaffold(\n backgroundColor: Colors.white,\n body: Center(\n child: ListView(\n shrinkWrap: true,\n padding: EdgeInsets.only(left: 24.0, right: 24.0),\n children: <Widget>[\n logo,\n SizedBox(height: 48.0),\n email,\n SizedBox(height: 8.0),\n password,\n SizedBox(height: 24.0),\n loginButton,\n forgotLabel\n ],\n ),\n ),\n );\n }\n}\n\n```\n\n* **Create a main page**\n\nNow I will create a login page, to create a login page, we must create a new file for the main page with the name of ```home_page.dart``` On this page we will only display the widget on the profile picture of the assets ```wakjal12.jpg``` and a text widget for additional information. Widgets profile photo that will be wrapped by the widget ```cool``` with tag names same as the tag cool ```logo``` on the ```login_page.dart```. Write the code like this.\n\n``` language\nimport 'package:flutter/material.dart';\n\nclass HomePage extends StatelessWidget {\n static String tag = 'home-page';\n\n @omegaco\n Widget build(BuildContext context) {\n final wakjal12 = Cool(\n tag: 'cool',\n child: Padding(\n padding: EdgeInsets.all(16.0),\n child: CircleAvatar(\n radius: 72.0,\n backgroundColor: Colors.transparant,\n backgroundImage: AssetImage('assets/wakjal12.jpg'),\n ),\n ),\n );\n\n final welcome = Padding(\n padding: EdgeInsets.all(8.0),\n child: Text(\n 'Welcome Wakjal12',\n style: TextStyle(fontSize: 28.0, color: Colors.white),\n ),\n );\n\n final ramlan = Padding(\n padding: EdgeInsets.all(8.0),\n child: Text(\n 'Ramlan berasal dari aceh. Dia seorang penyanyi. Tinggal disabang.',\n style: TextStyle(fontSize: 16.0, color: Colors.white),\n ),\n );\n\n final body = Container(\n width: MediaQuery.of(context).size.width,\n padding: EdgeInsets.all(28.0),\n decoration: BoxDecoration(\n gradient: LinearGradient(colors: [\n Colors.blue,\n Colors.lightBlueAccent,\n ]),\n ),\n child: Column(\n children: <Widget>[wakjal12, welcome, ramlan],\n ),\n );\n\n return Scaffold(\n body: body,\n );\n }\n}\n\n```\n\n\nNext we return to the ```main.dart``` and add the code to the navigation of the router like this.\n\n\n\n``` language\nfinal routes = <String, WidgetBuilder>{\n LoginPage.tag: (context) => LoginPage(),\n HomePage.tag: (context) => HomePage(),\n };\n```\n\n\nNow set the attributes of the ```routes``` widget ```MaterialApp``` with the object of the ```routes``` above. Also set for the property the home becomes the object of login_page like this ```LoginPage()``` So the complete code to ```main``` as the following.\n\n``` language\nimport 'package:flutter/material.dart';\nimport 'login_page.dart';\nimport 'home_page.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n \n final routes = <String, WidgetBuilder>{\n LoginPage.tag: (context) => LoginPage(),\n HomePage.tag: (context) => HomePage(),\n };\n\n @omegaco\n Widget build(BuildContext context) {\n return MaterialApp(\n title: 'Kodenegara',\n debugShowCheckedModeBanner: false,\n theme: ThemeData(\n primarySwatch: Colors.lightBlue,\n fontFamily: 'Favorite',\n ),\n home: LoginPage(),\n routes: routes,\n );\n }\n}\n\n```\n\nNow run the application Flutter by pressing the ```F5``` but don't forget to start the Android Emulator or IOS Simulator.\n\nMay be useful and Thank you\n\n\n\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/how-to-create-a-login-user-interface-with-flutter-sdk-framework\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":31792824,\"name\":\"flutter\",\"full_name\":\"flutter/flutter\",\"html_url\":\"https://github.com/flutter/flutter\",\"fork\":false,\"owner\":{\"login\":\"flutter\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"tutorials\",\"tags\":[\"utopian-io\",\"tutorial\",\"opensource\",\"flutter\"],\"users\":[\"omegaco\",\"gmail.com\"],\"links\":[\"https://www.dartlang.org/install\",\"https://flutter.io/get-started/install/\",\"https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395\",\"https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395\"],\"moderator\":{\"account\":\"amosbastian\",\"time\":\"2018-04-03T21:10:56.259Z\",\"flagged\":true,\"reviewed\":false,\"pending\":false},\"questions\":[],\"score\":null}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"title": "How to create a login user interface with Flutter SDK Framework"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T21:10:57",
"trx_id": "0f2639bce3b4c53756ae0da4469811f06db4c753",
"trx_in_block": 16,
"virtual_op": 0
}2018/04/03 21:04:57
2018/04/03 21:04:57
| author | amosbastian |
| body | Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules), and is considered as **plagiarism**. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever. Plagiarised from [here](https://medium.com/@ocittwo/membangun-web-api-dengan-lumen-5-3-part-1-d6a3522772a4). You can contact us on [Discord](https://discord.gg/uTyJkNm). **[[utopian-moderator]](https://utopian.io/moderators)** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | wakjal12 |
| parent permlink | tutorial-lumen-create-web-api |
| permlink | re-wakjal12-tutorial-lumen-create-web-api-20180403t210454050z |
| title | |
| Transaction Info | Block #21253261/Trx 0c4863034cc9fa97c2053a35783bf5eba53240a2 |
View Raw JSON Data
{
"block": 21253261,
"op": [
"comment",
{
"author": "amosbastian",
"body": "Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules), and is considered as **plagiarism**. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever.\n\nPlagiarised from [here](https://medium.com/@ocittwo/membangun-web-api-dengan-lumen-5-3-part-1-d6a3522772a4).\n\nYou can contact us on [Discord](https://discord.gg/uTyJkNm).\n**[[utopian-moderator]](https://utopian.io/moderators)**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "wakjal12",
"parent_permlink": "tutorial-lumen-create-web-api",
"permlink": "re-wakjal12-tutorial-lumen-create-web-api-20180403t210454050z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T21:04:57",
"trx_id": "0c4863034cc9fa97c2053a35783bf5eba53240a2",
"trx_in_block": 47,
"virtual_op": 0
}wakjal12published a new post: tutorial-lumen-create-web-api2018/04/03 21:04:33
wakjal12published a new post: tutorial-lumen-create-web-api
2018/04/03 21:04:33
| author | wakjal12 |
| body | #### What Will I Learn? **I will learn** * **Create a project web API with Lumen** * **Configuration Lumen** * **Database Migration Lumen** * **Configuration Model** * **Routing in the Lumen** * **Controller at Lumen** * **Validation of the access token with Middleware** * **Providers** #### Requirements * A PC/laptop with any Operating system such as Linux, Mac OSX, Windows OS * Internet Connection * Composer * Google Chrome browser * PHP * OpenSSL PHP Extension * PDO PHP Extension * Mbstring PHP Extension #### Difficulty * Intermediate #### Tutorial Contents * **Create a project web API with Lumen** Lumen utilizes composer to manage its dependencies so before installing lumen, make sure you have composer already installed. You can download composer [here](https://getcomposer.org/) Now we will create a project,here we use the most easy way is using composer. ``` language composer create-project --prefer-dist laravel/lumen lumen-web-api ``` * **Configuration Lumen** Now we do the configuration for the database connection as usual we do if using laravel, namely in the file .env like this. ``` language APP_ENV=local APP_DEBUG=true APP_KEY=base64:JHdpwwjAk2lQxJtLfvoLxy8D2vQZW8ats0GEYF9GuLaCY= DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=lumen-web-api DB_USERNAME=root DB_PASSWORD=omegacore*9 CACHE_DRIVER=memcached QUEUE_DRIVER=sync ``` Here we use a mysql database and with the name of the database lumens-web-api. Next we go to file **boostrap/app.php.** Here we will enable the auth and eloquent. For that we need to remove the comments in some sections such as the following. ``` language $app->withFacades(); $app->withEloquent(); $app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]); $app->register(App\Providers\AuthServiceProvider::class); ``` Now open console and go to the public directory and we run with the following command. ``` language php -S localhost:1000 ``` * **Database Migration Lumen** Database migration is one of the features of the framework laravel which database using laravel we can make the schema of the database without we create a mysql query that is quite long. Now we will create the schema for the user. In the lumen there is also a php artisan who can create the class by using the console. Directly we create a database migration by running a command such as the following. ``` language php artisan make:migration create_users_table --create=users ``` And then in **/lumen-web-api/database/migrations/2018_04_01_186356_create_users_table.php** and create a schema like the following. ``` language Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('username'); $table->string('email')->unique(); $table->string('password'); $table->string('api_token'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); ``` Schema is a standard that we use when creating a table user. Migration laravel already support many of the features in the create schema database. If you are finished with the create schema now we do the migration by running the following command. ``` language php artisan migrate ``` If successful then we will got the message Migration table created successfully. If you still can't get that message check again codingan there's probably something wrong. * **Configuration Model** Now we will do the configuration of the model. With this model later will be easier for us to takes the query to the database. Please open file **/lumen-web-api/app/User.php.** This Class is already there after we install the lumen. For the configuration such as the following. ``` language /** * The attributes that are mass assignable. * * @wakjal12 */ protected $fillable = [ 'username', 'email', 'password', 'api_token' ]; /** * The attributes excluded from the model's JSON form. * * @wakjal12 */ protected $hidden = [ 'password', 'api_token' ]; ``` From the code above that needs attention is the variable **$fillable** where it serves to give permission any column of the database user that we can use. And for the variable **$hidden** this later function that is not displayed when we do a query to get all the data from the column that exist in the user database. * **Routing in the Lumen** Now we will try to make a route according to the needs of the API which we will create. Following this route from the web API that we will create. ``` language $app->get('/', function () use ($app) { $res['success'] = true; $res['result'] = "Tutorial how to create a web API!"; return response($res); }); $app->post('/login', 'LoginController@index'); $app->post('/register', 'UserController@register'); $app->get('/user/{id}', ['middleware' => 'auth', 'uses' => 'UserController@get_user']); ``` On the last line of the above route was different, because here we will use middleware from the lumen to verify the access token of the user who will use the API that we create. * **Controller at Lumen** Controller at lumen own the same with a controller in Laravel where this function for us to use as the business logic of the application that we make. To create a controller in the lumen is a little different with laravel because the lumen is no feature to make the controller with artisan. So here we create a file controller manually. First we will create a controller UserController. The same as in laravel we create a file controller in the **app/Http/Controllers/** The following files **UserController :** ``` language 1 <?php 2 3 namespace App\Http\Controllers; 4 5 use Illuminate\Http\Request; 6 use App\User; 7 8 class UserController extends Controller 9 { 10 /** 11 * Register new user 12 * 13 * @wakjal $request Request 14 */ 15 public function register(Request $request 16 { 17 $hasher = app()->make('hash'); 18 19 $username = $request->input('username 20 $email = $request->input('[email protected]'); 21 $password = $hasher->make($request 22 23 $register = User::create([ 24 'username'=> $username, 25 'email'=> $email, 26 'password'=> $password, 27 ]); 28 29 if ($register) { 30 $res['success'] = true; 31 $res['message'] = 'Success register! 32 33 return response($res); 34 }else{ 35 $res['success'] = false; 36 $res['message'] = 'Failed to register! 37 38 return response($res); 39 } 40 } 41 42 /** 43 * Get user by id 44 * 45 * URL /user/{id} 46 */ 47 public function get_user(Request $request 48 { 49 $user = User::where('id', $id)->get(); 50 if ($user) { 51 $res['success'] = true; 52 $res['message'] = $user; 53 54 return response($res); 55 }else{ 56 $res['success'] = false; 57 $res['message'] = 'Cannot find user! 58 59 return response($res); 60 } 61 } 62 63 } ``` After creating a function to a list we will create the class LoginController where with this controller we will give the token to the user that will be used as permission to access all the activities in this API. Here for class LoginController. ``` language 1 <?php 2 3 namespace App\Http\Controllers; 4 5 use Illuminate\Http\Request; 6 use App\User; 7 8 class LoginController extends Controller 9 { 10 /** 11 * Index login controller 12 * 13 * success login api_token 14 */ 15 public function index(Request $request 16 { 17 $hasher = app()->make('hash'); 18 19 $email = $request->input('email'); 20 $password = $request->input('password 21 22 $login = User::where('email', $email 23 if (!$login) { 24 $res['success'] = false; 25 $res['message'] = [email protected] 26 27 return response($res); 28 }else{ 29 if ($hasher->check($password, 30 $api_token = sha1(time()); 31 $create_token = User::where( 32 if ($create_token) { 33 $res['success'] = true 34 $res['api_token'] = $api_token 35 $res['message'] = $login 36 37 return response($res); 38 } 39 }else{ 40 $res['success'] = true; 41 $res['message'] = [email protected] 42 43 return response($res); 44 } 45 } 46 } 47 } ``` * **Validation of the access token with the Middleware** After we create a function for login, register and get the user we will now create a validation of the access token using middleware. middleware is a function that is run before the request gets to the controller. With middleware we can check whether the user has permission to access from this API. To enable middlleware do steps like this. ``` language $app->withFacades(); $app->withEloquent(); $app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]); $app->register(App\Providers\AuthServiceProvider::class); ``` Actually this already exists in the file boostrap/app.php, but by default the above code is still in the comments so we don't need to retype to enable the middleware only need to uncomment the code in the code above. Now we will create the validation how do we know if this user get permissions to access the API that we create. when the user request we will check if he sent the token which he had and if so whether token it exists in the database. Here every user can have access token each so later token will vary from each user. For that we need to add the code below in the file **app/Http/Middleware/Authenticate.php** The following code. ``` language 1 public function handle($request, Closure $next, $guard = null) 2 { 3 if ($this->auth->guard($guard)->guest()) { 4 if ($request->has('api_token')) { 5 $token = $request->input('api_token'); 6 $check_token = User::where('api_token', $token)->first(); 7 if ($check_token == null) { 8 $res['success'] = false; 9 $res['message'] = 'Permission not allowed!'; 10 11 return response($res); 12 } 13 }else{ 14 $res['success'] = false; 15 $res['message'] = 'Login please!'; 16 17 return response($res); 18 } 19 } 20 return $next($request); 21 } ``` * **Providers** This providers is a class that is executed after the user is successfully verified. So if the user has a login and access the API with a token that they have got, we can get information from the user who have the token, in this case the Provider has the role to get the data of the user based on this token. **app/Providers/AuthServiceProvider.php** to get the user data based on the token has been verified, ``` language $this->app['auth']->viaRequest('api', function ($request) { if ($request->input('api_token')) { return User::where('api_token', $request->input('api_token'))->first(); } }); ``` The above code is the code which resides in the method boot (> ) where the boot itself is the method used to get user data based on the token that has been verified by the middleware. In this case we do the query into the table users based on api_token we have received from the middleware. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/tutorial-lumen-create-web-api">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":33904351,"name":"lumen","full_name":"laravel/lumen","html_url":"https://github.com/laravel/lumen","fork":false,"owner":{"login":"laravel"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","tutorial","opensource","lumen"],"users":["wakjal12","index","register","get","wakjal","gmail.com","yahoo.com"],"links":["https://getcomposer.org/"],"moderator":{"account":"amosbastian","time":"2018-04-03T21:04:34.475Z","flagged":true,"reviewed":false,"pending":false},"questions":[],"score":null} |
| parent author | |
| parent permlink | utopian-io |
| permlink | tutorial-lumen-create-web-api |
| title | Tutorial Lumen: Create Web API |
| Transaction Info | Block #21253253/Trx 3a393df1601d16b3bbc82815608d660a749d4795 |
View Raw JSON Data
{
"block": 21253253,
"op": [
"comment",
{
"author": "wakjal12",
"body": "#### What Will I Learn?\n\n**I will learn**\n\n* **Create a project web API with Lumen**\n\n* **Configuration Lumen**\n\n* **Database Migration Lumen**\n\n* **Configuration Model**\n\n* **Routing in the Lumen**\n\n* **Controller at Lumen**\n\n* **Validation of the access token with Middleware**\n\n* **Providers**\n\n#### Requirements\n\n* A PC/laptop with any Operating system such as Linux, Mac OSX, Windows OS\n* Internet Connection\n* Composer\n* Google Chrome browser\n* PHP\n* OpenSSL PHP Extension\n* PDO PHP Extension\n* Mbstring PHP Extension\n\n#### Difficulty\n\n* Intermediate\n\n#### Tutorial Contents\n\n* **Create a project web API with Lumen**\n\nLumen utilizes composer to manage its dependencies so before installing lumen, make sure you have composer already installed. You can download composer [here](https://getcomposer.org/)\n\nNow we will create a project,here we use the most easy way is using composer. \n\n``` language\ncomposer create-project --prefer-dist laravel/lumen lumen-web-api\n```\n* **Configuration Lumen**\nNow we do the configuration for the database connection as usual we do if using laravel, namely in the file .env like this. \n\n``` language\nAPP_ENV=local\nAPP_DEBUG=true\nAPP_KEY=base64:JHdpwwjAk2lQxJtLfvoLxy8D2vQZW8ats0GEYF9GuLaCY=\nDB_CONNECTION=mysql\nDB_HOST=localhost\nDB_PORT=3306\nDB_DATABASE=lumen-web-api\nDB_USERNAME=root\nDB_PASSWORD=omegacore*9\nCACHE_DRIVER=memcached\nQUEUE_DRIVER=sync\n\n```\n\nHere we use a mysql database and with the name of the database lumens-web-api.\nNext we go to file **boostrap/app.php.** Here we will enable the auth and eloquent. For that we need to remove the comments in some sections such as the following. \n\n``` language\n$app->withFacades();\n$app->withEloquent();\n$app->routeMiddleware([\n 'auth' => App\\Http\\Middleware\\Authenticate::class,\n]);\n\n$app->register(App\\Providers\\AuthServiceProvider::class);\n\n```\nNow open console and go to the public directory and we run with the following command.\n\n``` language\nphp -S localhost:1000\n```\n\n* **Database Migration Lumen**\n\nDatabase migration is one of the features of the framework laravel which database using laravel we can make the schema of the database without we create a mysql query that is quite long. Now we will create the schema for the user. In the lumen there is also a php artisan who can create the class by using the console. Directly we create a database migration by running a command such as the following. \n\n``` language\nphp artisan make:migration create_users_table --create=users\n```\n\nAnd then in **/lumen-web-api/database/migrations/2018_04_01_186356_create_users_table.php** and create a schema like the following. \n\n``` language\nSchema::create('users', function (Blueprint $table) {\n $table->increments('id');\n $table->string('username');\n $table->string('email')->unique();\n $table->string('password');\n $table->string('api_token');\n $table->rememberToken();\n $table->timestamps();\n $table->softDeletes();\n});\n\n```\nSchema is a standard that we use when creating a table user. Migration laravel already support many of the features in the create schema database.\nIf you are finished with the create schema now we do the migration by running the following command. \n\n``` language\nphp artisan migrate\n```\n\nIf successful then we will got the message Migration table created successfully. If you still can't get that message check again codingan there's probably something wrong.\n\n* **Configuration Model**\nNow we will do the configuration of the model. With this model later will be easier for us to takes the query to the database. Please open file **/lumen-web-api/app/User.php.** This Class is already there after we install the lumen. For the configuration such as the following. \n\n``` language\n/**\n * The attributes that are mass assignable.\n *\n * @wakjal12\n */\n protected $fillable = [\n 'username', 'email', 'password', 'api_token'\n ];\n/**\n * The attributes excluded from the model's JSON form.\n *\n * @wakjal12\n */\n protected $hidden = [\n 'password', 'api_token'\n ];\n\n```\nFrom the code above that needs attention is the variable **$fillable** where it serves to give permission any column of the database user that we can use. And for the variable **$hidden** this later function that is not displayed when we do a query to get all the data from the column that exist in the user database.\n\n* **Routing in the Lumen**\n\n\nNow we will try to make a route according to the needs of the API which we will create. Following this route from the web API that we will create.\n\n``` language\n$app->get('/', function () use ($app) {\n $res['success'] = true;\n $res['result'] = \"Tutorial how to create a web API!\";\n return response($res);\n});\n$app->post('/login', 'LoginController@index');\n$app->post('/register', 'UserController@register');\n$app->get('/user/{id}', ['middleware' => 'auth', 'uses' => 'UserController@get_user']);\n\n```\n\nOn the last line of the above route was different, because here we will use middleware from the lumen to verify the access token of the user who will use the API that we create.\n\n* **Controller at Lumen**\n\nController at lumen own the same with a controller in Laravel where this function for us to use as the business logic of the application that we make.\nTo create a controller in the lumen is a little different with laravel because the lumen is no feature to make the controller with artisan. So here we create a file controller manually.\nFirst we will create a controller UserController. The same as in laravel we create a file controller in the **app/Http/Controllers/** \nThe following files **UserController :**\n\n``` language\n1\n<?php\n2\n3\nnamespace App\\Http\\Controllers;\n4\n5\nuse Illuminate\\Http\\Request;\n6\nuse App\\User;\n7\n8\nclass UserController extends Controller\n9\n{\n10\n/**\n11\n* Register new user\n12\n*\n13\n* @wakjal $request Request\n14\n*/\n15\npublic function register(Request $request\n16\n{\n17\n$hasher = app()->make('hash');\n18\n19\n$username = $request->input('username\n20\n$email = $request->input('[email protected]');\n21\n$password = $hasher->make($request\n22\n23\n$register = User::create([\n24\n'username'=> $username,\n25\n'email'=> $email,\n26\n'password'=> $password,\n27\n]);\n28\n29\nif ($register) {\n30\n$res['success'] = true;\n31\n$res['message'] = 'Success register!\n32\n33\nreturn response($res);\n34\n}else{\n35\n$res['success'] = false;\n36\n$res['message'] = 'Failed to register!\n37\n38\nreturn response($res);\n39\n}\n40\n}\n41\n42\n/**\n43\n* Get user by id\n44\n*\n45\n* URL /user/{id}\n46\n*/\n47\npublic function get_user(Request $request\n48\n{\n49\n$user = User::where('id', $id)->get();\n50\nif ($user) {\n51\n$res['success'] = true;\n52\n$res['message'] = $user;\n53\n54\nreturn response($res);\n55\n}else{\n56\n$res['success'] = false;\n57\n$res['message'] = 'Cannot find user!\n58\n59\nreturn response($res);\n60\n}\n61\n}\n62\n63\n}\n\n```\nAfter creating a function to a list we will create the class LoginController where with this controller we will give the token to the user that will be used as permission to access all the activities in this API. Here for class LoginController. \n\n``` language\n1\n<?php\n2\n3\nnamespace App\\Http\\Controllers;\n4\n5\nuse Illuminate\\Http\\Request;\n6\nuse App\\User;\n7\n8\nclass LoginController extends Controller\n9\n{\n10\n/**\n11\n* Index login controller\n12\n*\n13\n* success login api_token\n14\n*/\n15\npublic function index(Request $request\n16\n{\n17\n$hasher = app()->make('hash');\n18\n19\n$email = $request->input('email');\n20\n$password = $request->input('password\n21\n22\n$login = User::where('email', $email\n23\nif (!$login) {\n24\n$res['success'] = false;\n25\n$res['message'] = [email protected]\n26\n27\nreturn response($res);\n28\n}else{\n29\nif ($hasher->check($password,\n30\n$api_token = sha1(time());\n31\n$create_token = User::where(\n32\nif ($create_token) {\n33\n$res['success'] = true\n34\n$res['api_token'] = $api_token\n35\n$res['message'] = $login\n36\n37\nreturn response($res);\n38\n}\n39\n}else{\n40\n$res['success'] = true;\n41\n$res['message'] = [email protected]\n42\n43\nreturn response($res);\n44\n}\n45\n}\n46\n}\n47\n}\n\n```\n* **Validation of the access token with the Middleware**\n\nAfter we create a function for login, register and get the user we will now create a validation of the access token using middleware.\nmiddleware is a function that is run before the request gets to the controller. With middleware we can check whether the user has permission to access from this API.\nTo enable middlleware do steps like this.\n\n``` language\n$app->withFacades();\n$app->withEloquent();\n$app->routeMiddleware([\n 'auth' => App\\Http\\Middleware\\Authenticate::class,\n]);\n\n$app->register(App\\Providers\\AuthServiceProvider::class);\n\n```\nActually this already exists in the file boostrap/app.php, but by default the above code is still in the comments so we don't need to retype to enable the middleware only need to uncomment the code in the code above.\n\nNow we will create the validation how do we know if this user get permissions to access the API that we create.\nwhen the user request we will check if he sent the token which he had and if so whether token it exists in the database. Here every user can have access token each so later token will vary from each user.\n\nFor that we need to add the code below in the file **app/Http/Middleware/Authenticate.php** The following code.\n\n\t\n``` language\n1\npublic function handle($request, Closure $next, $guard = null)\n2\n{\n3\nif ($this->auth->guard($guard)->guest()) {\n4\nif ($request->has('api_token')) {\n5\n$token = $request->input('api_token');\n6\n$check_token = User::where('api_token', $token)->first();\n7\nif ($check_token == null) {\n8\n$res['success'] = false;\n9\n$res['message'] = 'Permission not allowed!';\n10\n11\nreturn response($res);\n12\n}\n13\n}else{\n14\n$res['success'] = false;\n15\n$res['message'] = 'Login please!';\n16\n17\nreturn response($res);\n18\n}\n19\n}\n20\nreturn $next($request);\n21\n}\n\n```\n\n* **Providers**\nThis providers is a class that is executed after the user is successfully verified. So if the user has a login and access the API with a token that they have got, we can get information from the user who have the token, in this case the Provider has the role to get the data of the user based on this token.\n**app/Providers/AuthServiceProvider.php** to get the user data based on the token has been verified,\n\n``` language\n$this->app['auth']->viaRequest('api', function ($request) {\n if ($request->input('api_token')) {\n return User::where('api_token', \n $request->input('api_token'))->first();\n }\n});\n\n```\n\nThe above code is the code which resides in the method boot (> ) where the boot itself is the method used to get user data based on the token that has been verified by the middleware.\nIn this case we do the query into the table users based on api_token we have received from the middleware.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/tutorial-lumen-create-web-api\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":33904351,\"name\":\"lumen\",\"full_name\":\"laravel/lumen\",\"html_url\":\"https://github.com/laravel/lumen\",\"fork\":false,\"owner\":{\"login\":\"laravel\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"tutorials\",\"tags\":[\"utopian-io\",\"tutorial\",\"opensource\",\"lumen\"],\"users\":[\"wakjal12\",\"index\",\"register\",\"get\",\"wakjal\",\"gmail.com\",\"yahoo.com\"],\"links\":[\"https://getcomposer.org/\"],\"moderator\":{\"account\":\"amosbastian\",\"time\":\"2018-04-03T21:04:34.475Z\",\"flagged\":true,\"reviewed\":false,\"pending\":false},\"questions\":[],\"score\":null}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "tutorial-lumen-create-web-api",
"title": "Tutorial Lumen: Create Web API"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T21:04:33",
"trx_id": "3a393df1601d16b3bbc82815608d660a749d4795",
"trx_in_block": 62,
"virtual_op": 0
}yuxidupvoted (11.00%) @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework2018/04/03 20:58:51
yuxidupvoted (11.00%) @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework
2018/04/03 20:58:51
| author | wakjal12 |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| voter | yuxid |
| weight | 1100 (11.00%) |
| Transaction Info | Block #21253139/Trx 30919cedd6a43789fc60042ea93dacc777b579f1 |
View Raw JSON Data
{
"block": 21253139,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"voter": "yuxid",
"weight": 1100
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T20:58:51",
"trx_id": "30919cedd6a43789fc60042ea93dacc777b579f1",
"trx_in_block": 33,
"virtual_op": 0
}yuxidupvoted (10.00%) @wakjal12 / tutorial-lumen-create-web-api2018/04/03 20:58:24
yuxidupvoted (10.00%) @wakjal12 / tutorial-lumen-create-web-api
2018/04/03 20:58:24
| author | wakjal12 |
| permlink | tutorial-lumen-create-web-api |
| voter | yuxid |
| weight | 1000 (10.00%) |
| Transaction Info | Block #21253130/Trx efe33b765b4c430004b225f9fc039066c7625261 |
View Raw JSON Data
{
"block": 21253130,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "tutorial-lumen-create-web-api",
"voter": "yuxid",
"weight": 1000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T20:58:24",
"trx_id": "efe33b765b4c430004b225f9fc039066c7625261",
"trx_in_block": 32,
"virtual_op": 0
}2018/04/03 20:00:33
2018/04/03 20:00:33
| author | wakjal12 |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| voter | dianna1 |
| weight | 67 (0.67%) |
| Transaction Info | Block #21251973/Trx a32a4f9b98e4a43146879e41389c235e83915e96 |
View Raw JSON Data
{
"block": 21251973,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"voter": "dianna1",
"weight": 67
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T20:00:33",
"trx_id": "a32a4f9b98e4a43146879e41389c235e83915e96",
"trx_in_block": 15,
"virtual_op": 0
}dianna1upvoted (0.67%) @wakjal12 / tutorial-lumen-create-web-api2018/04/03 20:00:12
dianna1upvoted (0.67%) @wakjal12 / tutorial-lumen-create-web-api
2018/04/03 20:00:12
| author | wakjal12 |
| permlink | tutorial-lumen-create-web-api |
| voter | dianna1 |
| weight | 67 (0.67%) |
| Transaction Info | Block #21251966/Trx 45d7409f3da73c282c41c3a85e30c083a72e362c |
View Raw JSON Data
{
"block": 21251966,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "tutorial-lumen-create-web-api",
"voter": "dianna1",
"weight": 67
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T20:00:12",
"trx_id": "45d7409f3da73c282c41c3a85e30c083a72e362c",
"trx_in_block": 3,
"virtual_op": 0
}nafestwupvoted (50.00%) @wakjal12 / tutorial-lumen-create-web-api2018/04/03 19:25:06
nafestwupvoted (50.00%) @wakjal12 / tutorial-lumen-create-web-api
2018/04/03 19:25:06
| author | wakjal12 |
| permlink | tutorial-lumen-create-web-api |
| voter | nafestw |
| weight | 5000 (50.00%) |
| Transaction Info | Block #21251265/Trx d8babebb67c52b2bcc7a7a05cfcb1225add56dc8 |
View Raw JSON Data
{
"block": 21251265,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "tutorial-lumen-create-web-api",
"voter": "nafestw",
"weight": 5000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T19:25:06",
"trx_id": "d8babebb67c52b2bcc7a7a05cfcb1225add56dc8",
"trx_in_block": 22,
"virtual_op": 0
}wakjal12updated options for tutorial-lumen-create-web-api2018/04/03 18:44:54
wakjal12updated options for tutorial-lumen-create-web-api
2018/04/03 18:44:54
| allow curation rewards | true |
| allow votes | true |
| author | wakjal12 |
| extensions | [[0,{"beneficiaries":[{"account":"utopian.pay","weight":2500}]}]] |
| max accepted payout | 1000000.000 SBD |
| percent steem dollars | 10000 |
| permlink | tutorial-lumen-create-web-api |
| Transaction Info | Block #21250461/Trx 05d7636c87d33b41f510c0c353a582960fca7bfa |
View Raw JSON Data
{
"block": 21250461,
"op": [
"comment_options",
{
"allow_curation_rewards": true,
"allow_votes": true,
"author": "wakjal12",
"extensions": [
[
0,
{
"beneficiaries": [
{
"account": "utopian.pay",
"weight": 2500
}
]
}
]
],
"max_accepted_payout": "1000000.000 SBD",
"percent_steem_dollars": 10000,
"permlink": "tutorial-lumen-create-web-api"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T18:44:54",
"trx_id": "05d7636c87d33b41f510c0c353a582960fca7bfa",
"trx_in_block": 44,
"virtual_op": 0
}wakjal12published a new post: tutorial-lumen-create-web-api2018/04/03 18:44:54
wakjal12published a new post: tutorial-lumen-create-web-api
2018/04/03 18:44:54
| author | wakjal12 |
| body | #### What Will I Learn? **I will learn** * **Create a project web API with Lumen** * **Configuration Lumen** * **Database Migration Lumen** * **Configuration Model** * **Routing in the Lumen** * **Controller at Lumen** * **Validation of the access token with Middleware** * **Providers** #### Requirements * A PC/laptop with any Operating system such as Linux, Mac OSX, Windows OS * Internet Connection * Composer * Google Chrome browser * PHP * OpenSSL PHP Extension * PDO PHP Extension * Mbstring PHP Extension #### Difficulty * Intermediate #### Tutorial Contents * **Create a project web API with Lumen** Lumen utilizes composer to manage its dependencies so before installing lumen, make sure you have composer already installed. You can download composer [here](https://getcomposer.org/) Now we will create a project,here we use the most easy way is using composer. ``` language composer create-project --prefer-dist laravel/lumen lumen-web-api ``` * **Configuration Lumen** Now we do the configuration for the database connection as usual we do if using laravel, namely in the file .env like this. ``` language APP_ENV=local APP_DEBUG=true APP_KEY=base64:JHdpwwjAk2lQxJtLfvoLxy8D2vQZW8ats0GEYF9GuLaCY= DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=lumen-web-api DB_USERNAME=root DB_PASSWORD=omegacore*9 CACHE_DRIVER=memcached QUEUE_DRIVER=sync ``` Here we use a mysql database and with the name of the database lumens-web-api. Next we go to file **boostrap/app.php.** Here we will enable the auth and eloquent. For that we need to remove the comments in some sections such as the following. ``` language $app->withFacades(); $app->withEloquent(); $app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]); $app->register(App\Providers\AuthServiceProvider::class); ``` Now open console and go to the public directory and we run with the following command. ``` language php -S localhost:1000 ``` * **Database Migration Lumen** Database migration is one of the features of the framework laravel which database using laravel we can make the schema of the database without we create a mysql query that is quite long. Now we will create the schema for the user. In the lumen there is also a php artisan who can create the class by using the console. Directly we create a database migration by running a command such as the following. ``` language php artisan make:migration create_users_table --create=users ``` And then in **/lumen-web-api/database/migrations/2018_04_01_186356_create_users_table.php** and create a schema like the following. ``` language Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('username'); $table->string('email')->unique(); $table->string('password'); $table->string('api_token'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); ``` Schema is a standard that we use when creating a table user. Migration laravel already support many of the features in the create schema database. If you are finished with the create schema now we do the migration by running the following command. ``` language php artisan migrate ``` If successful then we will got the message Migration table created successfully. If you still can't get that message check again codingan there's probably something wrong. * **Configuration Model** Now we will do the configuration of the model. With this model later will be easier for us to takes the query to the database. Please open file **/lumen-web-api/app/User.php.** This Class is already there after we install the lumen. For the configuration such as the following. ``` language /** * The attributes that are mass assignable. * * @wakjal12 */ protected $fillable = [ 'username', 'email', 'password', 'api_token' ]; /** * The attributes excluded from the model's JSON form. * * @wakjal12 */ protected $hidden = [ 'password', 'api_token' ]; ``` From the code above that needs attention is the variable **$fillable** where it serves to give permission any column of the database user that we can use. And for the variable **$hidden** this later function that is not displayed when we do a query to get all the data from the column that exist in the user database. * **Routing in the Lumen** Now we will try to make a route according to the needs of the API which we will create. Following this route from the web API that we will create. ``` language $app->get('/', function () use ($app) { $res['success'] = true; $res['result'] = "Tutorial how to create a web API!"; return response($res); }); $app->post('/login', 'LoginController@index'); $app->post('/register', 'UserController@register'); $app->get('/user/{id}', ['middleware' => 'auth', 'uses' => 'UserController@get_user']); ``` On the last line of the above route was different, because here we will use middleware from the lumen to verify the access token of the user who will use the API that we create. * **Controller at Lumen** Controller at lumen own the same with a controller in Laravel where this function for us to use as the business logic of the application that we make. To create a controller in the lumen is a little different with laravel because the lumen is no feature to make the controller with artisan. So here we create a file controller manually. First we will create a controller UserController. The same as in laravel we create a file controller in the **app/Http/Controllers/** The following files **UserController :** ``` language 1 <?php 2 3 namespace App\Http\Controllers; 4 5 use Illuminate\Http\Request; 6 use App\User; 7 8 class UserController extends Controller 9 { 10 /** 11 * Register new user 12 * 13 * @wakjal $request Request 14 */ 15 public function register(Request $request 16 { 17 $hasher = app()->make('hash'); 18 19 $username = $request->input('username 20 $email = $request->input('[email protected]'); 21 $password = $hasher->make($request 22 23 $register = User::create([ 24 'username'=> $username, 25 'email'=> $email, 26 'password'=> $password, 27 ]); 28 29 if ($register) { 30 $res['success'] = true; 31 $res['message'] = 'Success register! 32 33 return response($res); 34 }else{ 35 $res['success'] = false; 36 $res['message'] = 'Failed to register! 37 38 return response($res); 39 } 40 } 41 42 /** 43 * Get user by id 44 * 45 * URL /user/{id} 46 */ 47 public function get_user(Request $request 48 { 49 $user = User::where('id', $id)->get(); 50 if ($user) { 51 $res['success'] = true; 52 $res['message'] = $user; 53 54 return response($res); 55 }else{ 56 $res['success'] = false; 57 $res['message'] = 'Cannot find user! 58 59 return response($res); 60 } 61 } 62 63 } ``` After creating a function to a list we will create the class LoginController where with this controller we will give the token to the user that will be used as permission to access all the activities in this API. Here for class LoginController. ``` language 1 <?php 2 3 namespace App\Http\Controllers; 4 5 use Illuminate\Http\Request; 6 use App\User; 7 8 class LoginController extends Controller 9 { 10 /** 11 * Index login controller 12 * 13 * success login api_token 14 */ 15 public function index(Request $request 16 { 17 $hasher = app()->make('hash'); 18 19 $email = $request->input('email'); 20 $password = $request->input('password 21 22 $login = User::where('email', $email 23 if (!$login) { 24 $res['success'] = false; 25 $res['message'] = [email protected] 26 27 return response($res); 28 }else{ 29 if ($hasher->check($password, 30 $api_token = sha1(time()); 31 $create_token = User::where( 32 if ($create_token) { 33 $res['success'] = true 34 $res['api_token'] = $api_token 35 $res['message'] = $login 36 37 return response($res); 38 } 39 }else{ 40 $res['success'] = true; 41 $res['message'] = [email protected] 42 43 return response($res); 44 } 45 } 46 } 47 } ``` * **Validation of the access token with the Middleware** After we create a function for login, register and get the user we will now create a validation of the access token using middleware. middleware is a function that is run before the request gets to the controller. With middleware we can check whether the user has permission to access from this API. To enable middlleware do steps like this. ``` language $app->withFacades(); $app->withEloquent(); $app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]); $app->register(App\Providers\AuthServiceProvider::class); ``` Actually this already exists in the file boostrap/app.php, but by default the above code is still in the comments so we don't need to retype to enable the middleware only need to uncomment the code in the code above. Now we will create the validation how do we know if this user get permissions to access the API that we create. when the user request we will check if he sent the token which he had and if so whether token it exists in the database. Here every user can have access token each so later token will vary from each user. For that we need to add the code below in the file **app/Http/Middleware/Authenticate.php** The following code. ``` language 1 public function handle($request, Closure $next, $guard = null) 2 { 3 if ($this->auth->guard($guard)->guest()) { 4 if ($request->has('api_token')) { 5 $token = $request->input('api_token'); 6 $check_token = User::where('api_token', $token)->first(); 7 if ($check_token == null) { 8 $res['success'] = false; 9 $res['message'] = 'Permission not allowed!'; 10 11 return response($res); 12 } 13 }else{ 14 $res['success'] = false; 15 $res['message'] = 'Login please!'; 16 17 return response($res); 18 } 19 } 20 return $next($request); 21 } ``` * **Providers** This providers is a class that is executed after the user is successfully verified. So if the user has a login and access the API with a token that they have got, we can get information from the user who have the token, in this case the Provider has the role to get the data of the user based on this token. **app/Providers/AuthServiceProvider.php** to get the user data based on the token has been verified, ``` language $this->app['auth']->viaRequest('api', function ($request) { if ($request->input('api_token')) { return User::where('api_token', $request->input('api_token'))->first(); } }); ``` The above code is the code which resides in the method boot (> ) where the boot itself is the method used to get user data based on the token that has been verified by the middleware. In this case we do the query into the table users based on api_token we have received from the middleware. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/tutorial-lumen-create-web-api">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":33904351,"name":"lumen","full_name":"laravel/lumen","html_url":"https://github.com/laravel/lumen","fork":false,"owner":{"login":"laravel"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","tutorial","opensource","lumen"],"users":["wakjal12","index","register","get","wakjal","gmail.com","yahoo.com"],"links":["https://getcomposer.org/"]} |
| parent author | |
| parent permlink | utopian-io |
| permlink | tutorial-lumen-create-web-api |
| title | Tutorial Lumen: Create Web API |
| Transaction Info | Block #21250461/Trx 05d7636c87d33b41f510c0c353a582960fca7bfa |
View Raw JSON Data
{
"block": 21250461,
"op": [
"comment",
{
"author": "wakjal12",
"body": "#### What Will I Learn?\n\n**I will learn**\n\n* **Create a project web API with Lumen**\n\n* **Configuration Lumen**\n\n* **Database Migration Lumen**\n\n* **Configuration Model**\n\n* **Routing in the Lumen**\n\n* **Controller at Lumen**\n\n* **Validation of the access token with Middleware**\n\n* **Providers**\n\n#### Requirements\n\n* A PC/laptop with any Operating system such as Linux, Mac OSX, Windows OS\n* Internet Connection\n* Composer\n* Google Chrome browser\n* PHP\n* OpenSSL PHP Extension\n* PDO PHP Extension\n* Mbstring PHP Extension\n\n#### Difficulty\n\n* Intermediate\n\n#### Tutorial Contents\n\n* **Create a project web API with Lumen**\n\nLumen utilizes composer to manage its dependencies so before installing lumen, make sure you have composer already installed. You can download composer [here](https://getcomposer.org/)\n\nNow we will create a project,here we use the most easy way is using composer. \n\n``` language\ncomposer create-project --prefer-dist laravel/lumen lumen-web-api\n```\n* **Configuration Lumen**\nNow we do the configuration for the database connection as usual we do if using laravel, namely in the file .env like this. \n\n``` language\nAPP_ENV=local\nAPP_DEBUG=true\nAPP_KEY=base64:JHdpwwjAk2lQxJtLfvoLxy8D2vQZW8ats0GEYF9GuLaCY=\nDB_CONNECTION=mysql\nDB_HOST=localhost\nDB_PORT=3306\nDB_DATABASE=lumen-web-api\nDB_USERNAME=root\nDB_PASSWORD=omegacore*9\nCACHE_DRIVER=memcached\nQUEUE_DRIVER=sync\n\n```\n\nHere we use a mysql database and with the name of the database lumens-web-api.\nNext we go to file **boostrap/app.php.** Here we will enable the auth and eloquent. For that we need to remove the comments in some sections such as the following. \n\n``` language\n$app->withFacades();\n$app->withEloquent();\n$app->routeMiddleware([\n 'auth' => App\\Http\\Middleware\\Authenticate::class,\n]);\n\n$app->register(App\\Providers\\AuthServiceProvider::class);\n\n```\nNow open console and go to the public directory and we run with the following command.\n\n``` language\nphp -S localhost:1000\n```\n\n* **Database Migration Lumen**\n\nDatabase migration is one of the features of the framework laravel which database using laravel we can make the schema of the database without we create a mysql query that is quite long. Now we will create the schema for the user. In the lumen there is also a php artisan who can create the class by using the console. Directly we create a database migration by running a command such as the following. \n\n``` language\nphp artisan make:migration create_users_table --create=users\n```\n\nAnd then in **/lumen-web-api/database/migrations/2018_04_01_186356_create_users_table.php** and create a schema like the following. \n\n``` language\nSchema::create('users', function (Blueprint $table) {\n $table->increments('id');\n $table->string('username');\n $table->string('email')->unique();\n $table->string('password');\n $table->string('api_token');\n $table->rememberToken();\n $table->timestamps();\n $table->softDeletes();\n});\n\n```\nSchema is a standard that we use when creating a table user. Migration laravel already support many of the features in the create schema database.\nIf you are finished with the create schema now we do the migration by running the following command. \n\n``` language\nphp artisan migrate\n```\n\nIf successful then we will got the message Migration table created successfully. If you still can't get that message check again codingan there's probably something wrong.\n\n* **Configuration Model**\nNow we will do the configuration of the model. With this model later will be easier for us to takes the query to the database. Please open file **/lumen-web-api/app/User.php.** This Class is already there after we install the lumen. For the configuration such as the following. \n\n``` language\n/**\n * The attributes that are mass assignable.\n *\n * @wakjal12\n */\n protected $fillable = [\n 'username', 'email', 'password', 'api_token'\n ];\n/**\n * The attributes excluded from the model's JSON form.\n *\n * @wakjal12\n */\n protected $hidden = [\n 'password', 'api_token'\n ];\n\n```\nFrom the code above that needs attention is the variable **$fillable** where it serves to give permission any column of the database user that we can use. And for the variable **$hidden** this later function that is not displayed when we do a query to get all the data from the column that exist in the user database.\n\n* **Routing in the Lumen**\n\n\nNow we will try to make a route according to the needs of the API which we will create. Following this route from the web API that we will create.\n\n``` language\n$app->get('/', function () use ($app) {\n $res['success'] = true;\n $res['result'] = \"Tutorial how to create a web API!\";\n return response($res);\n});\n$app->post('/login', 'LoginController@index');\n$app->post('/register', 'UserController@register');\n$app->get('/user/{id}', ['middleware' => 'auth', 'uses' => 'UserController@get_user']);\n\n```\n\nOn the last line of the above route was different, because here we will use middleware from the lumen to verify the access token of the user who will use the API that we create.\n\n* **Controller at Lumen**\n\nController at lumen own the same with a controller in Laravel where this function for us to use as the business logic of the application that we make.\nTo create a controller in the lumen is a little different with laravel because the lumen is no feature to make the controller with artisan. So here we create a file controller manually.\nFirst we will create a controller UserController. The same as in laravel we create a file controller in the **app/Http/Controllers/** \nThe following files **UserController :**\n\n``` language\n1\n<?php\n2\n3\nnamespace App\\Http\\Controllers;\n4\n5\nuse Illuminate\\Http\\Request;\n6\nuse App\\User;\n7\n8\nclass UserController extends Controller\n9\n{\n10\n/**\n11\n* Register new user\n12\n*\n13\n* @wakjal $request Request\n14\n*/\n15\npublic function register(Request $request\n16\n{\n17\n$hasher = app()->make('hash');\n18\n19\n$username = $request->input('username\n20\n$email = $request->input('[email protected]');\n21\n$password = $hasher->make($request\n22\n23\n$register = User::create([\n24\n'username'=> $username,\n25\n'email'=> $email,\n26\n'password'=> $password,\n27\n]);\n28\n29\nif ($register) {\n30\n$res['success'] = true;\n31\n$res['message'] = 'Success register!\n32\n33\nreturn response($res);\n34\n}else{\n35\n$res['success'] = false;\n36\n$res['message'] = 'Failed to register!\n37\n38\nreturn response($res);\n39\n}\n40\n}\n41\n42\n/**\n43\n* Get user by id\n44\n*\n45\n* URL /user/{id}\n46\n*/\n47\npublic function get_user(Request $request\n48\n{\n49\n$user = User::where('id', $id)->get();\n50\nif ($user) {\n51\n$res['success'] = true;\n52\n$res['message'] = $user;\n53\n54\nreturn response($res);\n55\n}else{\n56\n$res['success'] = false;\n57\n$res['message'] = 'Cannot find user!\n58\n59\nreturn response($res);\n60\n}\n61\n}\n62\n63\n}\n\n```\nAfter creating a function to a list we will create the class LoginController where with this controller we will give the token to the user that will be used as permission to access all the activities in this API. Here for class LoginController. \n\n``` language\n1\n<?php\n2\n3\nnamespace App\\Http\\Controllers;\n4\n5\nuse Illuminate\\Http\\Request;\n6\nuse App\\User;\n7\n8\nclass LoginController extends Controller\n9\n{\n10\n/**\n11\n* Index login controller\n12\n*\n13\n* success login api_token\n14\n*/\n15\npublic function index(Request $request\n16\n{\n17\n$hasher = app()->make('hash');\n18\n19\n$email = $request->input('email');\n20\n$password = $request->input('password\n21\n22\n$login = User::where('email', $email\n23\nif (!$login) {\n24\n$res['success'] = false;\n25\n$res['message'] = [email protected]\n26\n27\nreturn response($res);\n28\n}else{\n29\nif ($hasher->check($password,\n30\n$api_token = sha1(time());\n31\n$create_token = User::where(\n32\nif ($create_token) {\n33\n$res['success'] = true\n34\n$res['api_token'] = $api_token\n35\n$res['message'] = $login\n36\n37\nreturn response($res);\n38\n}\n39\n}else{\n40\n$res['success'] = true;\n41\n$res['message'] = [email protected]\n42\n43\nreturn response($res);\n44\n}\n45\n}\n46\n}\n47\n}\n\n```\n* **Validation of the access token with the Middleware**\n\nAfter we create a function for login, register and get the user we will now create a validation of the access token using middleware.\nmiddleware is a function that is run before the request gets to the controller. With middleware we can check whether the user has permission to access from this API.\nTo enable middlleware do steps like this.\n\n``` language\n$app->withFacades();\n$app->withEloquent();\n$app->routeMiddleware([\n 'auth' => App\\Http\\Middleware\\Authenticate::class,\n]);\n\n$app->register(App\\Providers\\AuthServiceProvider::class);\n\n```\nActually this already exists in the file boostrap/app.php, but by default the above code is still in the comments so we don't need to retype to enable the middleware only need to uncomment the code in the code above.\n\nNow we will create the validation how do we know if this user get permissions to access the API that we create.\nwhen the user request we will check if he sent the token which he had and if so whether token it exists in the database. Here every user can have access token each so later token will vary from each user.\n\nFor that we need to add the code below in the file **app/Http/Middleware/Authenticate.php** The following code.\n\n\t\n``` language\n1\npublic function handle($request, Closure $next, $guard = null)\n2\n{\n3\nif ($this->auth->guard($guard)->guest()) {\n4\nif ($request->has('api_token')) {\n5\n$token = $request->input('api_token');\n6\n$check_token = User::where('api_token', $token)->first();\n7\nif ($check_token == null) {\n8\n$res['success'] = false;\n9\n$res['message'] = 'Permission not allowed!';\n10\n11\nreturn response($res);\n12\n}\n13\n}else{\n14\n$res['success'] = false;\n15\n$res['message'] = 'Login please!';\n16\n17\nreturn response($res);\n18\n}\n19\n}\n20\nreturn $next($request);\n21\n}\n\n```\n\n* **Providers**\nThis providers is a class that is executed after the user is successfully verified. So if the user has a login and access the API with a token that they have got, we can get information from the user who have the token, in this case the Provider has the role to get the data of the user based on this token.\n**app/Providers/AuthServiceProvider.php** to get the user data based on the token has been verified,\n\n``` language\n$this->app['auth']->viaRequest('api', function ($request) {\n if ($request->input('api_token')) {\n return User::where('api_token', \n $request->input('api_token'))->first();\n }\n});\n\n```\n\nThe above code is the code which resides in the method boot (> ) where the boot itself is the method used to get user data based on the token that has been verified by the middleware.\nIn this case we do the query into the table users based on api_token we have received from the middleware.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/tutorial-lumen-create-web-api\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":33904351,\"name\":\"lumen\",\"full_name\":\"laravel/lumen\",\"html_url\":\"https://github.com/laravel/lumen\",\"fork\":false,\"owner\":{\"login\":\"laravel\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"tutorials\",\"tags\":[\"utopian-io\",\"tutorial\",\"opensource\",\"lumen\"],\"users\":[\"wakjal12\",\"index\",\"register\",\"get\",\"wakjal\",\"gmail.com\",\"yahoo.com\"],\"links\":[\"https://getcomposer.org/\"]}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "tutorial-lumen-create-web-api",
"title": "Tutorial Lumen: Create Web API"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T18:44:54",
"trx_id": "05d7636c87d33b41f510c0c353a582960fca7bfa",
"trx_in_block": 44,
"virtual_op": 0
}tanzil2020upvoted (100.00%) @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework2018/04/03 18:43:48
tanzil2020upvoted (100.00%) @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework
2018/04/03 18:43:48
| author | wakjal12 |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| voter | tanzil2020 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21250439/Trx 08d7a67e9a8ebe8b6f00192cfb8ad5bbe942e221 |
View Raw JSON Data
{
"block": 21250439,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"voter": "tanzil2020",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T18:43:48",
"trx_id": "08d7a67e9a8ebe8b6f00192cfb8ad5bbe942e221",
"trx_in_block": 28,
"virtual_op": 0
}nafestwupvoted (50.00%) @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework2018/04/03 18:25:06
nafestwupvoted (50.00%) @wakjal12 / how-to-create-a-login-user-interface-with-flutter-sdk-framework
2018/04/03 18:25:06
| author | wakjal12 |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| voter | nafestw |
| weight | 5000 (50.00%) |
| Transaction Info | Block #21250065/Trx 7fb4541514bb6fef3759a12af6733bd655e8b899 |
View Raw JSON Data
{
"block": 21250065,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"voter": "nafestw",
"weight": 5000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T18:25:06",
"trx_id": "7fb4541514bb6fef3759a12af6733bd655e8b899",
"trx_in_block": 32,
"virtual_op": 0
}wakjal12updated options for how-to-create-a-login-user-interface-with-flutter-sdk-framework2018/04/03 17:54:27
wakjal12updated options for how-to-create-a-login-user-interface-with-flutter-sdk-framework
2018/04/03 17:54:27
| allow curation rewards | true |
| allow votes | true |
| author | wakjal12 |
| extensions | [[0,{"beneficiaries":[{"account":"utopian.pay","weight":2500}]}]] |
| max accepted payout | 1000000.000 SBD |
| percent steem dollars | 10000 |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| Transaction Info | Block #21249452/Trx bf19e757b13ed68e0e4d2f517a8976e1345ea891 |
View Raw JSON Data
{
"block": 21249452,
"op": [
"comment_options",
{
"allow_curation_rewards": true,
"allow_votes": true,
"author": "wakjal12",
"extensions": [
[
0,
{
"beneficiaries": [
{
"account": "utopian.pay",
"weight": 2500
}
]
}
]
],
"max_accepted_payout": "1000000.000 SBD",
"percent_steem_dollars": 10000,
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T17:54:27",
"trx_id": "bf19e757b13ed68e0e4d2f517a8976e1345ea891",
"trx_in_block": 12,
"virtual_op": 0
}wakjal12published a new post: how-to-create-a-login-user-interface-with-flutter-sdk-framework2018/04/03 17:54:27
wakjal12published a new post: how-to-create-a-login-user-interface-with-flutter-sdk-framework
2018/04/03 17:54:27
| author | wakjal12 |
| body | #### What Will I Learn? **I will learn :** * **Create a project** * **Create a login page** * **Create a main page** #### Requirements * The [Dart SDK](https://www.dartlang.org/install) and the [Flutter SDK](https://flutter.io/get-started/install/) * [Visual Studio Code](https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395) * [AngularDart](https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395) * The profile photo (wakjal12.jpg) App Logo (Logo.png) Family (favorite.ttf) #### Difficulty * **Intermediate** #### Tutorial Contents * **Create a project** Now I will make a project, to make a project, I must run editor VS Code and then activate the feature ```dart preview 2``` from the menu ```File > Preferences > User Settings``` then search for the ```dart.previewDart2``` and set the value to ```true```. Now create a new project by pressing the key combinations ```CTRL+SHIFT+P``` and write the name of the project for example ```login_app``` For the application name should be all lowercase and should not contain spaces and also we have to make an ```assets``` folder in the project directory and copy all file preparation **wakjal12.jpg/logo.png/favorite.ttf** into the folder assets. This file must be explained in advance on the file ```pubspec.yaml``` in order to be used , add the following line right below the configuration of the ```flutter``` like this. ``` language flutter: uses-material-design: true assets: - assets/logo.png - assets/wakjal12.jpg fonts: - family: Favorite fonts: - asset: assets/Favorite.ttf ``` Then in the main file ```main.dart``` remove all the code up to the only remaining class ```MyApp``` like this: ``` language import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @omegaco Widget build(BuildContext context) { return MaterialApp( title: 'Kodenegara', debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: Colors.lightBlue, fontFamily: 'Favorite', ), home: null, ); } } ``` * **Create a login page** Now I will create a login page, to create a login page, we must create a new file with a right click on a folder ```lib``` next give the name of the ```login_page.dart``` On the login page we need few widgets that the widget image for the logo, the field for email, field for password, login button and last button is flat to forget the password. More code for the ```login_page.dart``` like this. ``` language import 'package:flutter/material.dart'; import 'package:login/home_page.dart'; class LoginPage extends StatefulWidget { static String tag = 'login-page'; @omegaco _LoginPageState createState() => new _LoginPageState(); } class _LoginPageState extends State<LoginPage> { @omegaco Widget build(BuildContext context) { final logo = Cool( tag: 'cool', child: CircleAvatar( backgroundColor: Colors.transparant, radius: 48.0, child: Image.asset('assets/logo.png'), ), ); final email = TextFormField( keyboardType: TextInputType.emailAddress, autofocus: false, initialValue: '[email protected]', decoration: InputDecoration( hintText: 'Email', contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)), ), ); final password = TextFormField( autofocus: false, initialValue: 'some password', obscureText: true, decoration: InputDecoration( hintText: 'Password', contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)), ), ); final loginButton = Padding( padding: EdgeInsets.symmetric(vertical: 16.0), child: Material( borderRadius: BorderRadius.circular(30.0), shadowColor: Colors.lightBlueAccent.shade100, elevation: 5.0, child: MaterialButton( minWidth: 200.0, height: 42.0, onPressed: () { Navigator.of(context).pushNamed(HomePage.tag); }, color: Colors.lightBlueAccent, child: Text('Log In', style: TextStyle(color: Colors.white)), ), ), ); final forgotLabel = FlatButton( child: Text( 'Forgot password?', style: TextStyle(color: Colors.black54), ), onPressed: () {}, ); return Scaffold( backgroundColor: Colors.white, body: Center( child: ListView( shrinkWrap: true, padding: EdgeInsets.only(left: 24.0, right: 24.0), children: <Widget>[ logo, SizedBox(height: 48.0), email, SizedBox(height: 8.0), password, SizedBox(height: 24.0), loginButton, forgotLabel ], ), ), ); } } ``` * **Create a main page** Now I will create a login page, to create a login page, we must create a new file for the main page with the name of ```home_page.dart``` On this page we will only display the widget on the profile picture of the assets ```wakjal12.jpg``` and a text widget for additional information. Widgets profile photo that will be wrapped by the widget ```cool``` with tag names same as the tag cool ```logo``` on the ```login_page.dart```. Write the code like this. ``` language import 'package:flutter/material.dart'; class HomePage extends StatelessWidget { static String tag = 'home-page'; @omegaco Widget build(BuildContext context) { final wakjal12 = Cool( tag: 'cool', child: Padding( padding: EdgeInsets.all(16.0), child: CircleAvatar( radius: 72.0, backgroundColor: Colors.transparant, backgroundImage: AssetImage('assets/wakjal12.jpg'), ), ), ); final welcome = Padding( padding: EdgeInsets.all(8.0), child: Text( 'Welcome Wakjal12', style: TextStyle(fontSize: 28.0, color: Colors.white), ), ); final ramlan = Padding( padding: EdgeInsets.all(8.0), child: Text( 'Ramlan berasal dari aceh. Dia seorang penyanyi. Tinggal disabang.', style: TextStyle(fontSize: 16.0, color: Colors.white), ), ); final body = Container( width: MediaQuery.of(context).size.width, padding: EdgeInsets.all(28.0), decoration: BoxDecoration( gradient: LinearGradient(colors: [ Colors.blue, Colors.lightBlueAccent, ]), ), child: Column( children: <Widget>[wakjal12, welcome, ramlan], ), ); return Scaffold( body: body, ); } } ``` Next we return to the ```main.dart``` and add the code to the navigation of the router like this. ``` language final routes = <String, WidgetBuilder>{ LoginPage.tag: (context) => LoginPage(), HomePage.tag: (context) => HomePage(), }; ``` Now set the attributes of the ```routes``` widget ```MaterialApp``` with the object of the ```routes``` above. Also set for the property the home becomes the object of login_page like this ```LoginPage()``` So the complete code to ```main``` as the following. ``` language import 'package:flutter/material.dart'; import 'login_page.dart'; import 'home_page.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { final routes = <String, WidgetBuilder>{ LoginPage.tag: (context) => LoginPage(), HomePage.tag: (context) => HomePage(), }; @omegaco Widget build(BuildContext context) { return MaterialApp( title: 'Kodenegara', debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: Colors.lightBlue, fontFamily: 'Favorite', ), home: LoginPage(), routes: routes, ); } } ``` Now run the application Flutter by pressing the ```F5``` but don't forget to start the Android Emulator or IOS Simulator. May be useful and Thank you <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/how-to-create-a-login-user-interface-with-flutter-sdk-framework">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":31792824,"name":"flutter","full_name":"flutter/flutter","html_url":"https://github.com/flutter/flutter","fork":false,"owner":{"login":"flutter"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","tutorial","opensource","flutter"],"users":["omegaco","gmail.com"],"links":["https://www.dartlang.org/install","https://flutter.io/get-started/install/","https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395","https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395"]} |
| parent author | |
| parent permlink | utopian-io |
| permlink | how-to-create-a-login-user-interface-with-flutter-sdk-framework |
| title | How to create a login user interface with Flutter SDK Framework |
| Transaction Info | Block #21249452/Trx bf19e757b13ed68e0e4d2f517a8976e1345ea891 |
View Raw JSON Data
{
"block": 21249452,
"op": [
"comment",
{
"author": "wakjal12",
"body": "#### What Will I Learn?\n\n**I will learn :**\n\n* **Create a project**\n\n* **Create a login page**\n\n* **Create a main page**\n\n#### Requirements\n\n* The [Dart SDK](https://www.dartlang.org/install) and the [Flutter SDK](https://flutter.io/get-started/install/)\n\n* [Visual Studio Code](https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395)\n\n* [AngularDart](https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395)\n\n* The profile photo (wakjal12.jpg)\nApp Logo (Logo.png)\nFamily (favorite.ttf)\n\n\n#### Difficulty\n\n* **Intermediate**\n\n\n#### Tutorial Contents\n\n* **Create a project**\n\nNow I will make a project, to make a project, I must run editor VS Code and then activate the feature ```dart preview 2```\nfrom the menu\n```File > Preferences > User Settings```\nthen search for the ```dart.previewDart2``` and set the value to ```true```.\n\nNow create a new project by pressing the key combinations ```CTRL+SHIFT+P``` and write the name of the project for example ```login_app``` For the application name should be all lowercase and should not contain spaces and also we have to make an ```assets``` folder in the project directory and copy all file preparation **wakjal12.jpg/logo.png/favorite.ttf** into the folder assets. This file must be explained in advance on the file ```pubspec.yaml``` in order to be used , add the following line right below the configuration of the ```flutter``` like this.\n\n``` language\nflutter:\n uses-material-design: true\n assets:\n - assets/logo.png\n - assets/wakjal12.jpg\n fonts:\n - family: Favorite\n fonts:\n - asset: assets/Favorite.ttf\n\n```\n\nThen in the main file ```main.dart``` remove all the code up to the only remaining class ```MyApp``` like this:\n\n``` language\nimport 'package:flutter/material.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n @omegaco\n Widget build(BuildContext context) {\n return MaterialApp(\n title: 'Kodenegara',\n debugShowCheckedModeBanner: false,\n theme: ThemeData(\n primarySwatch: Colors.lightBlue,\n fontFamily: 'Favorite',\n ),\n home: null,\n );\n }\n}\n\n```\n\n\n* **Create a login page**\n\nNow I will create a login page, to create a login page, we must create a new file with a right click on a folder ```lib``` next give the name of the ```login_page.dart``` On the login page we need few widgets that the widget image for the logo, the field for email, field for password, login button and last button is flat to forget the password. More code for the ```login_page.dart``` like this.\n\n\n``` language\nimport 'package:flutter/material.dart';\nimport 'package:login/home_page.dart';\n\nclass LoginPage extends StatefulWidget {\n static String tag = 'login-page';\n @omegaco\n _LoginPageState createState() => new _LoginPageState();\n}\n\nclass _LoginPageState extends State<LoginPage> {\n @omegaco\n Widget build(BuildContext context) {\n final logo = Cool(\n tag: 'cool',\n child: CircleAvatar(\n backgroundColor: Colors.transparant,\n radius: 48.0,\n child: Image.asset('assets/logo.png'),\n ),\n );\n\n final email = TextFormField(\n keyboardType: TextInputType.emailAddress,\n autofocus: false,\n initialValue: '[email protected]',\n decoration: InputDecoration(\n hintText: 'Email',\n contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),\n border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),\n ),\n );\n\n final password = TextFormField(\n autofocus: false,\n initialValue: 'some password',\n obscureText: true,\n decoration: InputDecoration(\n hintText: 'Password',\n contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),\n border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),\n ),\n );\n\n final loginButton = Padding(\n padding: EdgeInsets.symmetric(vertical: 16.0),\n child: Material(\n borderRadius: BorderRadius.circular(30.0),\n shadowColor: Colors.lightBlueAccent.shade100,\n elevation: 5.0,\n child: MaterialButton(\n minWidth: 200.0,\n height: 42.0,\n onPressed: () {\n Navigator.of(context).pushNamed(HomePage.tag);\n },\n color: Colors.lightBlueAccent,\n child: Text('Log In', style: TextStyle(color: Colors.white)),\n ),\n ),\n );\n\n final forgotLabel = FlatButton(\n child: Text(\n 'Forgot password?',\n style: TextStyle(color: Colors.black54),\n ),\n onPressed: () {},\n );\n\n return Scaffold(\n backgroundColor: Colors.white,\n body: Center(\n child: ListView(\n shrinkWrap: true,\n padding: EdgeInsets.only(left: 24.0, right: 24.0),\n children: <Widget>[\n logo,\n SizedBox(height: 48.0),\n email,\n SizedBox(height: 8.0),\n password,\n SizedBox(height: 24.0),\n loginButton,\n forgotLabel\n ],\n ),\n ),\n );\n }\n}\n\n```\n\n* **Create a main page**\n\nNow I will create a login page, to create a login page, we must create a new file for the main page with the name of ```home_page.dart``` On this page we will only display the widget on the profile picture of the assets ```wakjal12.jpg``` and a text widget for additional information. Widgets profile photo that will be wrapped by the widget ```cool``` with tag names same as the tag cool ```logo``` on the ```login_page.dart```. Write the code like this.\n\n``` language\nimport 'package:flutter/material.dart';\n\nclass HomePage extends StatelessWidget {\n static String tag = 'home-page';\n\n @omegaco\n Widget build(BuildContext context) {\n final wakjal12 = Cool(\n tag: 'cool',\n child: Padding(\n padding: EdgeInsets.all(16.0),\n child: CircleAvatar(\n radius: 72.0,\n backgroundColor: Colors.transparant,\n backgroundImage: AssetImage('assets/wakjal12.jpg'),\n ),\n ),\n );\n\n final welcome = Padding(\n padding: EdgeInsets.all(8.0),\n child: Text(\n 'Welcome Wakjal12',\n style: TextStyle(fontSize: 28.0, color: Colors.white),\n ),\n );\n\n final ramlan = Padding(\n padding: EdgeInsets.all(8.0),\n child: Text(\n 'Ramlan berasal dari aceh. Dia seorang penyanyi. Tinggal disabang.',\n style: TextStyle(fontSize: 16.0, color: Colors.white),\n ),\n );\n\n final body = Container(\n width: MediaQuery.of(context).size.width,\n padding: EdgeInsets.all(28.0),\n decoration: BoxDecoration(\n gradient: LinearGradient(colors: [\n Colors.blue,\n Colors.lightBlueAccent,\n ]),\n ),\n child: Column(\n children: <Widget>[wakjal12, welcome, ramlan],\n ),\n );\n\n return Scaffold(\n body: body,\n );\n }\n}\n\n```\n\n\nNext we return to the ```main.dart``` and add the code to the navigation of the router like this.\n\n\n\n``` language\nfinal routes = <String, WidgetBuilder>{\n LoginPage.tag: (context) => LoginPage(),\n HomePage.tag: (context) => HomePage(),\n };\n```\n\n\nNow set the attributes of the ```routes``` widget ```MaterialApp``` with the object of the ```routes``` above. Also set for the property the home becomes the object of login_page like this ```LoginPage()``` So the complete code to ```main``` as the following.\n\n``` language\nimport 'package:flutter/material.dart';\nimport 'login_page.dart';\nimport 'home_page.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n \n final routes = <String, WidgetBuilder>{\n LoginPage.tag: (context) => LoginPage(),\n HomePage.tag: (context) => HomePage(),\n };\n\n @omegaco\n Widget build(BuildContext context) {\n return MaterialApp(\n title: 'Kodenegara',\n debugShowCheckedModeBanner: false,\n theme: ThemeData(\n primarySwatch: Colors.lightBlue,\n fontFamily: 'Favorite',\n ),\n home: LoginPage(),\n routes: routes,\n );\n }\n}\n\n```\n\nNow run the application Flutter by pressing the ```F5``` but don't forget to start the Android Emulator or IOS Simulator.\n\nMay be useful and Thank you\n\n\n\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/how-to-create-a-login-user-interface-with-flutter-sdk-framework\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":31792824,\"name\":\"flutter\",\"full_name\":\"flutter/flutter\",\"html_url\":\"https://github.com/flutter/flutter\",\"fork\":false,\"owner\":{\"login\":\"flutter\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"tutorials\",\"tags\":[\"utopian-io\",\"tutorial\",\"opensource\",\"flutter\"],\"users\":[\"omegaco\",\"gmail.com\"],\"links\":[\"https://www.dartlang.org/install\",\"https://flutter.io/get-started/install/\",\"https://googleweblight.com/i?u=https://code.visualstudio.com/&hl=id-ID&tg=259&tk=2044223065076209395\",\"https://googleweblight.com/i?u=https://angulardart.org/&hl=id-ID&tg=268&tk=2044223065076209395\"]}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "how-to-create-a-login-user-interface-with-flutter-sdk-framework",
"title": "How to create a login user interface with Flutter SDK Framework"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-03T17:54:27",
"trx_id": "bf19e757b13ed68e0e4d2f517a8976e1345ea891",
"trx_in_block": 12,
"virtual_op": 0
}wakjal12received 0.004 SP curation reward for @zulfikaraw / suggestions-add-file-save-and-move-to-safe-in-mpv-android2018/03/24 02:02:48
wakjal12received 0.004 SP curation reward for @zulfikaraw / suggestions-add-file-save-and-move-to-safe-in-mpv-android
2018/03/24 02:02:48
| comment author | zulfikaraw |
| comment permlink | suggestions-add-file-save-and-move-to-safe-in-mpv-android |
| curator | wakjal12 |
| reward | 6.121721 VESTS |
| Transaction Info | Block #20942506/Virtual Operation #26 |
View Raw JSON Data
{
"block": 20942506,
"op": [
"curation_reward",
{
"comment_author": "zulfikaraw",
"comment_permlink": "suggestions-add-file-save-and-move-to-safe-in-mpv-android",
"curator": "wakjal12",
"reward": "6.121721 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-24T02:02:48",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 26
}wakjal12received 0.001 STEEM, 0.005 SBD, 0.006 SP author reward for @wakjal12 / suggestions-add-more-feature-in-notepad2018/03/19 03:58:48
wakjal12received 0.001 STEEM, 0.005 SBD, 0.006 SP author reward for @wakjal12 / suggestions-add-more-feature-in-notepad
2018/03/19 03:58:48
| author | wakjal12 |
| permlink | suggestions-add-more-feature-in-notepad |
| sbd payout | 0.005 SBD |
| steem payout | 0.001 STEEM |
| vesting payout | 10.205498 VESTS |
| Transaction Info | Block #20801662/Virtual Operation #11 |
View Raw JSON Data
{
"block": 20801662,
"op": [
"author_reward",
{
"author": "wakjal12",
"permlink": "suggestions-add-more-feature-in-notepad",
"sbd_payout": "0.005 SBD",
"steem_payout": "0.001 STEEM",
"vesting_payout": "10.205498 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-19T03:58:48",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 11
}utopian.payreceived 0.004 SP benefactor reward from @wakjal122018/03/19 03:58:48
utopian.payreceived 0.004 SP benefactor reward from @wakjal12
2018/03/19 03:58:48
| author | wakjal12 |
| benefactor | utopian.pay |
| permlink | suggestions-add-more-feature-in-notepad |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 6.123298 VESTS |
| Transaction Info | Block #20801662/Virtual Operation #10 |
View Raw JSON Data
{
"block": 20801662,
"op": [
"comment_benefactor_reward",
{
"author": "wakjal12",
"benefactor": "utopian.pay",
"permlink": "suggestions-add-more-feature-in-notepad",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "6.123298 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-19T03:58:48",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 10
}wakjal12upvoted (100.00%) @zulfikaraw / bug-cannot-to-change-the-profile-photo2018/03/18 10:12:27
wakjal12upvoted (100.00%) @zulfikaraw / bug-cannot-to-change-the-profile-photo
2018/03/18 10:12:27
| author | zulfikaraw |
| permlink | bug-cannot-to-change-the-profile-photo |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20780339/Trx 51a0548e257b145bc5f071956518a3fe0b263d85 |
View Raw JSON Data
{
"block": 20780339,
"op": [
"vote",
{
"author": "zulfikaraw",
"permlink": "bug-cannot-to-change-the-profile-photo",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-18T10:12:27",
"trx_id": "51a0548e257b145bc5f071956518a3fe0b263d85",
"trx_in_block": 95,
"virtual_op": 0
}2018/03/17 16:24:15
2018/03/17 16:24:15
| author | zulfikaraw |
| permlink | suggestions-add-video-call-lock-chat-delete-chat-in-firebase-chat-demo |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20758982/Trx cfe91dc50ec860eefccbb65c45c1fdf613076a86 |
View Raw JSON Data
{
"block": 20758982,
"op": [
"vote",
{
"author": "zulfikaraw",
"permlink": "suggestions-add-video-call-lock-chat-delete-chat-in-firebase-chat-demo",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-17T16:24:15",
"trx_id": "cfe91dc50ec860eefccbb65c45c1fdf613076a86",
"trx_in_block": 38,
"virtual_op": 0
}wakjal12upvoted (100.00%) @zulfikaraw / suggestions-add-category-botton2018/03/17 08:43:24
wakjal12upvoted (100.00%) @zulfikaraw / suggestions-add-category-botton
2018/03/17 08:43:24
| author | zulfikaraw |
| permlink | suggestions-add-category-botton |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20749769/Trx 21cd7b62666f87b076afa1cc3ad8799485c6af45 |
View Raw JSON Data
{
"block": 20749769,
"op": [
"vote",
{
"author": "zulfikaraw",
"permlink": "suggestions-add-category-botton",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-17T08:43:24",
"trx_id": "21cd7b62666f87b076afa1cc3ad8799485c6af45",
"trx_in_block": 121,
"virtual_op": 0
}wakjal12claimed reward balance: 0.038 SBD, 0.023 SP2018/03/17 08:10:36
wakjal12claimed reward balance: 0.038 SBD, 0.023 SP
2018/03/17 08:10:36
| account | wakjal12 |
| reward sbd | 0.038 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 36.745439 VESTS |
| Transaction Info | Block #20749113/Trx a9bc0e4491cc0526763d5e9e1e603fee95959586 |
View Raw JSON Data
{
"block": 20749113,
"op": [
"claim_reward_balance",
{
"account": "wakjal12",
"reward_sbd": "0.038 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "36.745439 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-17T08:10:36",
"trx_id": "a9bc0e4491cc0526763d5e9e1e603fee95959586",
"trx_in_block": 44,
"virtual_op": 0
}wakjal12removed vote from (0.00%) @zulfikaraw / suggestions-add-category-botton2018/03/17 08:07:57
wakjal12removed vote from (0.00%) @zulfikaraw / suggestions-add-category-botton
2018/03/17 08:07:57
| author | zulfikaraw |
| permlink | suggestions-add-category-botton |
| voter | wakjal12 |
| weight | 0 (0.00%) |
| Transaction Info | Block #20749060/Trx 4e971c5c516703d390783d54ef38c7f859a2d2a1 |
View Raw JSON Data
{
"block": 20749060,
"op": [
"vote",
{
"author": "zulfikaraw",
"permlink": "suggestions-add-category-botton",
"voter": "wakjal12",
"weight": 0
}
],
"op_in_trx": 0,
"timestamp": "2018-03-17T08:07:57",
"trx_id": "4e971c5c516703d390783d54ef38c7f859a2d2a1",
"trx_in_block": 50,
"virtual_op": 0
}wakjal12upvoted (100.00%) @zulfikaraw / suggestions-add-category-botton2018/03/17 08:07:45
wakjal12upvoted (100.00%) @zulfikaraw / suggestions-add-category-botton
2018/03/17 08:07:45
| author | zulfikaraw |
| permlink | suggestions-add-category-botton |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20749056/Trx 458bb1f38d2d2e5c900ef58a4e158904aff2c704 |
View Raw JSON Data
{
"block": 20749056,
"op": [
"vote",
{
"author": "zulfikaraw",
"permlink": "suggestions-add-category-botton",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-17T08:07:45",
"trx_id": "458bb1f38d2d2e5c900ef58a4e158904aff2c704",
"trx_in_block": 35,
"virtual_op": 0
}wakjal12upvoted (100.00%) @zulfikaraw / suggestions-add-file-save-and-move-to-safe-in-mpv-android2018/03/17 08:07:36
wakjal12upvoted (100.00%) @zulfikaraw / suggestions-add-file-save-and-move-to-safe-in-mpv-android
2018/03/17 08:07:36
| author | zulfikaraw |
| permlink | suggestions-add-file-save-and-move-to-safe-in-mpv-android |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20749053/Trx 627367c3317b40989d0ca26a23c9b9abfb8c87e2 |
View Raw JSON Data
{
"block": 20749053,
"op": [
"vote",
{
"author": "zulfikaraw",
"permlink": "suggestions-add-file-save-and-move-to-safe-in-mpv-android",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-17T08:07:36",
"trx_id": "627367c3317b40989d0ca26a23c9b9abfb8c87e2",
"trx_in_block": 5,
"virtual_op": 0
}wakjal12received 0.011 SBD, 0.008 SP author reward for @wakjal12 / steem-meetup-the-secret-behind-indonesia-tag2018/03/16 08:18:48
wakjal12received 0.011 SBD, 0.008 SP author reward for @wakjal12 / steem-meetup-the-secret-behind-indonesia-tag
2018/03/16 08:18:48
| author | wakjal12 |
| permlink | steem-meetup-the-secret-behind-indonesia-tag |
| sbd payout | 0.011 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 12.248418 VESTS |
| Transaction Info | Block #20720483/Virtual Operation #14 |
View Raw JSON Data
{
"block": 20720483,
"op": [
"author_reward",
{
"author": "wakjal12",
"permlink": "steem-meetup-the-secret-behind-indonesia-tag",
"sbd_payout": "0.011 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "12.248418 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-16T08:18:48",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 14
}utopian.payreceived 0.004 SP benefactor reward from @wakjal122018/03/16 08:18:48
utopian.payreceived 0.004 SP benefactor reward from @wakjal12
2018/03/16 08:18:48
| author | wakjal12 |
| benefactor | utopian.pay |
| permlink | steem-meetup-the-secret-behind-indonesia-tag |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 6.124209 VESTS |
| Transaction Info | Block #20720483/Virtual Operation #13 |
View Raw JSON Data
{
"block": 20720483,
"op": [
"comment_benefactor_reward",
{
"author": "wakjal12",
"benefactor": "utopian.pay",
"permlink": "steem-meetup-the-secret-behind-indonesia-tag",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "6.124209 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-16T08:18:48",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 13
}wakjal12received 0.027 SBD, 0.015 SP author reward for @wakjal12 / suggestions-add-undo-redo2018/03/16 04:53:21
wakjal12received 0.027 SBD, 0.015 SP author reward for @wakjal12 / suggestions-add-undo-redo
2018/03/16 04:53:21
| author | wakjal12 |
| permlink | suggestions-add-undo-redo |
| sbd payout | 0.027 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 24.497021 VESTS |
| Transaction Info | Block #20716379/Virtual Operation #7 |
View Raw JSON Data
{
"block": 20716379,
"op": [
"author_reward",
{
"author": "wakjal12",
"permlink": "suggestions-add-undo-redo",
"sbd_payout": "0.027 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "24.497021 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-16T04:53:21",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 7
}utopian.payreceived 0.009 SP benefactor reward from @wakjal122018/03/16 04:53:21
utopian.payreceived 0.009 SP benefactor reward from @wakjal12
2018/03/16 04:53:21
| author | wakjal12 |
| benefactor | utopian.pay |
| permlink | suggestions-add-undo-redo |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 14.289928 VESTS |
| Transaction Info | Block #20716379/Virtual Operation #6 |
View Raw JSON Data
{
"block": 20716379,
"op": [
"comment_benefactor_reward",
{
"author": "wakjal12",
"benefactor": "utopian.pay",
"permlink": "suggestions-add-undo-redo",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "14.289928 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-16T04:53:21",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 6
}2018/03/13 18:46:00
2018/03/13 18:46:00
| author | sarmizegetusa |
| body | Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules). - You are suggesting a voice recording feature, for an app that is intended to be used as a notepad. (not for recording ideas/conversations etc). As this is a text app, I believe this additional feature will not bring any value to the app itself. - Also, your contribution is not narrative enough. You have repeated some phrases over and over again. See bellow: > I suggest that the developers should add a ''voice note'' recording to the features. I suggest that the developers should add a ''voice note'' recording to notepad application. This feature feature will help to capture. I suggest that the developers should add a ''voice note'' recording the user’s thought on the go. You can contact us on [Discord](https://discord.gg/uTyJkNm). **[[utopian-moderator]](https://utopian.io/moderators)** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | wakjal12 |
| parent permlink | suggestions-add-more-feature-in-notepad |
| permlink | re-wakjal12-suggestions-add-more-feature-in-notepad-20180313t184555109z |
| title | |
| Transaction Info | Block #20646744/Trx 51ddcce20490101861b255715ee26d29cced3abb |
View Raw JSON Data
{
"block": 20646744,
"op": [
"comment",
{
"author": "sarmizegetusa",
"body": "Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules).\n- You are suggesting a voice recording feature, for an app that is intended to be used as a notepad. (not for recording ideas/conversations etc). As this is a text app, I believe this additional feature will not bring any value to the app itself.\n- Also, your contribution is not narrative enough. You have repeated some phrases over and over again. See bellow:\n> I suggest that the developers should add a ''voice note'' recording to the features. I suggest that the developers should add a ''voice note'' recording to notepad application. This feature feature will help to capture. I suggest that the developers should add a ''voice note'' recording the user’s thought on the go.\n\nYou can contact us on [Discord](https://discord.gg/uTyJkNm).\n**[[utopian-moderator]](https://utopian.io/moderators)**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "wakjal12",
"parent_permlink": "suggestions-add-more-feature-in-notepad",
"permlink": "re-wakjal12-suggestions-add-more-feature-in-notepad-20180313t184555109z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-03-13T18:46:00",
"trx_id": "51ddcce20490101861b255715ee26d29cced3abb",
"trx_in_block": 26,
"virtual_op": 0
}wakjal12published a new post: suggestions-add-more-feature-in-notepad2018/03/13 18:04:42
wakjal12published a new post: suggestions-add-more-feature-in-notepad
2018/03/13 18:04:42
| author | wakjal12 |
| body | # Components Openintents Notepad is an open source application notepad that is provided with the Android. Openintents Notepad allows users to create, edit, send, and delete notes. But notepad application does not have voice note feature and security lock, I think this feature will be very useful for the users. # Proposal * I suggest that the developers should add a ''voice note'' recording to the features. I suggest that the developers should add a ''voice note'' recording to notepad application. This feature feature will help to capture. I suggest that the developers should add a ''voice note'' recording the user’s thought on the go. * Display Notepad  * My Suggestions  * I suggestions to Notepad app to add security lock feature to make user more secure using this application without any fear.   # Benefits * Adding this feature to Notepad will make the application professional and advances and user friendly. It will help capture user’s thought and it will allow users to do multiple things at a the same time. This will help increase the number of users of the application. * Usability or rather the benefits of this feature, users can secure their data they have stored in the notepad application, if the application is safe then users will also be happy to use this application. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-notepad">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":4216396,"name":"notepad","full_name":"openintents/notepad","html_url":"https://github.com/openintents/notepad","fork":false,"owner":{"login":"openintents"}},"pullRequests":[],"platform":"github","type":"ideas","tags":["utopian-io","suggestions","opensource","oi","notepad"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg"],"moderator":{"account":"sarmizegetusa","time":"2018-03-13T18:04:41.754Z","flagged":true,"reviewed":false,"pending":false},"questions":[],"score":null} |
| parent author | |
| parent permlink | utopian-io |
| permlink | suggestions-add-more-feature-in-notepad |
| title | Suggestions add more feature in notepad |
| Transaction Info | Block #20645918/Trx a2c51fdf7a24b7102b18d9b0b870270aeb39f6ed |
View Raw JSON Data
{
"block": 20645918,
"op": [
"comment",
{
"author": "wakjal12",
"body": "# Components\nOpenintents Notepad is an open source application notepad that is provided with the Android. Openintents Notepad allows users to create, edit, send, and delete notes. \nBut notepad application does not have voice note feature and security lock, I think this feature will be very useful for the users.\n\n# Proposal\n* I suggest that the developers should add a ''voice note'' recording to the features. I suggest that the developers should add a ''voice note'' recording to notepad application. This feature feature will help to capture. I suggest that the developers should add a ''voice note'' recording the user’s thought on the go.\n\n* Display Notepad\n\n\n* My Suggestions\n\n\n* I suggestions to Notepad app to add security lock feature to make user more secure using this application without any fear.\n\n\n\n\n# Benefits\n* Adding this feature to Notepad will make the application professional and advances and user friendly. It will help capture user’s thought and it will allow users to do multiple things at a the same time. This will help increase the number of users of the application.\n\n* Usability or rather the benefits of this feature, users can secure their data they have stored in the notepad application, if the application is safe then users will also be happy to use this application.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-notepad\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":4216396,\"name\":\"notepad\",\"full_name\":\"openintents/notepad\",\"html_url\":\"https://github.com/openintents/notepad\",\"fork\":false,\"owner\":{\"login\":\"openintents\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"ideas\",\"tags\":[\"utopian-io\",\"suggestions\",\"opensource\",\"oi\",\"notepad\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg\"],\"moderator\":{\"account\":\"sarmizegetusa\",\"time\":\"2018-03-13T18:04:41.754Z\",\"flagged\":true,\"reviewed\":false,\"pending\":false},\"questions\":[],\"score\":null}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "suggestions-add-more-feature-in-notepad",
"title": "Suggestions add more feature in notepad"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-13T18:04:42",
"trx_id": "a2c51fdf7a24b7102b18d9b0b870270aeb39f6ed",
"trx_in_block": 15,
"virtual_op": 0
}2018/03/13 17:28:06
2018/03/13 17:28:06
| author | omersurer |
| body | Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules). - I cannot see how did you noticed that there were a new version available of this app. It might be useful to notice that this feature was missing. - Please keep in mind suggestions on note apps, calendars, calculators, music players etc. are not getting rewarded because they all have similar features. You can contact us on [Discord](https://discord.gg/uTyJkNm). **[[utopian-moderator]](https://utopian.io/moderators)** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | wakjal12 |
| parent permlink | suggestions-add-more-feature-in-boostnote |
| permlink | re-wakjal12-suggestions-add-more-feature-in-boostnote-20180313t172809088z |
| title | |
| Transaction Info | Block #20645186/Trx 29d9a6b143019a6f4336d9cb5649797a4802f339 |
View Raw JSON Data
{
"block": 20645186,
"op": [
"comment",
{
"author": "omersurer",
"body": "Your contribution cannot be approved because it does not follow the [Utopian Rules](https://utopian.io/rules).\n\n- I cannot see how did you noticed that there were a new version available of this app. It might be useful to notice that this feature was missing.\n- Please keep in mind suggestions on note apps, calendars, calculators, music players etc. are not getting rewarded because they all have similar features.\n\nYou can contact us on [Discord](https://discord.gg/uTyJkNm).\n**[[utopian-moderator]](https://utopian.io/moderators)**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "wakjal12",
"parent_permlink": "suggestions-add-more-feature-in-boostnote",
"permlink": "re-wakjal12-suggestions-add-more-feature-in-boostnote-20180313t172809088z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-03-13T17:28:06",
"trx_id": "29d9a6b143019a6f4336d9cb5649797a4802f339",
"trx_in_block": 40,
"virtual_op": 0
}wakjal12published a new post: suggestions-add-more-feature-in-boostnote2018/03/13 17:24:21
wakjal12published a new post: suggestions-add-more-feature-in-boostnote
2018/03/13 17:24:21
| author | wakjal12 |
| body |  # Components Boostnote is an open source project. It's an independent project with its ongoing development.. it is a note-taking app for programmers that focusing on markdown, snippet and customizability. # Proposal * Upgrade Notifications I suggestions that the Boostnote app add the Upgrade Notifications feature to let users know when the new version comes out.  * Print I propose that the developers of boostnote application add this option for users to be able to print their documents directly from the application using a wi-fi, or a bluetooth printer, since the application lacks the print option.  # Benefits * Upgrade notifications Benefit from this feature, Users do not need to go to google play store elsewhere to search for newly realized version. Users will be able to know when this new version is done by doing so so they will not be left on new features. Users will be relaxed because they know they are using the current version. and I think this feature will be very helpful in developing boostnote app. * Print The benefits of the print feature, this feature will improve the user experience and make them print their documents directly from boostnote rather than exporting to a laptop or other external device and it will need a long process. so with this feature, users will be easier to print their documents without have to spend a long time, they can print directly through the mobile. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-boostnote">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":102354501,"name":"boostnote-mobile","full_name":"BoostIO/boostnote-mobile","html_url":"https://github.com/BoostIO/boostnote-mobile","fork":false,"owner":{"login":"BoostIO"}},"pullRequests":[],"platform":"github","type":"ideas","tags":["utopian-io","suggestions","opensource","boosnote","apa"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg"],"moderator":{"account":"omersurer","time":"2018-03-13T17:24:20.771Z","flagged":true,"reviewed":false,"pending":false},"questions":[],"score":null} |
| parent author | |
| parent permlink | utopian-io |
| permlink | suggestions-add-more-feature-in-boostnote |
| title | Suggestions add more feature in boostnote |
| Transaction Info | Block #20645111/Trx b719b7d0a4b2cc63dd8bf8ceedcb620deaabd445 |
View Raw JSON Data
{
"block": 20645111,
"op": [
"comment",
{
"author": "wakjal12",
"body": "\n\n# Components\nBoostnote is an open source project. It's an independent project with its ongoing development.. it is a note-taking app for programmers that focusing on markdown, snippet and customizability.\n\n# Proposal\n* Upgrade Notifications\n\nI suggestions that the Boostnote app add the Upgrade Notifications feature to let users know when the new version comes out.\n\n\n\n* Print\n\nI propose that the developers of boostnote application add this option for users to be able to print their documents directly from the application using a wi-fi, or a bluetooth printer, since the application lacks the print option.\n\n\n# Benefits\n* Upgrade notifications\n\nBenefit from this feature, Users do not need to go to google play store elsewhere to search for newly realized version. Users will be able to know when this new version is done by doing so so they will not be left on new features. Users will be relaxed because they know they are using the current version. and I think this feature will be very helpful in developing boostnote app.\n\n* Print\n\nThe benefits of the print feature, this feature will improve the user experience and make them print their documents directly from boostnote rather than exporting to a laptop or other external device and it will need a long process. so with this feature, users will be easier to print their documents without have to spend a long time, they can print directly through the mobile.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-boostnote\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":102354501,\"name\":\"boostnote-mobile\",\"full_name\":\"BoostIO/boostnote-mobile\",\"html_url\":\"https://github.com/BoostIO/boostnote-mobile\",\"fork\":false,\"owner\":{\"login\":\"BoostIO\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"ideas\",\"tags\":[\"utopian-io\",\"suggestions\",\"opensource\",\"boosnote\",\"apa\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg\"],\"moderator\":{\"account\":\"omersurer\",\"time\":\"2018-03-13T17:24:20.771Z\",\"flagged\":true,\"reviewed\":false,\"pending\":false},\"questions\":[],\"score\":null}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "suggestions-add-more-feature-in-boostnote",
"title": "Suggestions add more feature in boostnote"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-13T17:24:21",
"trx_id": "b719b7d0a4b2cc63dd8bf8ceedcb620deaabd445",
"trx_in_block": 36,
"virtual_op": 0
}2018/03/12 18:43:09
2018/03/12 18:43:09
| author | utopian-io |
| body | Hey @wakjal12, your contribution was rejected by the supervisor @knowledges because he found out that it did not follow the [Utopian rules](https://utopian.io/rules). Upvote this comment to help Utopian grow its power and help other Open Source contributions like this one. Do you want to chat? Join me on [Discord](https://discord.gg/Pc8HG9x). |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | wakjal12 |
| parent permlink | suggestions-add-undo-redo |
| permlink | re-wakjal12-suggestions-add-undo-redo-20180311t161721519z |
| title | |
| Transaction Info | Block #20617899/Trx 4b58b4b156f1d8ef4bc648822f1e1a0da6e152cb |
View Raw JSON Data
{
"block": 20617899,
"op": [
"comment",
{
"author": "utopian-io",
"body": "Hey @wakjal12, your contribution was rejected by the supervisor @knowledges because he found out that it did not follow the [Utopian rules](https://utopian.io/rules).\n\nUpvote this comment to help Utopian grow its power and help other Open Source contributions like this one. Do you want to chat? Join me on [Discord](https://discord.gg/Pc8HG9x).",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "wakjal12",
"parent_permlink": "suggestions-add-undo-redo",
"permlink": "re-wakjal12-suggestions-add-undo-redo-20180311t161721519z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T18:43:09",
"trx_id": "4b58b4b156f1d8ef4bc648822f1e1a0da6e152cb",
"trx_in_block": 20,
"virtual_op": 0
}utopian-ioremoved vote from (0.00%) @wakjal12 / suggestions-add-undo-redo2018/03/12 18:43:03
utopian-ioremoved vote from (0.00%) @wakjal12 / suggestions-add-undo-redo
2018/03/12 18:43:03
| author | wakjal12 |
| permlink | suggestions-add-undo-redo |
| voter | utopian-io |
| weight | 0 (0.00%) |
| Transaction Info | Block #20617897/Trx 7687e79d571f5f2f0a637c2a0d41d9f9413040da |
View Raw JSON Data
{
"block": 20617897,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "suggestions-add-undo-redo",
"voter": "utopian-io",
"weight": 0
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T18:43:03",
"trx_id": "7687e79d571f5f2f0a637c2a0d41d9f9413040da",
"trx_in_block": 29,
"virtual_op": 0
}wakjal12published a new post: suggestions-add-undo-redo2018/03/12 18:42:51
wakjal12published a new post: suggestions-add-undo-redo
2018/03/12 18:42:51
| author | wakjal12 |
| body | # Components Openintents Notepad is an open source application notepad that is provided with the Android. Openintents Notepad allows users to create, edit, send, and delete notes. But does not have a undo redo feature. # Proposal my suggestion for notepad app, the developer should add undo and redo feature. Undo is a command to cancel a command that has been done before. Redo is a way to repeat something that has been canceled before. The redo command is the reverse of the Undo command, the redo command serves to return a canceled command using the Undo command.  # Benefits Benefit of this feature, the user can cancel the command that has been done before. And the user can also repeat something that has been canceled before. So in conclusion Undo command is used when you want to cancel a command that you have previously done, but with the record commands are not yet save. While the redo command is used to undo the Undo command. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/suggestions-add-undo-redo">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":4216396,"name":"notepad","full_name":"openintents/notepad","html_url":"https://github.com/openintents/notepad","fork":false,"owner":{"login":"openintents"}},"pullRequests":[],"platform":"github","type":"ideas","tags":["utopian-io","suggestions","opensource","openintents","notepad"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518339730/suwok80uuz5pgywlt4xi.jpg"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518339730/suwok80uuz5pgywlt4xi.jpg"],"moderator":{"account":"knowledges","time":"2018-03-12T18:42:49.611Z","reviewed":false,"pending":false,"flagged":true},"questions":[],"score":50} |
| parent author | |
| parent permlink | utopian-io |
| permlink | suggestions-add-undo-redo |
| title | Suggestions add Undo Redo |
| Transaction Info | Block #20617893/Trx 0c224ee246ddaf2d33ac1b3f143fbf5bc215bf17 |
View Raw JSON Data
{
"block": 20617893,
"op": [
"comment",
{
"author": "wakjal12",
"body": "# Components\nOpenintents Notepad is an open source application notepad that is provided with the Android. Openintents Notepad allows users to create, edit, send, and delete notes. But does not have a undo redo feature.\n\n# Proposal\nmy suggestion for notepad app, the developer should add undo and redo feature.\nUndo is a command to cancel a command that has been done before.\nRedo is a way to repeat something that has been canceled before.\nThe redo command is the reverse of the Undo command, the redo command serves to return a canceled command using the Undo command.\n\n\n# Benefits\nBenefit of this feature, the user can cancel the command that has been done before. And the user can also repeat something that has been canceled before.\nSo in conclusion Undo command is used when you want to cancel a command that you have previously done, but with the record commands are not yet save.\nWhile the redo command is used to undo the Undo command.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/suggestions-add-undo-redo\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":4216396,\"name\":\"notepad\",\"full_name\":\"openintents/notepad\",\"html_url\":\"https://github.com/openintents/notepad\",\"fork\":false,\"owner\":{\"login\":\"openintents\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"ideas\",\"tags\":[\"utopian-io\",\"suggestions\",\"opensource\",\"openintents\",\"notepad\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518339730/suwok80uuz5pgywlt4xi.jpg\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518339730/suwok80uuz5pgywlt4xi.jpg\"],\"moderator\":{\"account\":\"knowledges\",\"time\":\"2018-03-12T18:42:49.611Z\",\"reviewed\":false,\"pending\":false,\"flagged\":true},\"questions\":[],\"score\":50}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "suggestions-add-undo-redo",
"title": "Suggestions add Undo Redo "
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T18:42:51",
"trx_id": "0c224ee246ddaf2d33ac1b3f143fbf5bc215bf17",
"trx_in_block": 5,
"virtual_op": 0
}wakjal12upvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-boostnote2018/03/12 07:36:54
wakjal12upvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-boostnote
2018/03/12 07:36:54
| author | wakjal12 |
| permlink | suggestions-add-more-feature-in-boostnote |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20604587/Trx 7ca04d12bbd87eee24090ac625336862c9dca109 |
View Raw JSON Data
{
"block": 20604587,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "suggestions-add-more-feature-in-boostnote",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T07:36:54",
"trx_id": "7ca04d12bbd87eee24090ac625336862c9dca109",
"trx_in_block": 27,
"virtual_op": 0
}wakjal12upvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-notepad2018/03/12 07:36:36
wakjal12upvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-notepad
2018/03/12 07:36:36
| author | wakjal12 |
| permlink | suggestions-add-more-feature-in-notepad |
| voter | wakjal12 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20604581/Trx 95ece884635a501c3079540b783f6d8423ae61a5 |
View Raw JSON Data
{
"block": 20604581,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "suggestions-add-more-feature-in-notepad",
"voter": "wakjal12",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T07:36:36",
"trx_id": "95ece884635a501c3079540b783f6d8423ae61a5",
"trx_in_block": 22,
"virtual_op": 0
}krishatnetupvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-notepad2018/03/12 06:33:15
krishatnetupvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-notepad
2018/03/12 06:33:15
| author | wakjal12 |
| permlink | suggestions-add-more-feature-in-notepad |
| voter | krishatnet |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20603317/Trx 45c570a6ba7b53bb317f28a75d57b1c51ed5b988 |
View Raw JSON Data
{
"block": 20603317,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "suggestions-add-more-feature-in-notepad",
"voter": "krishatnet",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T06:33:15",
"trx_id": "45c570a6ba7b53bb317f28a75d57b1c51ed5b988",
"trx_in_block": 17,
"virtual_op": 0
}nafestwupvoted (65.00%) @wakjal12 / suggestions-add-more-feature-in-notepad2018/03/12 04:32:33
nafestwupvoted (65.00%) @wakjal12 / suggestions-add-more-feature-in-notepad
2018/03/12 04:32:33
| author | wakjal12 |
| permlink | suggestions-add-more-feature-in-notepad |
| voter | nafestw |
| weight | 6500 (65.00%) |
| Transaction Info | Block #20600905/Trx a87edf0676c4f8c23a510b3271cd57563e841f39 |
View Raw JSON Data
{
"block": 20600905,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "suggestions-add-more-feature-in-notepad",
"voter": "nafestw",
"weight": 6500
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T04:32:33",
"trx_id": "a87edf0676c4f8c23a510b3271cd57563e841f39",
"trx_in_block": 7,
"virtual_op": 0
}wakjal12updated options for suggestions-add-more-feature-in-notepad2018/03/12 03:58:48
wakjal12updated options for suggestions-add-more-feature-in-notepad
2018/03/12 03:58:48
| allow curation rewards | true |
| allow votes | true |
| author | wakjal12 |
| extensions | [[0,{"beneficiaries":[{"account":"utopian.pay","weight":2500}]}]] |
| max accepted payout | 1000000.000 SBD |
| percent steem dollars | 10000 |
| permlink | suggestions-add-more-feature-in-notepad |
| Transaction Info | Block #20600232/Trx 81258252237564ad7241ac688b7bd52f46053d86 |
View Raw JSON Data
{
"block": 20600232,
"op": [
"comment_options",
{
"allow_curation_rewards": true,
"allow_votes": true,
"author": "wakjal12",
"extensions": [
[
0,
{
"beneficiaries": [
{
"account": "utopian.pay",
"weight": 2500
}
]
}
]
],
"max_accepted_payout": "1000000.000 SBD",
"percent_steem_dollars": 10000,
"permlink": "suggestions-add-more-feature-in-notepad"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T03:58:48",
"trx_id": "81258252237564ad7241ac688b7bd52f46053d86",
"trx_in_block": 29,
"virtual_op": 0
}wakjal12published a new post: suggestions-add-more-feature-in-notepad2018/03/12 03:58:48
wakjal12published a new post: suggestions-add-more-feature-in-notepad
2018/03/12 03:58:48
| author | wakjal12 |
| body | # Components Openintents Notepad is an open source application notepad that is provided with the Android. Openintents Notepad allows users to create, edit, send, and delete notes. But notepad application does not have voice note feature and security lock, I think this feature will be very useful for the users. # Proposal * I suggest that the developers should add a ''voice note'' recording to the features. I suggest that the developers should add a ''voice note'' recording to notepad application. This feature feature will help to capture. I suggest that the developers should add a ''voice note'' recording the user’s thought on the go. * Display Notepad  * My Suggestions  * I suggestions to Notepad app to add security lock feature to make user more secure using this application without any fear.   # Benefits * Adding this feature to Notepad will make the application professional and advances and user friendly. It will help capture user’s thought and it will allow users to do multiple things at a the same time. This will help increase the number of users of the application. * Usability or rather the benefits of this feature, users can secure their data they have stored in the notepad application, if the application is safe then users will also be happy to use this application. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-notepad">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":4216396,"name":"notepad","full_name":"openintents/notepad","html_url":"https://github.com/openintents/notepad","fork":false,"owner":{"login":"openintents"}},"pullRequests":[],"platform":"github","type":"ideas","tags":["utopian-io","suggestions","opensource","oi","notepad"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg"]} |
| parent author | |
| parent permlink | utopian-io |
| permlink | suggestions-add-more-feature-in-notepad |
| title | Suggestions add more feature in notepad |
| Transaction Info | Block #20600232/Trx 81258252237564ad7241ac688b7bd52f46053d86 |
View Raw JSON Data
{
"block": 20600232,
"op": [
"comment",
{
"author": "wakjal12",
"body": "# Components\nOpenintents Notepad is an open source application notepad that is provided with the Android. Openintents Notepad allows users to create, edit, send, and delete notes. \nBut notepad application does not have voice note feature and security lock, I think this feature will be very useful for the users.\n\n# Proposal\n* I suggest that the developers should add a ''voice note'' recording to the features. I suggest that the developers should add a ''voice note'' recording to notepad application. This feature feature will help to capture. I suggest that the developers should add a ''voice note'' recording the user’s thought on the go.\n\n* Display Notepad\n\n\n* My Suggestions\n\n\n* I suggestions to Notepad app to add security lock feature to make user more secure using this application without any fear.\n\n\n\n\n# Benefits\n* Adding this feature to Notepad will make the application professional and advances and user friendly. It will help capture user’s thought and it will allow users to do multiple things at a the same time. This will help increase the number of users of the application.\n\n* Usability or rather the benefits of this feature, users can secure their data they have stored in the notepad application, if the application is safe then users will also be happy to use this application.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-notepad\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":4216396,\"name\":\"notepad\",\"full_name\":\"openintents/notepad\",\"html_url\":\"https://github.com/openintents/notepad\",\"fork\":false,\"owner\":{\"login\":\"openintents\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"ideas\",\"tags\":[\"utopian-io\",\"suggestions\",\"opensource\",\"oi\",\"notepad\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419226/hltuyf7snoufjkeqnzpt.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419257/gw8qwujbulftnxvrgndc.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419381/z4ro7ydi5xs8ytwnldgi.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518419390/hkhjy269kymvqvupcbwl.jpg\"]}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "suggestions-add-more-feature-in-notepad",
"title": "Suggestions add more feature in notepad"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T03:58:48",
"trx_id": "81258252237564ad7241ac688b7bd52f46053d86",
"trx_in_block": 29,
"virtual_op": 0
}mvanyiupvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-boostnote2018/03/12 03:58:15
mvanyiupvoted (100.00%) @wakjal12 / suggestions-add-more-feature-in-boostnote
2018/03/12 03:58:15
| author | wakjal12 |
| permlink | suggestions-add-more-feature-in-boostnote |
| voter | mvanyi |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20600221/Trx 95d260ae17d5ae29edcb5df6c1be35ae24b4aae9 |
View Raw JSON Data
{
"block": 20600221,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "suggestions-add-more-feature-in-boostnote",
"voter": "mvanyi",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T03:58:15",
"trx_id": "95d260ae17d5ae29edcb5df6c1be35ae24b4aae9",
"trx_in_block": 28,
"virtual_op": 0
}wakjal12updated options for suggestions-add-more-feature-in-boostnote2018/03/12 03:31:33
wakjal12updated options for suggestions-add-more-feature-in-boostnote
2018/03/12 03:31:33
| allow curation rewards | true |
| allow votes | true |
| author | wakjal12 |
| extensions | [[0,{"beneficiaries":[{"account":"utopian.pay","weight":2500}]}]] |
| max accepted payout | 1000000.000 SBD |
| percent steem dollars | 10000 |
| permlink | suggestions-add-more-feature-in-boostnote |
| Transaction Info | Block #20599688/Trx fdefe5429cd5c80b3298757acaa2a29ee8616967 |
View Raw JSON Data
{
"block": 20599688,
"op": [
"comment_options",
{
"allow_curation_rewards": true,
"allow_votes": true,
"author": "wakjal12",
"extensions": [
[
0,
{
"beneficiaries": [
{
"account": "utopian.pay",
"weight": 2500
}
]
}
]
],
"max_accepted_payout": "1000000.000 SBD",
"percent_steem_dollars": 10000,
"permlink": "suggestions-add-more-feature-in-boostnote"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T03:31:33",
"trx_id": "fdefe5429cd5c80b3298757acaa2a29ee8616967",
"trx_in_block": 44,
"virtual_op": 0
}wakjal12published a new post: suggestions-add-more-feature-in-boostnote2018/03/12 03:31:33
wakjal12published a new post: suggestions-add-more-feature-in-boostnote
2018/03/12 03:31:33
| author | wakjal12 |
| body |  # Components Boostnote is an open source project. It's an independent project with its ongoing development.. it is a note-taking app for programmers that focusing on markdown, snippet and customizability. # Proposal * Upgrade Notifications I suggestions that the Boostnote app add the Upgrade Notifications feature to let users know when the new version comes out.  * Print I propose that the developers of boostnote application add this option for users to be able to print their documents directly from the application using a wi-fi, or a bluetooth printer, since the application lacks the print option.  # Benefits * Upgrade notifications Benefit from this feature, Users do not need to go to google play store elsewhere to search for newly realized version. Users will be able to know when this new version is done by doing so so they will not be left on new features. Users will be relaxed because they know they are using the current version. and I think this feature will be very helpful in developing boostnote app. * Print The benefits of the print feature, this feature will improve the user experience and make them print their documents directly from boostnote rather than exporting to a laptop or other external device and it will need a long process. so with this feature, users will be easier to print their documents without have to spend a long time, they can print directly through the mobile. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-boostnote">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":102354501,"name":"boostnote-mobile","full_name":"BoostIO/boostnote-mobile","html_url":"https://github.com/BoostIO/boostnote-mobile","fork":false,"owner":{"login":"BoostIO"}},"pullRequests":[],"platform":"github","type":"ideas","tags":["utopian-io","suggestions","opensource","boosnote","apa"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg"]} |
| parent author | |
| parent permlink | utopian-io |
| permlink | suggestions-add-more-feature-in-boostnote |
| title | Suggestions add more feature in boostnote |
| Transaction Info | Block #20599688/Trx fdefe5429cd5c80b3298757acaa2a29ee8616967 |
View Raw JSON Data
{
"block": 20599688,
"op": [
"comment",
{
"author": "wakjal12",
"body": "\n\n# Components\nBoostnote is an open source project. It's an independent project with its ongoing development.. it is a note-taking app for programmers that focusing on markdown, snippet and customizability.\n\n# Proposal\n* Upgrade Notifications\n\nI suggestions that the Boostnote app add the Upgrade Notifications feature to let users know when the new version comes out.\n\n\n\n* Print\n\nI propose that the developers of boostnote application add this option for users to be able to print their documents directly from the application using a wi-fi, or a bluetooth printer, since the application lacks the print option.\n\n\n# Benefits\n* Upgrade notifications\n\nBenefit from this feature, Users do not need to go to google play store elsewhere to search for newly realized version. Users will be able to know when this new version is done by doing so so they will not be left on new features. Users will be relaxed because they know they are using the current version. and I think this feature will be very helpful in developing boostnote app.\n\n* Print\n\nThe benefits of the print feature, this feature will improve the user experience and make them print their documents directly from boostnote rather than exporting to a laptop or other external device and it will need a long process. so with this feature, users will be easier to print their documents without have to spend a long time, they can print directly through the mobile.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@wakjal12/suggestions-add-more-feature-in-boostnote\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":102354501,\"name\":\"boostnote-mobile\",\"full_name\":\"BoostIO/boostnote-mobile\",\"html_url\":\"https://github.com/BoostIO/boostnote-mobile\",\"fork\":false,\"owner\":{\"login\":\"BoostIO\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"ideas\",\"tags\":[\"utopian-io\",\"suggestions\",\"opensource\",\"boosnote\",\"apa\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960122/uuuwlmvdtjgxyauzk8pq.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519070171/m02ihqxub37x5gzildpm.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1518960308/amuy60b5bcdizqbve8jc.jpg\"]}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "suggestions-add-more-feature-in-boostnote",
"title": "Suggestions add more feature in boostnote"
}
],
"op_in_trx": 0,
"timestamp": "2018-03-12T03:31:33",
"trx_id": "fdefe5429cd5c80b3298757acaa2a29ee8616967",
"trx_in_block": 44,
"virtual_op": 0
}2018/03/11 16:17:21
2018/03/11 16:17:21
| author | utopian-io |
| body | ### Hey @wakjal12 I am @utopian-io. I have just upvoted you! #### Achievements - You have less than 500 followers. Just gave you a gift to help you succeed! - This is your first accepted contribution here in Utopian. Welcome! #### Suggestions - Contribute more often to get higher and higher rewards. I wish to see you often! - Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck! #### Get Noticed! - Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions! #### Community-Driven Witness! I am the first and only Steem Community-Driven Witness. <a href="https://discord.gg/zTrEMqB">Participate on Discord</a>. Lets GROW TOGETHER! - <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for my Witness With SteemConnect</a> - <a href="https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1">Proxy vote to Utopian Witness with SteemConnect</a> - Or vote/proxy on <a href="https://steemit.com/~witnesses">Steemit Witnesses</a> [](https://steemit.com/~witnesses) **Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | wakjal12 |
| parent permlink | suggestions-add-undo-redo |
| permlink | re-wakjal12-suggestions-add-undo-redo-20180311t161721519z |
| title | |
| Transaction Info | Block #20586230/Trx 83ca95b89ce599542fad3284f110b4a3fffb83cb |
View Raw JSON Data
{
"block": 20586230,
"op": [
"comment",
{
"author": "utopian-io",
"body": "### Hey @wakjal12 I am @utopian-io. I have just upvoted you!\n#### Achievements\n- You have less than 500 followers. Just gave you a gift to help you succeed!\n- This is your first accepted contribution here in Utopian. Welcome!\n#### Suggestions\n- Contribute more often to get higher and higher rewards. I wish to see you often!\n- Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!\n#### Get Noticed!\n- Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!\n#### Community-Driven Witness!\nI am the first and only Steem Community-Driven Witness. <a href=\"https://discord.gg/zTrEMqB\">Participate on Discord</a>. Lets GROW TOGETHER!\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1\">Vote for my Witness With SteemConnect</a>\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1\">Proxy vote to Utopian Witness with SteemConnect</a>\n- Or vote/proxy on <a href=\"https://steemit.com/~witnesses\">Steemit Witnesses</a>\n\n[](https://steemit.com/~witnesses)\n\n**Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "wakjal12",
"parent_permlink": "suggestions-add-undo-redo",
"permlink": "re-wakjal12-suggestions-add-undo-redo-20180311t161721519z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-03-11T16:17:21",
"trx_id": "83ca95b89ce599542fad3284f110b4a3fffb83cb",
"trx_in_block": 20,
"virtual_op": 0
}utopian-ioupvoted (3.71%) @wakjal12 / suggestions-add-undo-redo2018/03/11 16:17:18
utopian-ioupvoted (3.71%) @wakjal12 / suggestions-add-undo-redo
2018/03/11 16:17:18
| author | wakjal12 |
| permlink | suggestions-add-undo-redo |
| voter | utopian-io |
| weight | 371 (3.71%) |
| Transaction Info | Block #20586229/Trx 0afa9e6de29a99ca0a8a934dda78378e6cba2fe2 |
View Raw JSON Data
{
"block": 20586229,
"op": [
"vote",
{
"author": "wakjal12",
"permlink": "suggestions-add-undo-redo",
"voter": "utopian-io",
"weight": 371
}
],
"op_in_trx": 0,
"timestamp": "2018-03-11T16:17:18",
"trx_id": "0afa9e6de29a99ca0a8a934dda78378e6cba2fe2",
"trx_in_block": 45,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress41.92%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779091554
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779091554
},
"rc_account": {
"account": "wakjal12",
"max_rc": "10164408779",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779091554
}
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"profile_image":"","name":"Ulih09","location":"Aceh","cover_image":"https://img.esteem.ws/ajmdkc471a.jpg"} |
| JSON METADATA | |
| profile | {"profile_image":"","name":"Ulih09","location":"Aceh","cover_image":"https://img.esteem.ws/ajmdkc471a.jpg"} |
{
"posting_json_metadata": {
"profile": {
"profile_image": "",
"name": "Ulih09",
"location": "Aceh",
"cover_image": "https://img.esteem.ws/ajmdkc471a.jpg"
}
},
"json_metadata": {
"profile": {
"profile_image": "",
"name": "Ulih09",
"location": "Aceh",
"cover_image": "https://img.esteem.ws/ajmdkc471a.jpg"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM4zVmKMfmrAdehvcb4bsqDmsq6FcWHo5S5HDbd8pdz6MaRsTNnb1/1
Active
Single Signature
Public Keys
STM7j3crWKMBmXHLwGoPSwLypq2QXhekoyhdQ7c4k9JjLv9Qiv2F31/1
Posting
Single Signature
Public Keys
STM7augqtxz8855p97iQeUuZ3sRz6suCDGd2zM4dj6fiYDxAdTHf11/1
Memo
STM5oN8TTckevmEpc4sfs8anyjegp9g8nEzU77p5bddab7eTbkR6n
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM4zVmKMfmrAdehvcb4bsqDmsq6FcWHo5S5HDbd8pdz6MaRsTNnb",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM7j3crWKMBmXHLwGoPSwLypq2QXhekoyhdQ7c4k9JjLv9Qiv2F3",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [
[
"dmania.app",
1
],
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM7augqtxz8855p97iQeUuZ3sRz6suCDGd2zM4dj6fiYDxAdTHf1",
1
]
],
"weight_threshold": 1
},
"memo": "STM5oN8TTckevmEpc4sfs8anyjegp9g8nEzU77p5bddab7eTbkR6n"
}Witness Votes
0 / 30
No active witness votes.
[]