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

Commit

Permalink
Merge pull request #3 from Autokaka/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Autokaka committed Dec 14, 2020
2 parents fb253a4 + 33de112 commit 003451c
Show file tree
Hide file tree
Showing 10 changed files with 146 additions and 373 deletions.
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
## [0.0.3]
## [0.1.0]

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

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

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

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

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

- [x] 核心功能, json 转 object. 使用value = json.key或者value = json[index]的方式访问类的成员.
- [x] object重新转string. 不是很难, 几小时就能做好.
- [ ] 实现Map和List的基础方法封装, 使得能更高效地操作JsonObject. 具体实现准备直接参考Map和List有关接口.
- [ ] 默认封装一个统一的JsonObject规范. 这个规范在前期将直接写死, 后期可以由开发者自己设定, 用于每个开发团队不同场景下能够适配属于自己的JsonObject.
- [ ] 创建一个model和JsonObject的成员关联, 削弱由dynamic造成的类型弱化问题. 做点和JavaScript里不一样的.
详见CHANGELOG.md

## 应用领域构思

Expand Down
121 changes: 38 additions & 83 deletions example/lib/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,15 @@ class HomePage extends StatefulWidget {
}

class _HomePageState extends State<HomePage> {
var jsonStr = '''[{
var jsonObject = JsonObject.decode('''[{
"url": "https://baidu.com",
"name": "Baidu",
"time": 1234567890
"time": "1234567890"
},{
"url": "https://google.com.hk",
"name": "Google",
"time": 1234567890
}]''';
var jsonObject;

Widget buildDivider() {
return Divider(
thickness: 1,
color: Theme.of(context).primaryColor,
);
}

@override
void initState() {
super.initState();
jsonObject = JsonObject.fromString(jsonStr);
}
}]''');

@override
Widget build(BuildContext context) {
Expand All @@ -40,90 +26,59 @@ class _HomePageState extends State<HomePage> {
body: ListView(
padding: EdgeInsets.all(10),
children: [
/// get list
/// encode
Text(
"转换成对象后的jsonObject: ",
style: Theme.of(context).textTheme.headline5,
),
Text(jsonObject.getValue().runtimeType.toString()),
Text(jsonObject.encodePretty(indent: 4)),

/// get map
buildDivider(),
Text(
"访问jsonObject[0]: ",
style: Theme.of(context).textTheme.headline5,
),
Text(jsonObject[0].getValue().runtimeType.toString()),
Text(jsonObject[0].encodePretty(indent: 4)),

/// get url
buildDivider(),
Text(
"访问jsonObject[0].url: ",
style: Theme.of(context).textTheme.headline5,
),
Text(jsonObject[0].url.getValue().runtimeType.toString()),
Text(jsonObject[0].url.encodePretty(indent: 4)),
ElevatedButton(
onPressed: () => setState(
() => jsonObject[0].url = jsonObject[1].url.getValue(),
),
child: Text("把百度的url改成谷歌的url"),
),
Text(jsonObject.valueRuntimeType.toString()),
Text(JsonObject.encodePretty(jsonObject, indent: 4)),

/// get name
buildDivider(),
/// get value
Text(
"访问jsonObject[0].name: ",
"Get方法测试",
style: Theme.of(context).textTheme.headline5,
),
Text(jsonObject[0].name.getValue().runtimeType.toString()),
Text(jsonObject[0].name.encodePretty(indent: 4)),
Text(jsonObject[0].getValue().toString()),
Text(jsonObject[0].url.getValue().toString()),
Text(jsonObject[0].name.getValue().toString()),

/// get time
buildDivider(),
/// set value
Text(
"访问jsonObject[0].time: ",
"Set方法测试",
style: Theme.of(context).textTheme.headline5,
),
Text(jsonObject[0].time.getValue().runtimeType.toString()),
Text(jsonObject[0].time.encodePretty(indent: 4)),
ElevatedButton(
onPressed: () => setState(
() => jsonObject[0].time = 111111111,
),
child: Text("修改jsonObject[0].time为111111111"),
MaterialButton(
onPressed: () {
setState(() {
jsonObject[0].url = jsonObject[1].url;
});
},
child: Text("设置百度链接为谷歌链接"),
),

/// add key value pairs using dot operator
buildDivider(),
/// excecute test
Text(
"访问jsonObject[1].stars: ",
"方法执行能力",
style: Theme.of(context).textTheme.headline5,
),
Text(jsonObject[1].stars.getValue().runtimeType.toString()),
Text(jsonObject[1].stars.encodePretty(indent: 4)),
ElevatedButton(
onPressed: () => setState(
() => jsonObject[1].stars = 5,
),
child: Text('jsonObject[1].stars = 5'),
),

/// add key value pairs using add()
buildDivider(),
Text(
"访问jsonObject[0].stars: ",
style: Theme.of(context).textTheme.headline5,
Column(
children: jsonObject.getValue().map<Text>((item) {
final itemObject = JsonObject.fromMap(item);
return Text(itemObject.name.getValue());
}).toList(),
),
Text(jsonObject[0].stars.getValue().runtimeType.toString()),
Text(jsonObject[0].stars.encodePretty(indent: 4)),
ElevatedButton(
onPressed: () => setState(
() => jsonObject[0].add("stars", 5),
),
child: Text('jsonObject[0].add("stars", 5)'),
MaterialButton(
onPressed: () {
setState(() {
(jsonObject as JsonObject).apply<List>((list) {
final listCopy = List.from(list);
list.addAll(listCopy);
return list;
});
});
},
child: Text("列表长度升为4"),
),
],
),
Expand Down
2 changes: 1 addition & 1 deletion example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ packages:
path: ".."
relative: true
source: path
version: "0.0.3"
version: "0.1.0"
json_rpc_2:
dependency: transitive
description:
Expand Down
33 changes: 5 additions & 28 deletions lib/src/exception.dart → lib/exception.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
part of json_object;
import 'package:flutter/material.dart';

class _JsonObjectException {
const _JsonObjectException._();
class JsonObjectException {
const JsonObjectException._();

static String standardError(String message) {
return "EasyJson: $message";
return "JsonObject: $message";
}

static String noSuchKeyException({
Expand All @@ -15,17 +15,6 @@ class _JsonObjectException {
);
}

static String listOutOfRangeException({
@required int index,
@required int length,
}) {
return standardError(
"ListOutOfRangeException. "
"Getting index: $index, "
"but list length: $length",
);
}

static String getValueException({
@required String innerDataType,
@required String expectedType,
Expand All @@ -48,22 +37,10 @@ class _JsonObjectException {
);
}

static String methodInvokeException({
@required String methodName,
@required String innerDataType,
@required String expectedType,
}) {
return standardError(
"MethodInvokeException. "
"Invoking: $methodName in a $innerDataType, "
"while this method is available only for $expectedType.",
);
}

static String uncaughtException({String suggestion = ""}) {
return standardError(
"UncaughtException. "
"$suggestion. "
"$suggestion "
"Please feel free to give an Issue at: "
"https://github.com/Autokaka/json_object",
);
Expand Down
Loading

0 comments on commit 003451c

Please sign in to comment.