diff --git a/example/lib/main.dart b/example/lib/main.dart index 0a7ed6b0..95e5d3ca 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -13,7 +13,7 @@ class MyApp extends StatefulWidget { class _MyAppState extends State { String debugLable = 'Unknown'; -final JPush jpush = new JPush(); + final JPush jpush = new JPush(); @override void initState() { super.initState(); @@ -23,49 +23,44 @@ final JPush jpush = new JPush(); // Platform messages are asynchronous, so we initialize in an async method. Future initPlatformState() async { String platformVersion; - // Platform messages may fail, so we use a try/catch PlatformException. jpush.getRegistrationID().then((rid) { setState(() { - debugLable = "flutter getRegistrationID: $rid"; - }); + debugLable = "flutter getRegistrationID: $rid"; + }); }); jpush.setup( - appKey: "a1703c14b186a68a66ef86c1", + appKey: "085680000000056ef2a14902", channel: "theChannel", production: false, debug: true, - ); - jpush.applyPushAuthority(new NotificationSettingsIOS( - sound: true, - alert: true, - badge: true)); + ); + jpush.applyPushAuthority( + new NotificationSettingsIOS(sound: true, alert: true, badge: true)); try { - jpush.addEventHandler( onReceiveNotification: (Map message) async { - print("flutter onReceiveNotification: $message"); - setState(() { + print("flutter onReceiveNotification: $message"); + setState(() { debugLable = "flutter onReceiveNotification: $message"; }); - }, - onOpenNotification: (Map message) async { - print("flutter onOpenNotification: $message"); - setState(() { + }, + onOpenNotification: (Map message) async { + print("flutter onOpenNotification: $message"); + setState(() { debugLable = "flutter onOpenNotification: $message"; }); - }, - onReceiveMessage: (Map message) async { - print("flutter onReceiveMessage: $message"); - setState(() { + }, + onReceiveMessage: (Map message) async { + print("flutter onReceiveMessage: $message"); + setState(() { debugLable = "flutter onReceiveMessage: $message"; }); - }, + }, ); - } on PlatformException { platformVersion = 'Failed to get platform version.'; } @@ -80,219 +75,308 @@ final JPush jpush = new JPush(); }); } - - // 编写视图 @override Widget build(BuildContext context) { return new MaterialApp( - home: new Scaffold( - appBar: new AppBar( - title: const Text('Plugin example app'), - ), - body: new Center( - child: new Column( - children:[ - new Text('result: $debugLable\n'), - new FlatButton( - child: new Text('sendLocalNotification\n'), - onPressed: () { - // 三秒后出发本地推送 - var fireDate = DateTime.fromMillisecondsSinceEpoch(DateTime.now().millisecondsSinceEpoch + 3000); - var localNotification = LocalNotification( - id: 234, - title: 'fadsfa', - buildId: 1, - content: 'fdas', - fireTime: fireDate, - subtitle: 'fasf', - badge: 5, - extras: {"fa": "0"} - ); - jpush.sendLocalNotification(localNotification).then((res) { - setState(() { - debugLable = res; - }); - }); - - }), - new FlatButton( - child: new Text('getLaunchAppNotification\n'), - onPressed: () { - - jpush.getLaunchAppNotification().then((map) { - setState(() { - debugLable = "getLaunchAppNotification success: $map"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "getLaunchAppNotification error: $error"; - }); - }); - - }), - new FlatButton( - child: new Text('applyPushAuthority\n'), - onPressed: () { - jpush.applyPushAuthority(NotificationSettingsIOS(badge: true, alert: true, sound: true)); - }), - new FlatButton( - child: new Text('setTags\n'), - onPressed: () { - jpush.setTags(["lala","haha"]).then((map) { - var tags = map['tags']; - setState(() { - debugLable = "set tags success: $map $tags"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "set tags error: $error"; - }); - }) ; - }), - new FlatButton( - child: new Text('cleanTags\n'), - onPressed: () { - jpush.cleanTags().then((map) { - var tags = map['tags']; - setState(() { - debugLable = "cleanTags success: $map $tags"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "cleanTags error: $error"; - }); - }) ; - }), - new FlatButton( - child: new Text('addTags\n'), - onPressed: () { - - jpush.addTags(["lala","haha"]).then((map) { - var tags = map['tags']; - setState(() { - debugLable = "addTags success: $map $tags"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "addTags error: $error"; - }); - }) ; - - }), - new FlatButton( - child: new Text('deleteTags\n'), - onPressed: () { - - jpush.deleteTags(["lala","haha"]).then((map) { - var tags = map['tags']; - setState(() { - debugLable = "deleteTags success: $map $tags"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "deleteTags error: $error"; - }); - }) ; - - }), - new FlatButton( - child: new Text('getAllTags\n'), - onPressed: () { - - jpush.getAllTags().then((map) { - setState(() { - debugLable = "getAllTags success: $map"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "getAllTags error: $error"; - }); - }) ; - - }), - new FlatButton( - child: new Text('setAlias\n'), - onPressed: () { - - jpush.setAlias("thealias11").then((map) { - setState(() { - debugLable = "setAlias success: $map"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "setAlias error: $error"; - }); - }) ; - - }), - new FlatButton( - child: new Text('deleteAlias\n'), - onPressed: () { - - jpush.deleteAlias().then((map) { - setState(() { - debugLable = "deleteAlias success: $map"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "deleteAlias error: $error"; - }); - }) ; - - }), - new FlatButton( - child: new Text('setBadge\n'), - onPressed: () { - - jpush.setBadge(66).then((map) { - setState(() { - debugLable = "setBadge success: $map"; - }); - }) - .catchError((error) { - setState(() { - debugLable = "setBadge error: $error"; - }); - }) ; - - }), - new FlatButton( - child: new Text('stopPush\n'), - onPressed: () { - - jpush.stopPush(); - - }), - new FlatButton( - child: new Text('resumePush\n'), - onPressed: () { - - jpush.resumePush(); - - }), - new FlatButton( - child: new Text('clearAllNotifications\n'), - onPressed: () { - - jpush.clearAllNotifications(); - - }), - - - ] - ) - - ), + home: new Scaffold( + appBar: new AppBar( + title: const Text("Plugin example app"), + backgroundColor: Colors.blue, ), - ); + body: Container( + padding: EdgeInsets.all(10.0), + child: SingleChildScrollView( + child: new Table( + children: [ + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('sendLocalNotification\n'), + onPressed: () { + // 三秒后出发本地推送 + var fireDate = DateTime.fromMillisecondsSinceEpoch( + DateTime.now().millisecondsSinceEpoch + 3000); + var localNotification = LocalNotification( + id: 234, + title: 'Test', + buildId: 1, + content: 'Test Local Push Service', + fireTime: fireDate, + subtitle: 'Welcome to test', + badge: 5, + extras: {"ab": "0"}); + jpush + .sendLocalNotification(localNotification) + .then((res) { + setState(() { + debugLable = res; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('getLaunchAppNotification\n'), + onPressed: () { + jpush.getLaunchAppNotification().then((map) { + setState(() { + debugLable = + "getLaunchAppNotification success: $map"; + }); + }).catchError((error) { + setState(() { + debugLable = + "getLaunchAppNotification error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('applyPushAuthority\n'), + onPressed: () { + jpush.applyPushAuthority(NotificationSettingsIOS( + badge: true, alert: true, sound: true)); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('setTags\n'), + onPressed: () { + jpush.setTags(["lala", "haha"]).then((map) { + var tags = map['tags']; + setState(() { + debugLable = "set tags success: $map $tags"; + }); + }).catchError((error) { + setState(() { + debugLable = "set tags error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('cleanTags\n'), + onPressed: () { + jpush.cleanTags().then((map) { + var tags = map['tags']; + setState(() { + debugLable = "cleanTags success: $map $tags"; + }); + }).catchError((error) { + setState(() { + debugLable = "cleanTags error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('addTags\n'), + onPressed: () { + jpush.addTags(["def", "fun"]).then((map) { + var tags = map['tags']; + setState(() { + debugLable = "addTags success: $map $tags"; + }); + }).catchError((error) { + setState(() { + debugLable = "addTags error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('deleteTags\n'), + onPressed: () { + jpush.deleteTags(["def", "fun"]).then((map) { + var tags = map['tags']; + setState(() { + debugLable = "deleteTags success: $map $tags"; + }); + }).catchError((error) { + setState(() { + debugLable = "deleteTags error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('getAllTags\n'), + onPressed: () { + jpush.getAllTags().then((map) { + setState(() { + debugLable = "getAllTags success: $map"; + }); + }).catchError((error) { + setState(() { + debugLable = "getAllTags error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('setAlias\n'), + onPressed: () { + jpush.setAlias("thealias11").then((map) { + setState(() { + debugLable = "setAlias success: $map"; + }); + }).catchError((error) { + setState(() { + debugLable = "setAlias error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('deleteAlias\n'), + onPressed: () { + jpush.deleteAlias().then((map) { + setState(() { + debugLable = "deleteAlias success: $map"; + }); + }).catchError((error) { + setState(() { + debugLable = "deleteAlias error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('setBadge\n'), + onPressed: () { + jpush.setBadge(66).then((map) { + setState(() { + debugLable = "setBadge success: $map"; + }); + }).catchError((error) { + setState(() { + debugLable = "setBadge error: $error"; + }); + }); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('stopPush\n'), + onPressed: () { + jpush.stopPush(); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('resumePush\n'), + onPressed: () { + jpush.resumePush(); + }), + ]), + new TableRow(children: [ + FlatButton( + color: Colors.blue, + highlightColor: Colors.blue[700], + colorBrightness: Brightness.dark, + splashColor: Colors.grey, + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(20.0)), + child: new Text('clearAllNotifications\n'), + onPressed: () { + jpush.clearAllNotifications(); + }), + ]), + new TableRow(children: [ + new Container( + child: new Text('result: $debugLable\n'), + alignment: Alignment.center, + ) + ]), + ], + ), + )), + )); } } diff --git a/example/pubspec.lock b/example/pubspec.lock index c3fe1c09..bd39b079 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,70 +5,70 @@ packages: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.32.4" + version: "0.36.3" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.5.0" + version: "1.5.1" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.8" + version: "2.1.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.14.11" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.2" + version: "2.1.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.6" csslib: dependency: transitive description: name: csslib - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.14.5" + version: "0.16.0" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.2" flutter: @@ -85,49 +85,49 @@ packages: dependency: transitive description: name: front_end - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.4" + version: "0.1.18" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.7" html: dependency: transitive description: name: html - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.13.3+3" + version: "0.14.0+2" http: dependency: transitive description: name: http - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.11.3+17" + version: "0.12.0+2" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.5" + version: "2.0.6" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.3" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.3" jpush_flutter: @@ -141,156 +141,149 @@ packages: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.1+1" json_rpc_2: dependency: transitive description: name: json_rpc_2 - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.9" + version: "2.1.0" kernel: dependency: transitive description: name: kernel - url: "https://pub.dartlang.org" - source: hosted - version: "0.3.4" - logging: - dependency: transitive - description: - name: logging - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.11.3+2" + version: "0.3.18" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.12.3+1" + version: "0.12.5" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.6" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.6+2" mockito: dependency: "direct dev" description: name: mockito - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.0" + version: "3.0.2" multi_server_socket: dependency: transitive description: name: multi_server_socket - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" node_preamble: dependency: transitive description: name: node_preamble - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.4" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.5" package_resolver: dependency: transitive description: name: package_resolver - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.4" + version: "1.0.10" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.6.2" - platform: + pedantic: dependency: transitive description: - name: platform - url: "https://pub.dartlang.org" + name: pedantic + url: "https://pub.flutter-io.cn" source: hosted - version: "2.2.0" - plugin: + version: "1.5.0" + platform: dependency: transitive description: - name: plugin - url: "https://pub.dartlang.org" + name: platform + url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.0+3" + version: "2.2.0" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.6" + version: "1.4.0" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.2" quiver: dependency: transitive description: name: quiver - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.0+1" + version: "2.0.2" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.7.3+3" + version: "0.7.5" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" shelf_static: dependency: transitive description: name: shelf_static - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.8" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.2+4" + version: "0.2.3" sky_engine: dependency: transitive description: flutter @@ -300,106 +293,113 @@ packages: dependency: transitive description: name: source_map_stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.5" source_maps: dependency: transitive description: name: source_maps - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.10.7" + version: "0.10.8" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.4.1" + version: "1.5.5" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.9.3" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.6.8" + version: "2.0.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.1" + version: "1.1.0" test: dependency: "direct dev" description: name: test - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.0" - typed_data: + version: "1.6.1" + test_api: dependency: transitive description: - name: typed_data - url: "https://pub.dartlang.org" + name: test_api + url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.6" - utf: + version: "0.2.4" + test_core: dependency: transitive description: - name: utf - url: "https://pub.dartlang.org" + name: test_core + url: "https://pub.flutter-io.cn" source: hosted - version: "0.9.0+5" + version: "0.2.3" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.6" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.8" vm_service_client: dependency: transitive description: name: vm_service_client - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.6" + version: "0.2.6+2" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.7+10" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.9" + version: "1.0.13" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.15" sdks: - dart: ">=2.0.0-dev.68.0 <3.0.0" + dart: ">=2.2.0 <3.0.0"