Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #6

Merged
merged 8 commits into from
Jan 10, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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