diff --git a/android/src/main/java/com/hy/print/hy_printer/Bluetooth.java b/android/src/main/java/com/hy/print/hy_printer/Bluetooth.java index 3fe67ca..82fd3c7 100644 --- a/android/src/main/java/com/hy/print/hy_printer/Bluetooth.java +++ b/android/src/main/java/com/hy/print/hy_printer/Bluetooth.java @@ -172,7 +172,8 @@ public class Bluetooth { public int btConn(final String address, Context context) throws Exception { // bluetoothPort.connect(address); - final int[] portOpen = {-4}; + //final int[] portOpen = {}; + final int[] portOpen = new int[1]; btThread = new Thread(new Runnable() { @Override @@ -307,6 +308,7 @@ public class Bluetooth { public void ExcuteDisconnect(Context context) { new ExcuteDisconnectBT().execute(context); + } private class ExcuteDisconnectBT extends AsyncTask { diff --git a/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java b/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java index b8a72f1..ef5edd6 100644 --- a/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java +++ b/android/src/main/java/com/hy/print/hy_printer/HyPrinterPlugin.java @@ -4,6 +4,7 @@ import android.content.Context; import androidx.annotation.NonNull; +import cpcl.PrinterHelper; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodCall; @@ -65,7 +66,7 @@ public class HyPrinterPlugin implements FlutterPlugin, MethodCallHandler { if (call.method.equals("startSearch")) { bluetooth.SearchingBTDevice(); } else if (call.method.equals("connect")) { - int code = -4; + int code; String arg = call.argument("address"); System.out.println(arg); try { @@ -104,9 +105,19 @@ public class HyPrinterPlugin implements FlutterPlugin, MethodCallHandler { } result.success(sta); } else if (call.method.equals("disposeDiscovery")) { + try { + PrinterHelper.portClose(); + } catch (Exception e) { + e.printStackTrace(); + } bluetooth.cancelDiscoveryResult(context); result.success(true); } else if (call.method.equals("disposeConnect")) { + try { + PrinterHelper.portClose(); + } catch (Exception e) { + e.printStackTrace(); + } bluetooth.ExcuteDisconnect(context); result.success(true); } diff --git a/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java b/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java index faebabb..309522f 100644 --- a/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java +++ b/android/src/main/java/com/hy/print/hy_printer/PrintAsOrder.java @@ -168,26 +168,18 @@ public class PrintAsOrder { PrinterHelper.printAreaSize("0", "200", "200", "800", "1"); //PrinterHelper.Encoding("gb2312"); PrinterHelper.Box("0","10","575","790","3"); - - PrinterHelper.Line("0", "160", "575", "160", "3"); PrinterHelper.Line("0", "400", "575", "400", "3"); PrinterHelper.Line("0", "560", "575", "560", "3"); PrinterHelper.Line("380", "360", "540", "200", "3"); - PrinterHelper.Line("333", "160", "333", "400", "3"); - - PrinterHelper.SetBold("3"); - PrinterHelper.SetMag("5","5"); - PrinterHelper.Align(PrinterHelper.CENTER); - - //PrinterHelper.Text(PrinterHelper.TEXT, "55", "0", "0", "55", code); - PrinterHelper.PrintTextCPCL(PrinterHelper.TEXT,60,"0","55",code,1,false,0); - -// PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "100", "0", code); -// PrinterHelper.Text(PrinterHelper.TEXT, "24", "0", "200", "0", code); + PrinterHelper.Line("333", "160", "333", "400", "3"); + PrinterHelper.Align(PrinterHelper.CENTER); + PrinterHelper.SetBold("4"); + PrinterHelper.SetMag("5","5"); + PrinterHelper.Text(PrinterHelper.TEXT, "55", "0", "0", "55", code); closeBold(); PrinterHelper.SetMag("1","1"); @@ -197,28 +189,38 @@ public class PrintAsOrder { PrinterHelper.SetBold("3"); PrinterHelper.SetMag(cMultiple,cMultiple); PrinterHelper.Text(PrinterHelper.TEXT,cSize , "0",String.valueOf(cx), String.valueOf(cy), country); - PrinterHelper.Align(PrinterHelper.LEFT); if(!country1.isEmpty()){ PrinterHelper.Text(PrinterHelper.TEXT,cSize , "0",String.valueOf(cx1), String.valueOf(cy1), country1); } - closeBold(); PrinterHelper.SetMag("1","1"); - PrinterHelper.SetBold("2"); - PrinterHelper.SetMag("2.5","2.5"); - PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "390", "210", num); - PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", String.valueOf(500-sum.length()*10), String.valueOf(315), sum); + + PrinterHelper.Align(PrinterHelper.LEFT); + PrinterHelper.SetBold("2"); + PrinterHelper.SetMag("3","3"); + PrinterHelper.Text(PrinterHelper.TEXT, "55", "0", "390", "210", num); + PrinterHelper.Text(PrinterHelper.TEXT, "55", "0", String.valueOf(500-sum.length()*10), String.valueOf(315), sum); closeBold(); PrinterHelper.SetMag("1","1"); + + PrinterHelper.Align(PrinterHelper.CENTER); printBarCode(barCode,"0","590"); + PrinterHelper.Align(PrinterHelper.CENTER); + PrinterHelper.SetMag("2","2"); + + PrinterHelper.Text(PrinterHelper.TEXT,"55" , "0","0", "730", barCode); + + PrinterHelper.SetMag("1","1"); + + -// PrinterHelper.SetBold("2"); + PrinterHelper.Align(PrinterHelper.CENTER); PrinterHelper.SetMag("2","2"); PrinterHelper.Text(PrinterHelper.TEXT,"3" , "0","0", String.valueOf(channelY), channel); @@ -228,6 +230,9 @@ public class PrintAsOrder { closeBold(); PrinterHelper.SetMag("1","1"); + + + PrinterHelper.Form(); PrinterHelper.Print(); } catch (Exception e) { @@ -247,7 +252,7 @@ public class PrintAsOrder { width = "1"; } try { - PrinterHelper.Barcode(PrinterHelper.BARCODE, PrinterHelper.code128, width, "0", "130", x, y, true, "15", "15", "15", code); + PrinterHelper.Barcode(PrinterHelper.BARCODE, PrinterHelper.code128, width, "0", "130", x, y, false, "15", "15", "15", code); } catch (Exception e) { e.printStackTrace(); } @@ -269,22 +274,21 @@ public class PrintAsOrder { PrinterHelper.Line("380", "360", "540", "200", "3"); PrinterHelper.Line("333", "160", "333", "400", "3"); - PrinterHelper.SetBold("3"); - PrinterHelper.SetMag("5","5"); PrinterHelper.Align(PrinterHelper.CENTER); - PrinterHelper.Text(PrinterHelper.TEXT, "1", "0", "0", "55", code); - - -// PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "100", "0", code); -// PrinterHelper.Text(PrinterHelper.TEXT, "24", "0", "200", "0", code); + PrinterHelper.SetBold("4"); + PrinterHelper.SetMag("5","5"); + PrinterHelper.Text(PrinterHelper.TEXT, "55", "0", "0", "55", code); closeBold(); PrinterHelper.SetMag("1","1"); + + + PrinterHelper.Align(PrinterHelper.LEFT); PrinterHelper.SetBold("3"); @@ -294,17 +298,30 @@ public class PrintAsOrder { closeBold(); PrinterHelper.SetMag("1","1"); + + + PrinterHelper.Align(PrinterHelper.LEFT); PrinterHelper.SetBold("2"); - PrinterHelper.SetMag("2.5","2.5"); - PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", "390", "210", num); + PrinterHelper.SetMag("3","3"); + PrinterHelper.Text(PrinterHelper.TEXT, "55", "0", "390", "210", num); - PrinterHelper.Text(PrinterHelper.TEXT, "50", "0", String.valueOf(500-sum.length()*10), String.valueOf(315), sum); + PrinterHelper.Text(PrinterHelper.TEXT, "55", "0", String.valueOf(500-sum.length()*10), String.valueOf(315), sum); closeBold(); PrinterHelper.SetMag("1","1"); + + + PrinterHelper.Align(PrinterHelper.CENTER); printBarCode(barCode,"0","520"); + PrinterHelper.Align(PrinterHelper.CENTER); + PrinterHelper.SetMag("2","2"); + + PrinterHelper.Text(PrinterHelper.TEXT,"55" , "0","0", "660", barCode); + + PrinterHelper.SetMag("1","1"); + PrinterHelper.Form(); diff --git a/example/lib/main.dart b/example/lib/main.dart index 2d9536d..9ebb0f8 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:convert'; - +import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:hy_printer/device.dart'; import 'package:hy_printer/dj_printer.dart'; @@ -79,126 +79,16 @@ class _MyAppState extends State { @override Widget build(BuildContext context) {return MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('Plugin example app'), - ), - body: Center( - child: Column( - children: [ - TextButton( - onPressed: () { - devices.clear(); - setState(() {}); - DjPrinter().startSearch; - }, - child: const Text('扫描设备')), - // TextButton(onPressed: () {}, child: const Text('打印')), - const SizedBox( - height: 20, - ), - ...devices - .map((e) => TextButton( - onPressed: ()async { - // [Permission.bluetoothConnect,].request().then((value) async { - // print("===============${value[Permission.bluetoothConnect]}"); - // if(value[Permission.bluetoothConnect]!=PermissionStatus.denied){ - // - // } - // }); - await DjPrinter().connect(e.address); - // - - }, - child: Column( - children: [ - Text(e.name), - Text(e.address), - ], - ))) - .toList(), - const SizedBox( - height: 20, - ), - TextButton( - onPressed: () { - - // DjPrinter().printNewAScode( - // code: 'ASSZ000000002', - // barCode: 'ASSZ0000000020001', - // channel: '加拿大温哥华海派快线-', - // country: '美国', - // num: '2', - // sum:'9', - // offset: 0, - // hasPlan: true, ); - - DjPrinter().printNewAScode( - code: 'ASSZ000000002', - barCode: 'ASSZ0000000020001', - channel: '加拿大温哥华海派快线-卡派 / UPS派送', - country: '美国啊啊', - num: '2', - sum:'999', - offset: 0, - hasPlan: true, ); - // DjPrinter().printNewAScode( - // code: 'ASSZ000000002', - // barCode: 'ASSZ0000000020001', - // channel: '加拿大温哥华海派快线-卡派 / UPS派送', - // country: '捷克斯洛伐克', - // num: '2', - // sum:'99', - // offset: 0, - // hasPlan: true, ); - }, - child: const Text('打印')), - TextButton( - onPressed: () { - - // DjPrinter().printNewAScode( - // code: 'ASSZ000000002', - // barCode: 'ASSZ0000000020001', - // channel: '加拿大温哥华海派快线-', - // country: '美国', - // num: '2', - // sum:'9', - // offset: 0, - // hasPlan: true, ); - - DjPrinter().printNewAScode( - code: 'ASSZ000000002', - barCode: 'ASSZ0000000020001', - channel: '加拿大温哥华海派快线-卡派 / UPS派送', - country: '美国啊啊', - num: '2', - sum:'999', - offset: 0, - hasPlan: false, ); - // DjPrinter().printNewAScode( - // code: 'ASSZ000000002', - // barCode: 'ASSZ0000000020001', - // channel: '加拿大温哥华海派快线-卡派 / UPS派送', - // country: '捷克斯洛伐克', - // num: '2', - // sum:'99', - // offset: 0, - // hasPlan: true, ); - }, - child: const Text('noplan打印')), - const SizedBox( - height: 20, - ), - TextButton( - onPressed: () { - DjPrinter().disposeConnect(); - }, - child: const Text('取消链接')), + title: '安速货运', + builder: (context, widget) { + // ScreenUtil.setContext(context); + return MediaQuery( + data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0), + child: BotToastInit().call(context, widget)); + }, + navigatorObservers: [BotToastNavigatorObserver()], + home: const ScanPage() - ], - ), - ), - ), ); } } diff --git a/example/lib/scan_page.dart b/example/lib/scan_page.dart index 086ff23..c33cb9c 100644 --- a/example/lib/scan_page.dart +++ b/example/lib/scan_page.dart @@ -1,52 +1,198 @@ -// import 'package:flutter/material.dart'; -// import 'package:hy_printer/device.dart'; -// import 'package:hy_printer/hy_printer.dart'; -// -// class ScanPage extends StatefulWidget { -// const ScanPage({Key? key}) : super(key: key); -// -// @override -// _ScanPageState createState() => _ScanPageState(); -// } -// -// class _ScanPageState extends State { -// List _devices = []; -// -// @override -// void initState() { -// HyPrinter.init(); -// init(); -// super.initState(); -// } -// -// Future init() async { -// _devices = await HyPrinter.getDeiveces(); -// setState(() {}); -// } -// -// @override -// Widget build(BuildContext context) { -// return Scaffold( -// appBar: AppBar( -// title: const Text('设备列表'), -// ), -// body: ListView( -// padding: const EdgeInsets.all(10), -// children: _devices -// .map((e) => TextButton( -// onPressed: () async { -// var result = await HyPrinter.connect('04:7F:0E:95:FD:A1'); -// if (result == 0) { -// Navigator.pop(context); -// } -// }, -// child: Column( -// children: [ -// Text(e.name), -// Text(e.address), -// ], -// ))) -// .toList()), -// ); -// } -// } +import 'dart:convert'; + +import 'package:bot_toast/bot_toast.dart'; +import 'package:flutter/material.dart'; +import 'package:hy_printer/device.dart'; +import 'package:hy_printer/dj_printer.dart'; +import 'package:hy_printer/hy_printer.dart'; + +class ScanPage extends StatefulWidget { + const ScanPage({Key? key}) : super(key: key); + + @override + _ScanPageState createState() => _ScanPageState(); +} + +class _ScanPageState extends State { + List devices = []; + var cancel; + @override + void initState() { + super.initState(); + initPlatformState(); + } + + // Future initPlatformState() async { + // if (!mounted) return; + // setState(() {}); + // } + Future initPlatformState() async { + // var per = await Permission.bluetooth.isGranted; + // if (!per) { + // Permission.bluetooth.request(); + // } + // var pers = await Permission.locationWhenInUse.isGranted; + // if (!pers) { + // Permission.locationWhenInUse.request(); + // } + // var per1 = await Permission.bluetoothScan.isGranted; + // if (!per1) { + // Permission.bluetoothScan.request(); + // } + // var per2 = await Permission.bluetoothConnect.isGranted; + // if (!per2) { + // Permission.bluetoothConnect.request(); + // } + + DjPrinter().init(); + DjPrinter().addDiscoveryListen(onReceive: (data) { + var js = json.decode(data.toString()); + if ((js['name'] as String).startsWith('HM')) { + devices.add(Device( + name: js['name'], + address: js['address'], + isPaired: js['isPaired'])); + } + + + + setState(() {}); + }, onStart: () { + print("————————————————————————"); + }, onFinish: () { + print('——————————————————————————————'); + DjPrinter().cancelDiscovery(); + cancel(); + }); + DjPrinter().addConnectListen(onConnect: () { + print("connected"); + }, onDisconnect: () { + print('disconnected'); + }); + } + + + + @override + Widget build(BuildContext context) { + + return Scaffold( + appBar: AppBar( + title: const Text('设备列表'), + ), + body: Center( + child: Column( + children: [ + TextButton( + onPressed: () { + devices.clear(); + setState(() {}); + cancel = + BotToast.showLoading(wrapToastAnimation: (controller, func, child) { + return discoveryLoadingWidget(); + }); + DjPrinter().startSearch; + }, + child: const Text('扫描设备')), + // TextButton(onPressed: () {}, child: const Text('打印')), + const SizedBox( + height: 20, + ), + ...devices + .map((e) => TextButton( + onPressed: ()async { + BotToast.showLoading(wrapToastAnimation: (controller, func, child) { + return discoveryLoadingWidget(); + }); + + + int? value = await DjPrinter().connect(e.address); + Future.delayed(Duration(seconds: 3), () async { + if(value==0){ + BotToast.closeAllLoading(); + }else{ + BotToast.closeAllLoading(); + } + }); + + + }, + child: Column( + children: [ + Text(e.name), + Text(e.address), + ], + ))) + .toList(), + const SizedBox( + height: 20, + ), + TextButton( + onPressed: () { + DjPrinter().printNewAScode( + code: 'ASSZ000000002', + barCode: 'ASSZ0000000020001', + channel: '加拿大温哥华海派快线-卡派 / UPS派送', + country: '美国啊啊', + num: '2', + sum:'99', + offset: 0, + hasPlan: true, ); + }, + child: const Text('nocode打印')), + TextButton( + onPressed: () { + + DjPrinter().printNewAScode( + code: 'ASSZ000000002', + barCode: 'ASSZ0000000020001', + channel: '加拿大温哥华海派快线-卡派 / UPS派送', + country: '美国', + num: '2', + sum:'999', + offset: 0, + hasPlan: false, ); + }, + child: const Text('noplan打印')), + const SizedBox( + height: 20, + ), + TextButton( + onPressed: () { + DjPrinter().disposeConnect(); + }, + child: const Text('取消链接')), + + ], + ), + ), + ); + } + + + Container discoveryLoadingWidget() { + return Container( + padding: const EdgeInsets.all(15), + decoration: const BoxDecoration( + color: Colors.black54, + borderRadius: BorderRadius.all(Radius.circular(8))), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + CircularProgressIndicator( + backgroundColor: Colors.white, + ), + + Text( + '扫描中……请稍作等待', + style: TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ) + ], + ), + ); + } +} diff --git a/example/pubspec.lock b/example/pubspec.lock index f7efa5a..c70fcd7 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,56 +5,63 @@ packages: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.2" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" + bot_toast: + dependency: "direct main" + description: + name: bot_toast + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.3" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.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: "1.0.5" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" flutter: @@ -66,7 +73,7 @@ packages: dependency: "direct dev" description: name: flutter_lints - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" flutter_test: @@ -85,35 +92,35 @@ packages: dependency: transitive description: name: lints - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.11" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.4" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" sky_engine: @@ -125,49 +132,49 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.2" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.9" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" sdks: diff --git a/example/pubspec.yaml b/example/pubspec.yaml index d095612..13e6098 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -29,7 +29,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 - + bot_toast: ^4.0.1 dev_dependencies: flutter_test: sdk: flutter diff --git a/lib/dj_printer.dart b/lib/dj_printer.dart index 465eec1..728500e 100644 --- a/lib/dj_printer.dart +++ b/lib/dj_printer.dart @@ -78,14 +78,14 @@ class DjPrinter { bool get hasInit => _hasInit; - Future connect(String address) async { + Future connect(String address) async { await Future.delayed(const Duration(milliseconds: 2000), () async { var res = await _channel.invokeMethod('connect', {'address': address}); print('connect'); print(res); + return res; }); - return true; } void disposeDiscovery() { diff --git a/pubspec.lock b/pubspec.lock index d4b1f47..a5f87ad 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,49 +5,49 @@ packages: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.2" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.16.0" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" flutter: @@ -59,7 +59,7 @@ packages: dependency: "direct dev" description: name: flutter_lints - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" flutter_test: @@ -71,35 +71,35 @@ packages: dependency: transitive description: name: lints - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.11" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.4" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" sky_engine: @@ -111,49 +111,49 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.2" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.9" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" sdks: