Skip to content
This repository was archived by the owner on May 7, 2022. It is now read-only.

Commit 003451c

Browse files
authored
Merge pull request #3 from Autokaka/dev
Dev
2 parents fb253a4 + 33de112 commit 003451c

10 files changed

Lines changed: 146 additions & 373 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
## [0.0.3]
1+
## [0.1.0]
22

3-
## 任务清单
3+
## 任务清单(持续拓展中)
44

55
目前还没有非常明确后续对这个插件的拓展方向. 我的初衷是使开发 app 过程中的 model 层完全消失, 为此我们目前需要实现:
66

77
- [x] 核心功能, json 转 object. 使用 value = json.key 或者 value = json[index]的方式访问类的成员.
88
- [x] object 重新转 string. 不是很难, 几小时就能做好.
9-
- [ ] 实现 Map 和 List 的基础方法封装, 使得能更高效地操作 JsonObject. 具体实现准备直接参考 Map 和 List 有关接口.
9+
- [x] ~~实现 Map 和 List 的基础方法封装, 使得能更高效地操作 JsonObject. 具体实现准备直接参考 Map 和 List 有关接口.~~ 考虑到需要实现的接口过多, 现采用appy的方式, 将内部数据转为确定的类型传递出来后进行操作, 最后再返还回去.
1010
- [ ] 默认封装一个统一的 JsonObject 规范. 这个规范在前期将直接写死, 后期可以由开发者自己设定, 用于每个开发团队不同场景下能够适配属于自己的 JsonObject.
1111
- [ ] 创建一个 model 和 JsonObject 的成员关联, 削弱由 dynamic 造成的类型弱化问题. 做点和 JavaScript 里不一样的.

README.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,7 @@
5252

5353
## 任务清单(持续拓展中)
5454

55-
目前还没有非常明确后续对这个插件的拓展方向. 我的初衷是使开发app过程中的model层完全消失, 为此我们目前需要实现:
56-
57-
- [x] 核心功能, json 转 object. 使用value = json.key或者value = json[index]的方式访问类的成员.
58-
- [x] object重新转string. 不是很难, 几小时就能做好.
59-
- [ ] 实现Map和List的基础方法封装, 使得能更高效地操作JsonObject. 具体实现准备直接参考Map和List有关接口.
60-
- [ ] 默认封装一个统一的JsonObject规范. 这个规范在前期将直接写死, 后期可以由开发者自己设定, 用于每个开发团队不同场景下能够适配属于自己的JsonObject.
61-
- [ ] 创建一个model和JsonObject的成员关联, 削弱由dynamic造成的类型弱化问题. 做点和JavaScript里不一样的.
55+
详见CHANGELOG.md
6256

6357
## 应用领域构思
6458

example/lib/home.dart

Lines changed: 38 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,15 @@ class HomePage extends StatefulWidget {
77
}
88

99
class _HomePageState extends State<HomePage> {
10-
var jsonStr = '''[{
10+
var jsonObject = JsonObject.decode('''[{
1111
"url": "https://baidu.com",
1212
"name": "Baidu",
13-
"time": 1234567890
13+
"time": "1234567890"
1414
},{
1515
"url": "https://google.com.hk",
1616
"name": "Google",
1717
"time": 1234567890
18-
}]''';
19-
var jsonObject;
20-
21-
Widget buildDivider() {
22-
return Divider(
23-
thickness: 1,
24-
color: Theme.of(context).primaryColor,
25-
);
26-
}
27-
28-
@override
29-
void initState() {
30-
super.initState();
31-
jsonObject = JsonObject.fromString(jsonStr);
32-
}
18+
}]''');
3319

