Skip to content

Commit

Permalink
Merge pull request #6 from LunaGao/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Luna Gao authored Jan 10, 2019
2 parents 732c589 + 5f0e2a0 commit 47d13c1
Show file tree
Hide file tree
Showing 14 changed files with 430 additions and 113 deletions.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## 0.0.3

* add query function
* orderByAscending
* orderByDescending
* addAscendingOrder
* addDescendingOrder
* limit
* skip
* Fixed query object by objectId on Android

## 0.0.2

* fixed android package error.
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

[Dark packages](https://pub.dartlang.org/packages/leancloud_flutter_plugin)

Developing by IntelliJ IDEA.
## Description
This plugin depends on Leancloud Native(iOS / Android) SDK. It's just convert the code from dart to those native language(Objective-C / Java).

## Getting Started

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ public void onMethodCall(MethodCall call, Result result) {
LeancloudQuery leancloudQuery = new LeancloudQuery();
leancloudQuery.query(call, result);
break;
case "doCloudQuery":
LeancloudQuery doCloudQueryQuery = new LeancloudQuery();
doCloudQueryQuery.doCloudQuery(call, result);
break;
default:
result.notImplemented();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.List;

import cn.leancloud.AVObject;
import cn.leancloud.types.AVNull;
import io.flutter.plugin.common.MethodCall;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package com.lunagao.leancloudflutterplugin;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import cn.leancloud.AVObject;
import cn.leancloud.AVQuery;
import cn.leancloud.query.AVCloudQueryResult;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

class LeancloudQuery {

Expand All @@ -34,33 +37,133 @@ class LeancloudQuery {
* @param call MethodCall from LeancloudFlutterPlugin.onMethodCall function
* @param result MethodChannel.Result from LeancloudFlutterPlugin.onMethodCall function
*/
void query(MethodCall call, MethodChannel.Result result) {
void query(MethodCall call, final MethodChannel.Result result) {
JSONObject avQueryJson = LeancloudArgsConverter.getAVQueryJsonObject(call, result);
assert avQueryJson != null;
String className = avQueryJson.getString("className");
String fieldsString = avQueryJson.getString("queries");
JSONObject fieldsJson = JSON.parseObject(fieldsString);
String queriesString = avQueryJson.getString("queries");
JSONArray queriesJson = JSON.parseArray(queriesString);
AVQuery<AVObject> avQuery = new AVQuery<>(className);
try {
if (fieldsJson.size() == 1 && fieldsJson.containsKey("get")) {
// AVObject object = avQuery.get(fieldsJson.getString("get"));
List<AVObject> objects = avQuery.find();
AVObject object = avQuery.get("5c31b14544d904005d1e773c");
result.success(object);
// result.success("Android " + android.os.Build.VERSION.RELEASE);
for (Object oneQueryObject : queriesJson) {
JSONObject oneQuery;
if (oneQueryObject instanceof JSONObject) {
oneQuery = (JSONObject) oneQueryObject;
} else {
oneQuery = (JSONObject) JSON.toJSON(oneQueryObject);
}

switch (oneQuery.getString("queryMethod")) {
case "get":
avQuery.getInBackground(oneQuery.getString("arg1")).subscribe(new Observer<AVObject>() {
@Override
public void onSubscribe(Disposable disposable) {}

@Override
public void onNext(AVObject avObject) {
result.success(avObject.toJSONObject().toJSONString());
}

@Override
public void onError(Throwable throwable) {
result.error("leancloud-error", throwable.getMessage(), null);
}

@Override
public void onComplete() {}
});
return;
case "equalTo":
avQuery.whereEqualTo(oneQuery.getString("arg1"), oneQuery.get("arg2"));
break;
case "notEqualTo":
avQuery.whereNotEqualTo(oneQuery.getString("arg1"), oneQuery.get("arg2"));
break;
case "greaterThan":
avQuery.whereGreaterThan(oneQuery.getString("arg1"), oneQuery.get("arg2"));
break;
case "greaterThanOrEqualTo":
avQuery.whereGreaterThanOrEqualTo(oneQuery.getString("arg1"), oneQuery.get("arg2"));
break;
case "lessThan":
avQuery.whereLessThan(oneQuery.getString("arg1"), oneQuery.get("arg2"));
break;
case "lessThanOrEqualTo":
avQuery.whereLessThanOrEqualTo(oneQuery.getString("arg1"), oneQuery.get("arg2"));
break;
case "orderByAscending":
avQuery.orderByAscending(oneQuery.getString("arg1"));
break;
case "orderByDescending":
avQuery.orderByDescending(oneQuery.getString("arg1"));
break;
case "addAscendingOrder":
avQuery.addAscendingOrder(oneQuery.getString("arg1"));
break;
case "addDescendingOrder":
avQuery.addDescendingOrder(oneQuery.getString("arg1"));
break;
case "limit":
avQuery.limit(oneQuery.getIntValue("arg1"));
break;
case "skip":
avQuery.skip(oneQuery.getIntValue("arg1"));
break;
default:
result.error("params-error", "no such query queryMethod name, please check again", null);
break;
}

//TODO list need to be JSON type
// result.success(list);
} catch (Exception ex) {
result.error("aaa" + ex.getMessage(), null, null);
}
// } catch (NoSuchMethodException ex) {
// result.error("NoSuchMethodException, please check queryMethod", null, null);
// } catch (IllegalAccessException ex) {
// result.error("IllegalAccessException, Do you call an illegal access method?", null, null);
// } catch (InvocationTargetException ex) {
// result.error("InvocationTargetException, I don't know what's happen,:( check everything again?", null, null);
// }
avQuery.findInBackground().subscribe(new Observer<List<AVObject>>() {
@Override
public void onSubscribe(Disposable disposable) {}

@Override
public void onNext(List<AVObject> avObjects) {
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
for (AVObject object : avObjects) {
jsonArray.add(object.toJSONObject().toJSONString());
}
jsonObject.put("objects", jsonArray);
result.success(jsonObject.toJSONString());
}

@Override
public void onError(Throwable throwable) {
result.error("leancloud-error", throwable.getMessage(), null);
}

@Override
public void onComplete() {}
});
}

void doCloudQuery(MethodCall call, final MethodChannel.Result result) {
String cqlString = LeancloudArgsConverter.getStringValue(call, result, "cql");
AVQuery.doCloudQueryInBackground(cqlString).subscribe(new Observer<AVCloudQueryResult>() {
@Override
public void onSubscribe(Disposable disposable) {}

@Override
public void onNext(AVCloudQueryResult avCloudQueryResult) {
List<? extends AVObject> avObjects = avCloudQueryResult.getResults();
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
for (AVObject object : avObjects) {
jsonArray.add(object.toJSONObject().toJSONString());
}
jsonObject.put("objects", jsonArray);
result.success(jsonObject.toJSONString());
}

@Override
public void onError(Throwable throwable) {
result.error("leancloud-error", throwable.getMessage(), null);
}

@Override
public void onComplete() {}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.lunagao.leancloudflutterplugin;

import cn.leancloud.AVUser;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;

public class LeancloudUser {

void getCurrentUser(MethodCall call, final MethodChannel.Result result) {
AVUser currentUser = AVUser.getCurrentUser();
result.success(currentUser.toJSONString());
}

}
26 changes: 26 additions & 0 deletions example/lib/list_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
import 'package:leancloud_flutter_plugin/leancloud_object.dart';
import 'package:leancloud_flutter_plugin/leancloud_query.dart';

import 'user_screen.dart';

class ListScreen extends StatefulWidget {
@override
_ListScreenState createState() => _ListScreenState();
Expand Down Expand Up @@ -63,12 +65,22 @@ class _ListScreenState extends State<ListScreen> {
// avQuery.whereGreaterThanOrEqualTo("int_value", 20);
// avQuery.whereLessThan("int_value", 20);
// avQuery.whereLessThanOrEqualTo("int_value", 20);
avQuery.limit(10);
avQuery.skip(1);
avQuery.find().then((objects) {
print("All Objects Queryed!");
setState(() { });
});
}

_queryByCQL() {
var cql = "select * from DemoObject where int_value = 20";
AVQuery.doCloudQuery(cql).then((objects) {
print(objects);
print("Queryed!");
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
Expand Down Expand Up @@ -107,6 +119,20 @@ class _ListScreenState extends State<ListScreen> {
onPressed: _queryAllObject,
child: Text('query all Objects'),
),
FlatButton(
onPressed: _queryByCQL,
child: Text('query by CQL'),
),
Text('login function'),
FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserScreen()),
);
},
child: Text('LOGIN'),
),
],
)
);
Expand Down
33 changes: 33 additions & 0 deletions example/lib/user_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import 'package:flutter/material.dart';

class UserScreen extends StatefulWidget {
@override
_UserScreenState createState() => _UserScreenState();
}

class _UserScreenState extends State<UserScreen> {

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('User Page'),
),
body: ListView(
shrinkWrap: true,
padding: const EdgeInsets.all(20.0),
children: <Widget>[
Text("Please click 'create an Object' button"),
FlatButton(
onPressed: () {},
child: Text('Sign in'),
),
FlatButton(
onPressed: () {},
child: Text('Login in'),
)
],
)
);
}
}
44 changes: 32 additions & 12 deletions ios/Classes/LeancloudQuery.m
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@

@implementation LeancloudQuery

const NSString *QUERYMETHOD = @"queryMethod";
const NSString *ARG1 = @"arg1";
const NSString *ARG2 = @"arg2";

- (void) query:(FlutterMethodCall*)call result:(FlutterResult)result {
NSDictionary *avQueryJson = [LeancloudArgsConverter getAVQueryJsonObject:call result:result];
NSString *className = avQueryJson[@"className"];
Expand All @@ -28,18 +32,34 @@ - (void) query:(FlutterMethodCall*)call result:(FlutterResult)result {
return;
}];
}
if([oneQuery[@"queryMethod"] isEqualToString:@"equalTo"]) {
[query whereKey:oneQuery[@"arg1"] equalTo:oneQuery[@"arg2"]];
} else if([oneQuery[@"queryMethod"] isEqualToString:@"notEqualTo"]) {
[query whereKey:oneQuery[@"arg1"] notEqualTo:oneQuery[@"arg2"]];
} else if([oneQuery[@"queryMethod"] isEqualToString:@"greaterThan"]) {
[query whereKey:oneQuery[@"arg1"] greaterThan:oneQuery[@"arg2"]];
} else if([oneQuery[@"queryMethod"] isEqualToString:@"greaterThanOrEqualTo"]) {
[query whereKey:oneQuery[@"arg1"] greaterThanOrEqualTo:oneQuery[@"arg2"]];
} else if([oneQuery[@"queryMethod"] isEqualToString:@"lessThan"]) {
[query whereKey:oneQuery[@"arg1"] lessThan:oneQuery[@"arg2"]];
} else if([oneQuery[@"queryMethod"] isEqualToString:@"lessThanOrEqualTo"]) {
[query whereKey:oneQuery[@"arg1"] lessThanOrEqualTo:oneQuery[@"arg2"]];
if([oneQuery[QUERYMETHOD] isEqualToString:@"equalTo"]) {
[query whereKey:oneQuery[ARG1] equalTo:oneQuery[ARG2]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"notEqualTo"]) {
[query whereKey:oneQuery[ARG1] notEqualTo:oneQuery[ARG2]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"greaterThan"]) {
[query whereKey:oneQuery[ARG1] greaterThan:oneQuery[ARG2]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"greaterThanOrEqualTo"]) {
[query whereKey:oneQuery[ARG1] greaterThanOrEqualTo:oneQuery[ARG2]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"lessThan"]) {
[query whereKey:oneQuery[ARG1] lessThan:oneQuery[ARG2]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"lessThanOrEqualTo"]) {
[query whereKey:oneQuery[ARG1] lessThanOrEqualTo:oneQuery[ARG2]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"orderByAscending"]) {
[query orderByAscending:oneQuery[ARG1]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"orderByDescending"]) {
[query orderByDescending:oneQuery[ARG1]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"addAscendingOrder"]) {
[query addDescendingOrder:oneQuery[ARG1]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"addDescendingOrder"]) {
[query addDescendingOrder:oneQuery[ARG1]];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"limit"]) {
query.limit = [oneQuery[ARG1] intValue];
} else if([oneQuery[QUERYMETHOD] isEqualToString:@"skip"]) {
query.skip = [oneQuery[ARG1] intValue];
} else {
result([FlutterError errorWithCode:@"params-error"
message:@"no such query queryMethod name, please check again"
details:[NSString stringWithFormat:@"no such query queryMethod name, %@", oneQuery[QUERYMETHOD]]]);
}
}
[query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) {
Expand Down
Loading

0 comments on commit 47d13c1

Please sign in to comment.