3420
@override
3521
Widget build(BuildContext context) {
@@ -40,90 +26,59 @@ class _HomePageState extends State<HomePage> {
4026
body: ListView(
4127
padding: EdgeInsets.all(10),
4228
children: [
43-
/// get list
29+
/// encode
4430
Text(
4531
"转换成对象后的jsonObject: ",
4632
style: Theme.of(context).textTheme.headline5,
4733
),
48-
Text(jsonObject.getValue().runtimeType.toString()),
49-
Text(jsonObject.encodePretty(indent: 4)),
50-
51-
/// get map
52-
buildDivider(),
53-
Text(
54-
"访问jsonObject[0]: ",
55-
style: Theme.of(context).textTheme.headline5,
56-
),
57-
Text(jsonObject[0].getValue().runtimeType.toString()),
58-
Text(jsonObject[0].encodePretty(indent: 4)),
59-
60-
/// get url
61-
buildDivider(),
62-
Text(
63-
"访问jsonObject[0].url: ",
64-
style: Theme.of(context).textTheme.headline5,
65-
),
66-
Text(jsonObject[0].url.getValue().runtimeType.toString()),
67-
Text(jsonObject[0].url.encodePretty(indent: 4)),
68-
ElevatedButton(
69-
onPressed: () => setState(
70-
() => jsonObject[0].url = jsonObject[1].url.getValue(),
71-
),
72-
child: Text("把百度的url改成谷歌的url"),
73-
),
34+
Text(jsonObject.valueRuntimeType.toString()),
35+
Text(JsonObject.encodePretty(jsonObject, indent: 4)),
7436

75-
/// get name
76-
buildDivider(),
37+
/// get value
7738
Text(
78-
"访问jsonObject[0].name: ",
39+
"Get方法测试",
7940
style: Theme.of(context).textTheme.headline5,
8041
),
81-
Text(jsonObject[0].name.getValue().runtimeType.toString()),
82-
Text(jsonObject[0].name.encodePretty(indent: 4)),
42+
Text(jsonObject[0].getValue().toString()),
43+
Text(jsonObject[0].url.getValue().toString()),
44+
Text(jsonObject[0].name.getValue().toString()),
8345

84-
/// get time
85-
buildDivider(),
46+
/// set value
8647
Text(
87-
"访问jsonObject[0].time: ",
48+
"Set方法测试",
8849
style: Theme.of(context).textTheme.headline5,
8950
),
90-
Text(jsonObject[0].time.getValue().runtimeType.toString()),
91-
Text(jsonObject[0].time.encodePretty(indent: 4)),
92-
ElevatedButton(
93-
onPressed: () => setState(
94-
() => jsonObject[0].time = 111111111,
95-
),
96-
child: Text("修改jsonObject[0].time为111111111"),
51+
MaterialButton(
52+
onPressed: () {
53+
setState(() {
54+
jsonObject[0].url = jsonObject[1].url;
55+
});
56+
},
57+
child: Text("设置百度链接为谷歌链接"),
9758
),
9859

99-
/// add key value pairs using dot operator
100-
buildDivider(),
60+
/// excecute test
10161
Text(
102-
"访问jsonObject[1].stars: ",
62+
"方法执行能力",
10363
style: Theme.of(context).textTheme.headline5,
10464
),
105-
Text(jsonObject[1].stars.getValue().runtimeType.toString()),
106-
Text(jsonObject[1].stars.encodePretty(indent: 4)),
107-
ElevatedButton(
108-
onPressed: () => setState(
109-
() => jsonObject[1].stars = 5,
110-
),
111-
child: Text('jsonObject[1].stars = 5'),
112-
),
113-
114-
/// add key value pairs using add()
115-
buildDivider(),
116-
Text(
117-
"访问jsonObject[0].stars: ",
118-
style: Theme.of(context).textTheme.headline5,
65+
Column(
66+
children: jsonObject.getValue().map<Text>((item) {
67+
final itemObject = JsonObject.fromMap(item);
68+
return Text(itemObject.name.getValue());
69+
}).toList(),
11970
),
120-
Text(jsonObject[0].stars.getValue().runtimeType.toString()),
121-
Text(jsonObject[0].stars.encodePretty(indent: 4)),
122-
ElevatedButton(
123-
onPressed: () => setState(
124-
() => jsonObject[0].add("stars", 5),
125-
),
126-
child: Text('jsonObject[0].add("stars", 5)'),
71+
MaterialButton(
72+
onPressed: () {
73+
setState(() {
74+
(jsonObject as JsonObject).apply<List>((list) {
75+
final listCopy = List.from(list);
76+
list.addAll(listCopy);
77+
return list;
78+
});
79+
});
80+
},
81+
child: Text("列表长度升为4"),
12782
),
12883
],
12984
),

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ packages:
172172
path: ".."
173173
relative: true
174174
source: path
175-
version: "0.0.3"
175+
version: "0.1.0"
176176
json_rpc_2:
177177
dependency: transitive
178178
description:
Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
part of json_object;
1+
import 'package:flutter/material.dart';
22

3-
class _JsonObjectException {
4-
const _JsonObjectException._();
3+
class JsonObjectException {
4+
const JsonObjectException._();
55

66
static String standardError(String message) {
7-
return "EasyJson: $message";
7+
return "JsonObject: $message";
88
}
99

1010
static String noSuchKeyException({
@@ -15,17 +15,6 @@ class _JsonObjectException {
1515
);
1616
}
1717

18-
static String listOutOfRangeException({
19-
@required int index,
20-
@required int length,
21-
}) {
22-
return standardError(
23-
"ListOutOfRangeException. "
24-
"Getting index: $index, "
25-
"but list length: $length",
26-
);
27-
}
28-
2918
static String getValueException({
3019
@required String innerDataType,
3120
@required String expectedType,
@@ -48,22 +37,10 @@ class _JsonObjectException {
4837
);
4938
}
5039

51-
static String methodInvokeException({
52-
@required String methodName,
53-
@required String innerDataType,
54-
@required String expectedType,
55-
}) {
56-
return standardError(
57-
"MethodInvokeException. "
58-
"Invoking: $methodName in a $innerDataType, "
59-
"while this method is available only for $expectedType.",
60-
);
61-
}
62-
6340
static String uncaughtException({String suggestion = ""}) {
6441
return standardError(
6542
"UncaughtException. "
66-
"$suggestion. "
43+
"$suggestion "
6744
"Please feel free to give an Issue at: "
6845
"https://github.com/Autokaka/json_object",
6946
);

0 commit comments

Comments
 (0)