init
This commit is contained in:
parent
3731141227
commit
7c436bd381
@ -10,7 +10,7 @@
|
|||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:integration_test/integration_test.dart';
|
import 'package:integration_test/integration_test.dart';
|
||||||
|
|
||||||
import 'package:jc_printer/jc_printer.dart';
|
// import 'package:jc_printer/jc_printer.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||||||
|
@ -28,6 +28,8 @@ require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelpe
|
|||||||
flutter_ios_podfile_setup
|
flutter_ios_podfile_setup
|
||||||
|
|
||||||
target 'Runner' do
|
target 'Runner' do
|
||||||
|
use_modular_headers!
|
||||||
|
use_frameworks!
|
||||||
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
|
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
|
||||||
target 'RunnerTests' do
|
target 'RunnerTests' do
|
||||||
inherit! :search_paths
|
inherit! :search_paths
|
||||||
|
@ -4,11 +4,23 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- jc_printer (0.0.1):
|
- jc_printer (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- Protobuf (3.24.4)
|
||||||
|
- reactive_ble_mobile (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- Protobuf (~> 3.5)
|
||||||
|
- SwiftProtobuf (~> 1.0)
|
||||||
|
- SwiftProtobuf (1.24.0)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
||||||
- jc_printer (from `.symlinks/plugins/jc_printer/ios`)
|
- jc_printer (from `.symlinks/plugins/jc_printer/ios`)
|
||||||
|
- reactive_ble_mobile (from `.symlinks/plugins/reactive_ble_mobile/ios`)
|
||||||
|
|
||||||
|
SPEC REPOS:
|
||||||
|
trunk:
|
||||||
|
- Protobuf
|
||||||
|
- SwiftProtobuf
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
Flutter:
|
Flutter:
|
||||||
@ -17,12 +29,17 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/integration_test/ios"
|
:path: ".symlinks/plugins/integration_test/ios"
|
||||||
jc_printer:
|
jc_printer:
|
||||||
:path: ".symlinks/plugins/jc_printer/ios"
|
:path: ".symlinks/plugins/jc_printer/ios"
|
||||||
|
reactive_ble_mobile:
|
||||||
|
:path: ".symlinks/plugins/reactive_ble_mobile/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||||
integration_test: 13825b8a9334a850581300559b8839134b124670
|
integration_test: 13825b8a9334a850581300559b8839134b124670
|
||||||
jc_printer: 98d27e989a3129f784669a21dd5883eec26ba102
|
jc_printer: 98d27e989a3129f784669a21dd5883eec26ba102
|
||||||
|
Protobuf: 351e9022fe13a6e2af00e9aefc22077cb88520f8
|
||||||
|
reactive_ble_mobile: 9ce6723d37ccf701dbffd202d487f23f5de03b4c
|
||||||
|
SwiftProtobuf: bcfd2bc231cf9ae552cdc7c4e877bd3b41fe57b1
|
||||||
|
|
||||||
PODFILE CHECKSUM: 02caaa843f6501172c0d470d80e72f61175c8b93
|
PODFILE CHECKSUM: b93a2ec14f1c13812166ff9c14f4914d6c6e5d23
|
||||||
|
|
||||||
COCOAPODS: 1.13.0
|
COCOAPODS: 1.13.0
|
||||||
|
@ -7,16 +7,18 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
10D5D5F3CC5D3E87F4AAF20E /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A8187878D1E2CD429B7D166B /* libPods-RunnerTests.a */; };
|
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||||
|
17F38D4D2AE51FBB00487369 /* JCSDKFont.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 17F38D4C2AE51FBB00487369 /* JCSDKFont.bundle */; };
|
||||||
|
17F38D4F2AE51FD700487369 /* SourceHanSans-Regular.ttc in Resources */ = {isa = PBXBuildFile; fileRef = 17F38D4E2AE51FD700487369 /* SourceHanSans-Regular.ttc */; };
|
||||||
331C80F4294D02FB00263BE5 /* RunnerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 331C80F3294D02FB00263BE5 /* RunnerTests.m */; };
|
331C80F4294D02FB00263BE5 /* RunnerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 331C80F3294D02FB00263BE5 /* RunnerTests.m */; };
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||||
|
729636EF36A53C120B8F72EE /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC47687E2219A68A71BCD69C /* Pods_RunnerTests.framework */; };
|
||||||
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
|
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
|
||||||
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
|
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
|
||||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
||||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
|
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
|
||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
||||||
D72C0DE9E160819031C5E3E4 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F40EEDC1B3DAB75AD1218FEF /* libPods-Runner.a */; };
|
C14833107E81995AF9AE3F8F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD3314FB6F05D6F16AC71377 /* Pods_Runner.framework */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@ -45,6 +47,8 @@
|
|||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||||
|
17F38D4C2AE51FBB00487369 /* JCSDKFont.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = JCSDKFont.bundle; sourceTree = "<group>"; };
|
||||||
|
17F38D4E2AE51FD700487369 /* SourceHanSans-Regular.ttc */ = {isa = PBXFileReference; lastKnownFileType = file; name = "SourceHanSans-Regular.ttc"; path = "Runner/JCSDKFont.bundle/SourceHanSans-Regular.ttc"; sourceTree = "<group>"; };
|
||||||
331C80F1294D02FB00263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
331C80F1294D02FB00263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
331C80F3294D02FB00263BE5 /* RunnerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RunnerTests.m; sourceTree = "<group>"; };
|
331C80F3294D02FB00263BE5 /* RunnerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RunnerTests.m; sourceTree = "<group>"; };
|
||||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||||
@ -62,10 +66,10 @@
|
|||||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
A47E728957F5618558E7C7DF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
|
A47E728957F5618558E7C7DF /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
A8187878D1E2CD429B7D166B /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
AC93C0AD3746E8534100DB47 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
|
AC93C0AD3746E8534100DB47 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
B35671E4ABF84AEDC8C673D9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
B35671E4ABF84AEDC8C673D9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
F40EEDC1B3DAB75AD1218FEF /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
CD3314FB6F05D6F16AC71377 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
EC47687E2219A68A71BCD69C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
FEEEE64755D6E7811332A20C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
|
FEEEE64755D6E7811332A20C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@ -74,7 +78,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
10D5D5F3CC5D3E87F4AAF20E /* libPods-RunnerTests.a in Frameworks */,
|
729636EF36A53C120B8F72EE /* Pods_RunnerTests.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -82,7 +86,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
D72C0DE9E160819031C5E3E4 /* libPods-Runner.a in Frameworks */,
|
C14833107E81995AF9AE3F8F /* Pods_Runner.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -113,8 +117,8 @@
|
|||||||
5B206BD512BCA9AC88115CF7 /* Frameworks */ = {
|
5B206BD512BCA9AC88115CF7 /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
F40EEDC1B3DAB75AD1218FEF /* libPods-Runner.a */,
|
CD3314FB6F05D6F16AC71377 /* Pods_Runner.framework */,
|
||||||
A8187878D1E2CD429B7D166B /* libPods-RunnerTests.a */,
|
EC47687E2219A68A71BCD69C /* Pods_RunnerTests.framework */,
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -133,6 +137,7 @@
|
|||||||
97C146E51CF9000F007C117D = {
|
97C146E51CF9000F007C117D = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
17F38D4E2AE51FD700487369 /* SourceHanSans-Regular.ttc */,
|
||||||
9740EEB11CF90186004384FC /* Flutter */,
|
9740EEB11CF90186004384FC /* Flutter */,
|
||||||
97C146F01CF9000F007C117D /* Runner */,
|
97C146F01CF9000F007C117D /* Runner */,
|
||||||
331C80F2294D02FB00263BE5 /* RunnerTests */,
|
331C80F2294D02FB00263BE5 /* RunnerTests */,
|
||||||
@ -154,6 +159,7 @@
|
|||||||
97C146F01CF9000F007C117D /* Runner */ = {
|
97C146F01CF9000F007C117D /* Runner */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
17F38D4C2AE51FBB00487369 /* JCSDKFont.bundle */,
|
||||||
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
|
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
|
||||||
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
|
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
|
||||||
97C146FA1CF9000F007C117D /* Main.storyboard */,
|
97C146FA1CF9000F007C117D /* Main.storyboard */,
|
||||||
@ -208,7 +214,7 @@
|
|||||||
97C146EC1CF9000F007C117D /* Resources */,
|
97C146EC1CF9000F007C117D /* Resources */,
|
||||||
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||||
20F8517985BB5619A77F396B /* [CP] Embed Pods Frameworks */,
|
E66D16C1F41008EA24F48C2D /* [CP] Embed Pods Frameworks */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -271,6 +277,8 @@
|
|||||||
files = (
|
files = (
|
||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
||||||
|
17F38D4D2AE51FBB00487369 /* JCSDKFont.bundle in Resources */,
|
||||||
|
17F38D4F2AE51FD700487369 /* SourceHanSans-Regular.ttc in Resources */,
|
||||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
||||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
||||||
);
|
);
|
||||||
@ -301,23 +309,6 @@
|
|||||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
20F8517985BB5619A77F396B /* [CP] Embed Pods Frameworks */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
|
||||||
);
|
|
||||||
name = "[CP] Embed Pods Frameworks";
|
|
||||||
outputFileListPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
alwaysOutOfDate = 1;
|
alwaysOutOfDate = 1;
|
||||||
@ -371,6 +362,23 @@
|
|||||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
|
E66D16C1F41008EA24F48C2D /* [CP] Embed Pods Frameworks */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
name = "[CP] Embed Pods Frameworks";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
BIN
example/ios/Runner/JCSDKFont.bundle/Info.plist
Normal file
BIN
example/ios/Runner/JCSDKFont.bundle/Info.plist
Normal file
Binary file not shown.
BIN
example/ios/Runner/JCSDKFont.bundle/SourceHanSans-Regular.ttc
Normal file
BIN
example/ios/Runner/JCSDKFont.bundle/SourceHanSans-Regular.ttc
Normal file
Binary file not shown.
369
example/ios/Runner/JCSDKFont.bundle/language.json
Normal file
369
example/ios/Runner/JCSDKFont.bundle/language.json
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
{
|
||||||
|
"0020-007F": {
|
||||||
|
"description":"Basic_Latin",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"00A0-00FF":{
|
||||||
|
"description":"Latin-1_Supplement",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"0100-017F":{
|
||||||
|
"description":"Latin Extended-A",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"0370-03FF": {
|
||||||
|
"description":"Greek and Coptic",
|
||||||
|
"fontFile":""
|
||||||
|
},
|
||||||
|
"10A0-10FF": {
|
||||||
|
"description":"Georgian",
|
||||||
|
"fontFile":"NotoSansGeorgian-Regular.otf"
|
||||||
|
},
|
||||||
|
"0400-04FF": {
|
||||||
|
"description":"Cyrillic",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"0500-052F": {
|
||||||
|
"description":"Cyrillic Supplementary",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"0530-058F": {
|
||||||
|
"description":"Armenian",
|
||||||
|
"fontFile":"NotoSansArmenian-Regular.otf"
|
||||||
|
},
|
||||||
|
"0590-05FF":{
|
||||||
|
"description":"Hebrew",
|
||||||
|
"fontFile":"NotoSansHebrew-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0600-06FF":{
|
||||||
|
"description":"Arabic",
|
||||||
|
"fontFile":"NotoNaskhArabic-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0700-074F":{
|
||||||
|
"description":"Syriac",
|
||||||
|
"fontFile":"NotoSansSyriacEstrangela-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0780-07BF":{
|
||||||
|
"description":"Thaana",
|
||||||
|
"fontFile":"NotoSansThaana-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0900-097F":{
|
||||||
|
"description":"Devanagari",
|
||||||
|
"fontFile":"NotoSansDevanagari-Regular.otf"
|
||||||
|
},
|
||||||
|
"0980-09FF":{
|
||||||
|
"description":"Bengali",
|
||||||
|
"fontFile":"NotoSansBengali-Regular.otf"
|
||||||
|
},
|
||||||
|
"0A00-0A7F":{
|
||||||
|
"description":"Gurmukhi",
|
||||||
|
"fontFile":"NotoSansGurmukhi-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0B00-0B7F":{
|
||||||
|
"description":"Oriya",
|
||||||
|
"fontFile":"NotoSansOriya-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0B80-0BFF":{
|
||||||
|
"description":"Tamil",
|
||||||
|
"fontFile":"NotoSansTamil-Regular.otf"
|
||||||
|
},
|
||||||
|
"0C00-0C7F":{
|
||||||
|
"description":"Telugu",
|
||||||
|
"fontFile":"NotoSansTelugu-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0C80-0CFF":{
|
||||||
|
"description":"Kannada",
|
||||||
|
"fontFile":"NotoSansKannada-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0D00-0D7F":{
|
||||||
|
"description":"Malayalam",
|
||||||
|
"fontFile":"NotoSansMalayalam-Regular.otf"
|
||||||
|
},
|
||||||
|
"0D80-0DFF":{
|
||||||
|
"description":"Sinhala",
|
||||||
|
"fontFile":"NotoSansSinhala-Regular.otf"
|
||||||
|
},
|
||||||
|
"0E00-0E7F":{
|
||||||
|
"description":"Thai",
|
||||||
|
"fontFile":"NotoSansThai-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0E80-0EFF":{
|
||||||
|
"description":"Lao",
|
||||||
|
"fontFile":"NotoSansLao-Regular.ttf"
|
||||||
|
},
|
||||||
|
"0F00-0FFF":{
|
||||||
|
"description":"Tibetan",
|
||||||
|
"fontFile":"NotoSansTibetan-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1000-109F":{
|
||||||
|
"description":"Myanmar",
|
||||||
|
"fontFile":"NotoSansMyanmar-Regular-ZawDecode.ttf"
|
||||||
|
},
|
||||||
|
"10000-1007F":{
|
||||||
|
"description":"Linear B Syllabary",
|
||||||
|
"fontFile":"NotoSansLinearB-Regular.ttf"
|
||||||
|
},
|
||||||
|
"10080-100FF":{
|
||||||
|
"description":"Linear B Ideograms",
|
||||||
|
"fontFile":"NotoSansLinearB-Regular.ttf"
|
||||||
|
},
|
||||||
|
"10380-1039F":{
|
||||||
|
"description":"Ugaritic",
|
||||||
|
"fontFile":"NotoSansUgaritic-Regular.ttf"
|
||||||
|
},
|
||||||
|
"10450-1047F":{
|
||||||
|
"description":"Shavian",
|
||||||
|
"fontFile":"NotoSansShavian-Regular.ttf"
|
||||||
|
},
|
||||||
|
"10400-1044F":{
|
||||||
|
"description":"Deseret",
|
||||||
|
"fontFile":"NotoSansDeseret-Regular.ttf"
|
||||||
|
},
|
||||||
|
"10480-104AF":{
|
||||||
|
"description":"Osmanya",
|
||||||
|
"fontFile":"NotoSansOsmanya-Regular.ttf"
|
||||||
|
},
|
||||||
|
"10800-1083F":{
|
||||||
|
"description":"Cypriot ",
|
||||||
|
"fontFile":"NotoSansCypriot-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1200-137F":{
|
||||||
|
"description":"Ethiopic",
|
||||||
|
"fontFile":"NotoSansEthiopic-Regular.ttf"
|
||||||
|
},
|
||||||
|
"13A0-13FF":{
|
||||||
|
"description":"Cherokee",
|
||||||
|
"fontFile":"NotoSansCherokee-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1400-167F":{
|
||||||
|
"description":"Unified Canadian Aboriginal Syllabics",
|
||||||
|
"fontFile":"NotoSansCanadianAboriginal-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1680-169F":{
|
||||||
|
"description":"Ogham",
|
||||||
|
"fontFile":"NotoSansOgham-Regular.ttf"
|
||||||
|
},
|
||||||
|
"16A0-16FF":{
|
||||||
|
"description":"Runic",
|
||||||
|
"fontFile":"NotoSansRunic-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1700-171F":{
|
||||||
|
"description":"Tagalog",
|
||||||
|
"fontFile":"NotoSansTagalog-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1720-173F":{
|
||||||
|
"description":"Hanunoo",
|
||||||
|
"fontFile":"NotoSansHanunoo-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1740-175F":{
|
||||||
|
"description":"Buhid",
|
||||||
|
"fontFile":"NotoSansBuhid-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1760-177F":{
|
||||||
|
"description":"Tagbanwa",
|
||||||
|
"fontFile":"NotoSansTagbanwa-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1780-17FF":{
|
||||||
|
"description":"Khmer",
|
||||||
|
"fontFile":"NotoSansKhmer-VF.ttf"
|
||||||
|
},
|
||||||
|
"1800-18AF":{
|
||||||
|
"description":"Mongolian",
|
||||||
|
"fontFile":"NotoSansMongolian-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1900-194F":{
|
||||||
|
"description":"Limbu",
|
||||||
|
"fontFile":"NotoSansLimbu-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1950-197F":{
|
||||||
|
"description":"Tai Le",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"19E0-19FF":{
|
||||||
|
"description":"Khmer Symbols",
|
||||||
|
"fontFile":"NotoSansKhmer-VF.ttf"
|
||||||
|
},
|
||||||
|
"1D000-1D0FF":{
|
||||||
|
"description":"Byzantine Musical Symbols",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted.ttf"
|
||||||
|
},
|
||||||
|
"1D300-1D35F@Tai Xuan Jing Symbols":{
|
||||||
|
"description":"Tai Xuan Jing Symbols",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1E00-1EFF":{
|
||||||
|
"description":"Latin Extended Additional",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"1F00-1FFF":{
|
||||||
|
"description":"Greek Extended",
|
||||||
|
"fontFile":"NotoSansSylotiNagri-Regular.ttf"
|
||||||
|
},
|
||||||
|
"2000-206F":{
|
||||||
|
"description":"General Punctuation",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"20000-2A6DF":{
|
||||||
|
"description":"CJK",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"20A0-20CF":{
|
||||||
|
"description":"Currency Symbols",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted2.ttf"
|
||||||
|
},
|
||||||
|
"20D0-20FF":{
|
||||||
|
"description":"Combining Diacritical Marks for Symbols",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted2.ttf"
|
||||||
|
},
|
||||||
|
"2100-214F":{
|
||||||
|
"description":"Letterlike Symbols",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted.ttf"
|
||||||
|
},
|
||||||
|
"2200-22FF":{
|
||||||
|
"description":"Tai Le",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted.ttf"
|
||||||
|
},
|
||||||
|
"2300-23FF":{
|
||||||
|
"description":"Miscellaneous Technical",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted.ttf"
|
||||||
|
},
|
||||||
|
"2400-243F":{
|
||||||
|
"description":"Control Pictures",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"2440-245F":{
|
||||||
|
"description":"Optical Character Recognition",
|
||||||
|
"fontFile":"NotoSansGujarati-Regular.ttf"
|
||||||
|
},
|
||||||
|
"2460-24FF":{
|
||||||
|
"description":"Enclosed Alphanumerics",
|
||||||
|
"fontFile":"NotoSansGujarati-Regular.ttf"
|
||||||
|
},
|
||||||
|
"2500-257F":{
|
||||||
|
"description":"Box Drawing",
|
||||||
|
"fontFile":"NotoSansGujarati-Regular.ttf"
|
||||||
|
},
|
||||||
|
"2580-259F":{
|
||||||
|
"description":"Block Elements",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"25A0-25FF":{
|
||||||
|
"description":"Geometric Shapes",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"2600-26FF":{
|
||||||
|
"description":"Miscellaneous Symbols",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted.ttf"
|
||||||
|
},
|
||||||
|
"2700-27BF":{
|
||||||
|
"description":"Dingbats",
|
||||||
|
"fontFile":"NotoSansTaiLe-Regular.ttf"
|
||||||
|
},
|
||||||
|
"27C0-27EF":{
|
||||||
|
"description":"@Miscellaneous Mathematical Symbols-A",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted.ttf"
|
||||||
|
},
|
||||||
|
"27F0-27FF":{
|
||||||
|
"description":"@Supplemental Arrows-A",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"2800-28FF":{
|
||||||
|
"description":"Braille Patterns",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"2900-297F":{
|
||||||
|
"description":"@Supplemental Arrows-B",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"2980-29FF":{
|
||||||
|
"description":"Miscellaneous Mathematical Symbols-B",
|
||||||
|
"fontFile":"NotoSansSymbols-Regular-Subsetted2.ttf"
|
||||||
|
},
|
||||||
|
"2A00-2AFF":{
|
||||||
|
"description":"@Supplemental Mathematical Operators",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"2B00-2BFF":{
|
||||||
|
"description":"@Miscellaneous Symbols and Arrows",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"2E80-2EFF":{
|
||||||
|
"description":"CJK Radicals Supplement",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"2F800-2FA1F":{
|
||||||
|
"description":"Tai Le",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"3040-309F":{
|
||||||
|
"description":"Hiragana",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"30A0-30FF@Katakana":{
|
||||||
|
"description":"Katakana",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"3100-312F@Bopomofo":{
|
||||||
|
"description":"Bopomofo",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"3130-318F":{
|
||||||
|
"description":"Hangul Compatibility Jamo",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"3190-319F":{
|
||||||
|
"description":"Kanbun",
|
||||||
|
"fontFile":"NotoSansKannada-Regular.ttf"
|
||||||
|
},
|
||||||
|
"31A0-31BF@Bopomofo Extended":{
|
||||||
|
"description":"Tai Le",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"31F0-31FF":{
|
||||||
|
"description":"Katakana Phonetic Extensions",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},"3200-32FF":{
|
||||||
|
"description":"Enclosed CJK Letters and Months",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"3300-33FF":{
|
||||||
|
"description":"CJK Compatibility",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"4DC0-4DFF":{
|
||||||
|
"description":"Yijing Hexagram Symbols",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"4E00-9FFF":{
|
||||||
|
"description":"CJK Unified Ideographs",
|
||||||
|
"fontFile":"SourceHanSans-Regular.ttc"
|
||||||
|
},
|
||||||
|
"FB00-FB4F":{
|
||||||
|
"description":"Alphabetic Presentation Forms",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"FB50-FDFF":{
|
||||||
|
"description":"Arabic Presentation Forms-A",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"FE00-FE0F":{
|
||||||
|
"description":"Variation Selectors",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"FE20-FE2F":{
|
||||||
|
"description":"Combining Half Marks",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"FE30-FE4F":{
|
||||||
|
"description":"CJK Compatibility Forms",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"FE50-FE6F":{
|
||||||
|
"description":"Small Form Variants",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
},
|
||||||
|
"FF00-FFEF":{
|
||||||
|
"description":"Halfwidth and Fullwidth Forms",
|
||||||
|
"fontFile":"NotoSansCJK-Regular.ttc"
|
||||||
|
}
|
||||||
|
}
|
@ -1,34 +1,237 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
|
||||||
|
|
||||||
import 'package:jc_printer/jc_printer.dart';
|
import 'package:jc_printer/jc_printer.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatefulWidget {
|
class MyApp extends StatelessWidget {
|
||||||
const MyApp({super.key});
|
const MyApp({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<MyApp> createState() => _MyAppState();
|
Widget build(BuildContext context) {
|
||||||
|
return const MaterialApp(
|
||||||
|
home: HomePage(),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _MyAppState extends State<MyApp> {
|
class HomePage extends StatefulWidget {
|
||||||
final _jcPrinter = JcPrinter();
|
const HomePage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<HomePage> createState() => _HomePageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _HomePageState extends State<HomePage> {
|
||||||
|
final TextEditingController _labelWidthInput = TextEditingController();
|
||||||
|
final TextEditingController _labelHeightInput = TextEditingController();
|
||||||
|
final TextEditingController _countInput = TextEditingController();
|
||||||
|
final TextEditingController _contentInput = TextEditingController();
|
||||||
|
final _printer = JcPrinter();
|
||||||
|
ConnectState _connectState = ConnectState.none;
|
||||||
|
StreamSubscription<ConnectState>? _connectStateSubs;
|
||||||
|
StreamSubscription<int>? _printingCountSubs;
|
||||||
|
StreamSubscription<Map<String, String>>? _errorInfoSubs;
|
||||||
|
DiscoveredDevice? _device;
|
||||||
|
|
||||||
|
String get _title {
|
||||||
|
switch (_connectState) {
|
||||||
|
case ConnectState.connecting:
|
||||||
|
return '连接中';
|
||||||
|
case ConnectState.connected:
|
||||||
|
return _device?.name ?? '已连接';
|
||||||
|
case ConnectState.none:
|
||||||
|
return '未连接';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
_labelWidthInput.text = '40';
|
||||||
|
_labelHeightInput.text = '30';
|
||||||
|
_countInput.text = '1';
|
||||||
|
_contentInput.text = '歪脖子';
|
||||||
|
_connectStateSubs = _printer.connectStateStream.listen(
|
||||||
|
_connectStateListener,
|
||||||
|
);
|
||||||
|
_printingCountSubs = _printer.printingCountStream.listen(
|
||||||
|
_printingCountListener,
|
||||||
|
);
|
||||||
|
_errorInfoSubs = _printer.errorInfoStream.listen(
|
||||||
|
_errorInfoListener,
|
||||||
|
);
|
||||||
super.initState();
|
super.initState();
|
||||||
_jcPrinter.connect('name');
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_labelWidthInput.dispose();
|
||||||
|
_labelHeightInput.dispose();
|
||||||
|
_countInput.dispose();
|
||||||
|
_contentInput.dispose();
|
||||||
|
_connectStateSubs?.cancel();
|
||||||
|
_printingCountSubs?.cancel();
|
||||||
|
_errorInfoSubs?.cancel();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _connectStateListener(ConnectState state) {
|
||||||
|
setState(() {
|
||||||
|
_connectState = state;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
void _printingCountListener(int count) {
|
||||||
|
print(count);
|
||||||
|
}
|
||||||
|
void _errorInfoListener(Map<String, String> error) {
|
||||||
|
print(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _connect() {
|
||||||
|
_printer.connect(_device!.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _startPrint() async {
|
||||||
|
final labelWidth = double.tryParse(_labelWidthInput.value.text) ?? 0;
|
||||||
|
final labelHeight = double.tryParse(_labelHeightInput.value.text) ?? 0;
|
||||||
|
final count = double.tryParse(_countInput.value.text) ?? 0;
|
||||||
|
final content = _contentInput.value.text.trim();
|
||||||
|
if (content.isEmpty || count <= 0) return;
|
||||||
|
_printer.setTotalPrints(3);
|
||||||
|
_printer.startPrint(data: '', count: 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return Scaffold(
|
||||||
home: Scaffold(
|
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('Plugin example app'),
|
title: _connectState == ConnectState.connecting
|
||||||
|
? const CupertinoActivityIndicator()
|
||||||
|
: Text(_title),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () async {
|
||||||
|
if (_connectState == ConnectState.connected) {
|
||||||
|
_printer.disconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final result = await showDialog<DiscoveredDevice>(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) => _DevicesDialog(
|
||||||
|
onTap: Navigator.of(context).pop,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
if (result == null) return;
|
||||||
|
_device = result;
|
||||||
|
_connect();
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
_connectState == ConnectState.connected ? '断开' : '连接设备',
|
||||||
|
style: const TextStyle(color: Colors.white),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
padding: const EdgeInsets.all(20),
|
||||||
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
TextField(
|
||||||
|
controller: _labelWidthInput,
|
||||||
|
decoration: const InputDecoration(label: Text('标签宽度')),
|
||||||
|
),
|
||||||
|
TextField(
|
||||||
|
controller: _labelHeightInput,
|
||||||
|
decoration: const InputDecoration(label: Text('标签高度')),
|
||||||
|
),
|
||||||
|
TextField(
|
||||||
|
controller: _countInput,
|
||||||
|
decoration: const InputDecoration(label: Text('打印数量')),
|
||||||
|
),
|
||||||
|
TextField(
|
||||||
|
controller: _contentInput,
|
||||||
|
decoration: const InputDecoration(label: Text('内容')),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: _startPrint,
|
||||||
|
child: const Text('开始打印'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DevicesDialog extends StatefulWidget {
|
||||||
|
final void Function(DiscoveredDevice device)? onTap;
|
||||||
|
|
||||||
|
const _DevicesDialog({
|
||||||
|
Key? key,
|
||||||
|
this.onTap,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<_DevicesDialog> createState() => _DevicesDialogState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DevicesDialogState extends State<_DevicesDialog> {
|
||||||
|
final _ble = FlutterReactiveBle();
|
||||||
|
final List<DiscoveredDevice> _devices = [];
|
||||||
|
StreamSubscription<DiscoveredDevice>? _scanSubs;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
_scanSubs = _ble.scanForDevices(
|
||||||
|
withServices: [],
|
||||||
|
).listen(_scanListener);
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scanSubs?.cancel();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _scanListener(DiscoveredDevice device) {
|
||||||
|
if (device.name.isEmpty) return;
|
||||||
|
if (device.connectable != Connectable.available) return;
|
||||||
|
final index = _devices.indexWhere(
|
||||||
|
(element) => element.id == device.id,
|
||||||
|
);
|
||||||
|
if (index > -1) {
|
||||||
|
_devices[index] = device;
|
||||||
|
} else {
|
||||||
|
_devices.add(device);
|
||||||
|
}
|
||||||
|
if (mounted) setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Dialog(
|
||||||
|
child: ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxHeight: 400),
|
||||||
|
child: ListView.separated(
|
||||||
|
itemBuilder: (BuildContext context, int index) {
|
||||||
|
final item = _devices[index];
|
||||||
|
return ListTile(
|
||||||
|
title: Text(item.name),
|
||||||
|
onTap: () => widget.onTap?.call(item),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
itemCount: _devices.length,
|
||||||
|
separatorBuilder: (_, __) => const Divider(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -65,6 +65,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.4"
|
version: "6.1.4"
|
||||||
|
fixnum:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fixnum
|
||||||
|
sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -83,6 +91,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.3"
|
||||||
|
flutter_reactive_ble:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_reactive_ble
|
||||||
|
sha256: "7a0d245412dc8e1b72ce2adc423808583b42ce824b1be74001ff22c8bb5ada48"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.2.0"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -93,6 +109,14 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
functional_data:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: functional_data
|
||||||
|
sha256: aefdec4365452283b2a7cf420a3169654d51d3e9553069a22d76680d7a9d7c3d
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
integration_test:
|
integration_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -169,6 +193,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.4"
|
version: "4.2.4"
|
||||||
|
protobuf:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: protobuf
|
||||||
|
sha256: "01dd9bd0fa02548bf2ceee13545d4a0ec6046459d847b6b061d8a27237108a08"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
reactive_ble_mobile:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: reactive_ble_mobile
|
||||||
|
sha256: e4623446d5fd6e641c984892ee1fa7c67499a2bb0971d85a500815e1d05db6fb
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.2.0"
|
||||||
|
reactive_ble_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: reactive_ble_platform_interface
|
||||||
|
sha256: "8988d16497886dccc69dca1c3eebce28ae387371f3f948a4f1b03dec9954fb05"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.2.0"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -17,6 +17,7 @@ dependencies:
|
|||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
||||||
|
flutter_reactive_ble: 5.2.0
|
||||||
jc_printer:
|
jc_printer:
|
||||||
# When depending on this package from a real application you should use:
|
# When depending on this package from a real application you should use:
|
||||||
# jc_printer: ^x.y.z
|
# jc_printer: ^x.y.z
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
#import <Flutter/Flutter.h>
|
#import <Flutter/Flutter.h>
|
||||||
|
|
||||||
@interface JcPrinterPlugin : NSObject<FlutterPlugin>
|
@interface JcPrinterPlugin : NSObject<FlutterPlugin, FlutterStreamHandler>
|
||||||
|
|
||||||
|
@property (nonatomic, strong) FlutterEventSink eventSink;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -3,29 +3,189 @@
|
|||||||
|
|
||||||
@implementation JcPrinterPlugin
|
@implementation JcPrinterPlugin
|
||||||
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
|
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
|
||||||
FlutterMethodChannel* channel = [FlutterMethodChannel
|
FlutterMethodChannel* channel = [FlutterMethodChannel methodChannelWithName:@"jc_printer" binaryMessenger:[registrar messenger]];
|
||||||
methodChannelWithName:@"jc_printer"
|
|
||||||
binaryMessenger:[registrar messenger]];
|
|
||||||
JcPrinterPlugin* instance = [[JcPrinterPlugin alloc] init];
|
JcPrinterPlugin* instance = [[JcPrinterPlugin alloc] init];
|
||||||
[registrar addMethodCallDelegate:instance channel:channel];
|
[registrar addMethodCallDelegate:instance channel:channel];
|
||||||
|
|
||||||
|
FlutterEventChannel* eventChannel = [FlutterEventChannel eventChannelWithName:@"printer_stream" binaryMessenger:[registrar messenger]];
|
||||||
|
[eventChannel setStreamHandler:instance];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
|
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
|
||||||
NSLog(@"arguments is :%@", call.arguments);
|
// NSLog(@"arguments is :%@", call.arguments);
|
||||||
|
|
||||||
|
[self printingCount];
|
||||||
|
[self errorInfo];
|
||||||
|
|
||||||
if ([@"getPlatformVersion" isEqualToString:call.method]) {
|
if ([@"getPlatformVersion" isEqualToString:call.method]) {
|
||||||
result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
|
result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
|
||||||
} else if ([@"connect" isEqualToString:call.method]) {
|
} else if ([@"connect" isEqualToString:call.method]) {
|
||||||
[self connect:call.arguments result:result];
|
[self connect:call.arguments];
|
||||||
|
result(nil);
|
||||||
|
} else if ([@"disconnect" isEqualToString:call.method]) {
|
||||||
|
[self disconnect];
|
||||||
|
result(nil);
|
||||||
|
} else if ([@"setTotalPrints" isEqualToString:call.method]) {
|
||||||
|
[self setTotalPrints:call.arguments];
|
||||||
|
result(nil);
|
||||||
|
} else if ([@"initDrawingBoard" isEqualToString:call.method]) {
|
||||||
|
[self initDrawingBoard:call.arguments result:result];
|
||||||
|
} else if ([@"drawLabelImage" isEqualToString:call.method]) {
|
||||||
|
[self drawLabelImage:call.arguments result:result];
|
||||||
|
} else if ([@"drawLabelText" isEqualToString:call.method]) {
|
||||||
|
[self drawLabelText:call.arguments result:result];
|
||||||
|
} else if ([@"drawLabelBarcode" isEqualToString:call.method]) {
|
||||||
|
[self drawLabelBarcode:call.arguments result:result];
|
||||||
|
} else if ([@"getLabelData" isEqualToString:call.method]) {
|
||||||
|
[self getLabelData:result];
|
||||||
|
} else if ([@"startJob" isEqualToString:call.method]) {
|
||||||
|
[self startJob:call.arguments result:result];
|
||||||
|
} else if ([@"endJob" isEqualToString:call.method]) {
|
||||||
|
[self endJob:result];
|
||||||
|
} else if ([@"commit" isEqualToString:call.method]) {
|
||||||
|
[self commit:call.arguments result:result];
|
||||||
} else {
|
} else {
|
||||||
result(FlutterMethodNotImplemented);
|
result(FlutterMethodNotImplemented);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)connect:(NSString *)name result:(FlutterResult)result {
|
- (void) disconnect {
|
||||||
[JCAPI openPrinter:name completion:^(BOOL isSuccess) {
|
[JCAPI closePrinter];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setTotalPrints:(NSString *)args {
|
||||||
|
NSInteger page = [args integerValue];
|
||||||
|
[JCAPI setTotalQuantityOfPrints:page];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initDrawingBoard:(NSDictionary *)args result:(FlutterResult)result {
|
||||||
|
NSNumber *width = args[@"width"];
|
||||||
|
NSNumber *height = args[@"height"];
|
||||||
|
NSNumber *horizontalShift = args[@"horizontalShift"];
|
||||||
|
NSNumber *verticalShift = args[@"verticalShift"];
|
||||||
|
NSNumber *rotate = args[@"rotate"];
|
||||||
|
NSString *font = args[@"font"];
|
||||||
|
|
||||||
|
[JCAPI initDrawingBoard:width.floatValue withHeight:height.floatValue withHorizontalShift:horizontalShift.floatValue withVerticalShift:verticalShift.floatValue rotate:rotate.intValue font:font];
|
||||||
|
result(nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)drawLabelImage:(NSDictionary *)args result:(FlutterResult)result {
|
||||||
|
NSNumber *x = args[@"x"];
|
||||||
|
NSNumber *y = args[@"y"];
|
||||||
|
NSNumber *width = args[@"width"];
|
||||||
|
NSNumber *height = args[@"height"];
|
||||||
|
NSNumber *rotate = args[@"rotate"];
|
||||||
|
NSNumber *type = args[@"type"];
|
||||||
|
NSNumber *threshold = args[@"threshold"];
|
||||||
|
NSString *base64 = args[@"base64"];
|
||||||
|
|
||||||
|
BOOL isSuccess = [JCAPI DrawLableImage:x.floatValue withY:y.floatValue withWidth:width.floatValue withHeight:height.floatValue withImageData:base64 withRotate:rotate.intValue withImageProcessingType:type.intValue withImageProcessingValue:threshold.floatValue];
|
||||||
|
result(@(isSuccess));
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)drawLabelText:(NSDictionary *)args result:(FlutterResult)result {
|
||||||
|
NSNumber *x = args[@"x"];
|
||||||
|
NSNumber *y = args[@"y"];
|
||||||
|
NSNumber *width = args[@"width"];
|
||||||
|
NSNumber *height = args[@"height"];
|
||||||
|
NSNumber *fontSize = args[@"fontSize"];
|
||||||
|
NSNumber *rotate = args[@"rotate"];
|
||||||
|
NSNumber *textAlignHorizontal = args[@"textAlignHorizontal"];
|
||||||
|
NSNumber *textAlignVertical = args[@"textAlignVertical"];
|
||||||
|
NSNumber *lineMode = args[@"lineMode"];
|
||||||
|
NSNumber *letterSpacing = args[@"letterSpacing"];
|
||||||
|
NSNumber *lineSpacing = args[@"lineSpacing"];
|
||||||
|
NSString *content = args[@"content"];
|
||||||
|
|
||||||
|
BOOL isSuccess = [JCAPI drawLableText:x.floatValue withY:y.floatValue withWidth:width.floatValue withHeight:height.floatValue withString:content withFontFamily:@"" withFontSize:fontSize.floatValue withRotate:rotate.intValue withTextAlignHorizonral:textAlignHorizontal.intValue withTextAlignVertical:textAlignVertical.intValue withLineMode:lineMode.intValue withLetterSpacing:letterSpacing.floatValue withLineSpacing:lineSpacing.floatValue withFontStyle:@[@0,@0,@0,@0]];
|
||||||
|
result(@(isSuccess));
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)drawLabelBarcode:(NSDictionary *)args result:(FlutterResult)result {
|
||||||
|
NSNumber *x = args[@"x"];
|
||||||
|
NSNumber *y = args[@"y"];
|
||||||
|
NSNumber *width = args[@"width"];
|
||||||
|
NSNumber *height = args[@"height"];
|
||||||
|
NSNumber *fontSize = args[@"fontSize"];
|
||||||
|
NSNumber *rotate = args[@"rotate"];
|
||||||
|
NSNumber *codeType = args[@"codeType"];
|
||||||
|
NSNumber *textPosition = args[@"textPosition"];
|
||||||
|
NSNumber *textHeight = args[@"textHeight"];
|
||||||
|
NSString *text = args[@"text"];
|
||||||
|
|
||||||
|
BOOL isSuccess = [JCAPI drawLableBarCode:x.floatValue withY:y.floatValue withWidth:width.floatValue withHeight:height.floatValue withString:text withFontSize:fontSize.floatValue withRotate:rotate.intValue withCodeType:codeType.intValue withTextHeight:textHeight.floatValue withTextPosition:textPosition.intValue];
|
||||||
|
result(@(isSuccess));
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)getLabelData:(FlutterResult)result {
|
||||||
|
NSString *data = [JCAPI GenerateLableJson];
|
||||||
|
result(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)startJob:(NSDictionary *)args result:(FlutterResult)result {
|
||||||
|
NSNumber *blackRules = args[@"blackRules"];
|
||||||
|
NSNumber *paperStyle = args[@"paperStyle"];
|
||||||
|
[JCAPI startJob:blackRules.intValue withPaperStyle:paperStyle.intValue withCompletion:^(BOOL isSuccess) {
|
||||||
result(@(isSuccess));
|
result(@(isSuccess));
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)commit:(NSDictionary *)args result:(FlutterResult)result {
|
||||||
|
NSString *data = args[@"data"];
|
||||||
|
NSNumber *count = args[@"count"];
|
||||||
|
[JCAPI commit:data withOnePageNumbers:count.intValue withComplete:^(BOOL isSuccess) {
|
||||||
|
result(@(isSuccess));
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)endJob:(FlutterResult)result {
|
||||||
|
[JCAPI endPrint:^(BOOL isSuccess) {
|
||||||
|
result(@(isSuccess));
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - FlutterStreamHandler
|
||||||
|
|
||||||
|
- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events {
|
||||||
|
self.eventSink = events;
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (FlutterError *)onCancelWithArguments:(id)arguments {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)connect:(NSString *)name {
|
||||||
|
[JCAPI openPrinter:name completion:^(BOOL isSuccess) {
|
||||||
|
NSDictionary *params = @{
|
||||||
|
@"type": @"connectState",
|
||||||
|
@"result": @(isSuccess),
|
||||||
|
};
|
||||||
|
!self.eventSink ? : self.eventSink(params);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)errorInfo {
|
||||||
|
[JCAPI getPrintingErrorInfo:^(NSString *printInfo) {
|
||||||
|
NSDictionary *params = @{
|
||||||
|
@"type": @"errorInfo",
|
||||||
|
@"result": printInfo,
|
||||||
|
};
|
||||||
|
!self.eventSink ? : self.eventSink(params);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)printingCount {
|
||||||
|
[JCAPI getPrintingCountInfo:^(NSDictionary *printDicInfo) {
|
||||||
|
NSDictionary *params = @{
|
||||||
|
@"type": @"printingCount",
|
||||||
|
@"result": printDicInfo,
|
||||||
|
};
|
||||||
|
!self.eventSink ? : self.eventSink(params);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
39
lib/constants.dart
Normal file
39
lib/constants.dart
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
const Map<String, String> kErrorInfo = {
|
||||||
|
'1': '盒盖打开',
|
||||||
|
'2': '缺纸',
|
||||||
|
'3': '电量不足',
|
||||||
|
'4': '电池异常',
|
||||||
|
'5': '手动停止',
|
||||||
|
'6': '数据错误',
|
||||||
|
'7': '温度过高',
|
||||||
|
'8': '出纸异常',
|
||||||
|
'9': '打印忙碌',
|
||||||
|
'10': '没有检测到打印头',
|
||||||
|
'11': '环境温度过低',
|
||||||
|
'12': '打印头未锁紧',
|
||||||
|
'13': '未检测到碳带',
|
||||||
|
'14': '不匹配的碳带',
|
||||||
|
'15': '用完的碳带',
|
||||||
|
'16': '不支持的纸张类型',
|
||||||
|
'17': '设置纸张失败',
|
||||||
|
'18': '设置打印模式失败',
|
||||||
|
'19': '设置打印浓度失败',
|
||||||
|
'20': '写入Rfid失败',
|
||||||
|
'21': '边距设置错误',
|
||||||
|
'22': '通讯异常',
|
||||||
|
'23': '打印机断开',
|
||||||
|
'24': '画板参数设置错误',
|
||||||
|
'25': '旋转角度参数错误',
|
||||||
|
'26': 'json参数错误(PC)',
|
||||||
|
'27': '出纸异常',
|
||||||
|
'28': '检查纸张类型',
|
||||||
|
'29': 'RFID标签进行非RFID模式打印时',
|
||||||
|
'30': '浓度设置不支持',
|
||||||
|
'31': '不支持的打印模式',
|
||||||
|
'32': '标签材质设置失败',
|
||||||
|
'33': '不支持的标签材质设置',
|
||||||
|
'34': '打印机异常',
|
||||||
|
'35': '切刀异常',
|
||||||
|
'36': '缺纸(T2)',
|
||||||
|
'37': '打印机异常(T2无法通过指令恢复,需要手动按打印机)',
|
||||||
|
};
|
@ -1,10 +1,232 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
// import 'dart:convert';
|
||||||
|
import 'package:jc_printer/constants.dart';
|
||||||
|
|
||||||
import 'jc_printer_platform_interface.dart';
|
import 'jc_printer_platform_interface.dart';
|
||||||
|
|
||||||
|
enum ConnectState {
|
||||||
|
/// 连接中
|
||||||
|
connecting,
|
||||||
|
|
||||||
|
/// 连接成功
|
||||||
|
connected,
|
||||||
|
|
||||||
|
/// 未连接
|
||||||
|
none,
|
||||||
|
}
|
||||||
|
|
||||||
class JcPrinter {
|
class JcPrinter {
|
||||||
final _printer = JcPrinterPlatform.instance;
|
final _printer = JcPrinterPlatform.instance;
|
||||||
|
// final _font = 'SourceHanSans-Regular.ttc';
|
||||||
|
|
||||||
/// 蓝牙连接指定名称的打印机。
|
late final StreamController<ConnectState> _connectStateBroadcast;
|
||||||
/// @param name 要连接的蓝牙打印机的名称。
|
late final StreamController<int> _printingCountBroadcast;
|
||||||
Future<bool> connect(String name) async => _printer.connect(name);
|
late final StreamController<Map<String, String>> _errorInfoBroadcast;
|
||||||
|
|
||||||
|
static final JcPrinter _instance = JcPrinter._internal();
|
||||||
|
|
||||||
|
factory JcPrinter() => _instance;
|
||||||
|
|
||||||
|
JcPrinter._internal() {
|
||||||
|
_connectStateBroadcast = StreamController.broadcast();
|
||||||
|
_printingCountBroadcast = StreamController.broadcast();
|
||||||
|
_errorInfoBroadcast = StreamController.broadcast();
|
||||||
|
|
||||||
|
_printer.printerStream.listen(_listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
Stream<ConnectState> get connectStateStream => _connectStateBroadcast.stream;
|
||||||
|
|
||||||
|
Stream<int> get printingCountStream => _printingCountBroadcast.stream;
|
||||||
|
|
||||||
|
Stream<Map<String, String>> get errorInfoStream => _errorInfoBroadcast.stream;
|
||||||
|
|
||||||
|
void _listener(dynamic event) {
|
||||||
|
if (event is! Map) return;
|
||||||
|
if (event['type'] == 'connectState') _connectStateListener(event);
|
||||||
|
if (event['type'] == 'printingCount') _printingCountListener(event);
|
||||||
|
if (event['type'] == 'errorInfo') _errorInfoListener(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _connectStateListener(dynamic event) {
|
||||||
|
_connectStateBroadcast.sink.add(
|
||||||
|
event['result'] == true ? ConnectState.connected : ConnectState.none,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _printingCountListener(dynamic event) {
|
||||||
|
if (event['result'] is! Map) return;
|
||||||
|
final result = event['result'];
|
||||||
|
final count = int.tryParse(result['totalCount'].toString()) ?? 0;
|
||||||
|
_printingCountBroadcast.sink.add(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _errorInfoListener(dynamic event) {
|
||||||
|
final code = event['result'].toString();
|
||||||
|
final msg = kErrorInfo[code] ?? '';
|
||||||
|
_errorInfoBroadcast.sink.add({'code': code, 'msg': msg});
|
||||||
|
}
|
||||||
|
|
||||||
|
void connect(String name) {
|
||||||
|
_connectStateBroadcast.sink.add(ConnectState.connecting);
|
||||||
|
_printer.connect(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void disconnect() {
|
||||||
|
_printer.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setTotalPrints(int count) => _printer.setTotalPrints(count);
|
||||||
|
|
||||||
|
/// 初始化画板。
|
||||||
|
///
|
||||||
|
/// @param width 画布宽度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param height 画布高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param font 使用字体路径。
|
||||||
|
Future<void> initDrawingBoard({
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String font,
|
||||||
|
}) async {
|
||||||
|
return _printer.initDrawingBoard(width: width, height: height, font: font);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 绘制文本。
|
||||||
|
///
|
||||||
|
/// @param x 水平坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param y 垂直坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param width 图片宽度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param height 图片高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param content 内容。
|
||||||
|
///
|
||||||
|
/// @param rotate 旋转角度,支持角度0/90/180/270。
|
||||||
|
///
|
||||||
|
/// @param textAlignHorizontal 文本水平对齐方式 0 左对齐、1 水平居中对齐、2 右对齐。
|
||||||
|
///
|
||||||
|
/// @param textAlignVertical 文本竖直对齐方式 0 上对齐、1 垂直居中对齐、2 下对齐。
|
||||||
|
///
|
||||||
|
/// @param lineMode 换行方式
|
||||||
|
/// 1:宽高固定,内容大小自适应(字号/字符间距/行间距 按比例缩放)
|
||||||
|
/// 2:宽度固定,高度自适应
|
||||||
|
/// 6.宽高固定,内容超过预设的宽高时自动缩小。
|
||||||
|
///
|
||||||
|
/// @param letterSpacing 字体间隔。
|
||||||
|
///
|
||||||
|
/// @param lineSpacing 行间隔。
|
||||||
|
Future<void> drawLabelText({
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String content,
|
||||||
|
required double fontSize,
|
||||||
|
double x = 0,
|
||||||
|
double y = 0,
|
||||||
|
int rotate = 0,
|
||||||
|
int textAlignHorizontal = 0,
|
||||||
|
int textAlignVertical = 0,
|
||||||
|
int lineMode = 1,
|
||||||
|
double letterSpacing = 0,
|
||||||
|
double lineSpacing = 0,
|
||||||
|
}) async {
|
||||||
|
await _printer.drawLabelText(
|
||||||
|
x: x,
|
||||||
|
y: y,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
content: content,
|
||||||
|
fontSize: fontSize,
|
||||||
|
rotate: rotate,
|
||||||
|
textAlignHorizontal: textAlignHorizontal,
|
||||||
|
textAlignVertical: textAlignVertical,
|
||||||
|
lineMode: lineMode,
|
||||||
|
letterSpacing: letterSpacing,
|
||||||
|
lineSpacing: lineSpacing,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 绘制条码。
|
||||||
|
///
|
||||||
|
/// @param x 水平坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param y 垂直坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param width 图片宽度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param height 图片高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param text 内容。
|
||||||
|
///
|
||||||
|
/// @param fontSize 字体大小。
|
||||||
|
///
|
||||||
|
/// @param rotate 旋转角度,支持角度0/90/180/270。
|
||||||
|
///
|
||||||
|
/// @param textHeight 文本高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param textPosition 文本位置,一维码文字识别码显示位置
|
||||||
|
/// 0:下方显示
|
||||||
|
/// 1:上方显示
|
||||||
|
/// 2:不显示。
|
||||||
|
///
|
||||||
|
/// @param codeType 一维码类型
|
||||||
|
/// 20:CODE128
|
||||||
|
/// 21:UPC-A
|
||||||
|
/// 22:UPC-E
|
||||||
|
/// 23:EAN8
|
||||||
|
/// 24:EAN13
|
||||||
|
/// 25:CODE93
|
||||||
|
/// 26:CODE39
|
||||||
|
/// 27:CODEBAR
|
||||||
|
/// 28:ITF25。
|
||||||
|
Future<void> drawLabelBarcode({
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String text,
|
||||||
|
required double fontSize,
|
||||||
|
required double textHeight,
|
||||||
|
double x = 0,
|
||||||
|
double y = 0,
|
||||||
|
int rotate = 0,
|
||||||
|
int codeType = 20,
|
||||||
|
int textPosition = 0,
|
||||||
|
}) async {
|
||||||
|
await _printer.drawLabelBarcode(
|
||||||
|
x: x,
|
||||||
|
y: y,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
text: text,
|
||||||
|
fontSize: fontSize,
|
||||||
|
rotate: rotate,
|
||||||
|
textHeight: textHeight,
|
||||||
|
codeType: codeType,
|
||||||
|
textPosition: textPosition,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 获取绘画数据
|
||||||
|
Future<String> getLabelData() async => _printer.getLabelData();
|
||||||
|
|
||||||
|
/// 开始打印
|
||||||
|
///
|
||||||
|
/// @param data 绘画数据。
|
||||||
|
///
|
||||||
|
/// @param count 用于指定当前页的打印份数。
|
||||||
|
Future<bool> startPrint({
|
||||||
|
required String data,
|
||||||
|
int count = 1,
|
||||||
|
}) async {
|
||||||
|
final result = await _printer.startJob(
|
||||||
|
blackRules: 0,
|
||||||
|
paperStyle: 1,
|
||||||
|
);
|
||||||
|
if (result != true) return false;
|
||||||
|
return _printer.commit(data: data, count: count);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> endPrint() async => _printer.endJob();
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,179 @@
|
|||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
import 'jc_printer_platform_interface.dart';
|
import 'jc_printer_platform_interface.dart';
|
||||||
|
|
||||||
/// An implementation of [JcPrinterPlatform] that uses method channels.
|
|
||||||
class MethodChannelJcPrinter extends JcPrinterPlatform {
|
class MethodChannelJcPrinter extends JcPrinterPlatform {
|
||||||
/// The method channel used to interact with the native platform.
|
final method = const MethodChannel('jc_printer');
|
||||||
@visibleForTesting
|
final event = const EventChannel('printer_stream');
|
||||||
final methodChannel = const MethodChannel('jc_printer');
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<String?> getPlatformVersion() async {
|
Future<void> connect(String name) async {
|
||||||
final version = await methodChannel.invokeMethod<String>('getPlatformVersion');
|
return method.invokeMethod<void>('connect', name);
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> connect(String name) async {
|
Future<void> disconnect() async {
|
||||||
final result = await methodChannel.invokeMethod<bool>('connect', name);
|
return method.invokeMethod<void>('disconnect');
|
||||||
print(result);
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> setTotalPrints(int page) async {
|
||||||
|
return method.invokeMethod<void>('setTotalPrints', page);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> initDrawingBoard({
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String font,
|
||||||
|
double horizontalShift = 0,
|
||||||
|
double verticalShift = 0,
|
||||||
|
int rotate = 0,
|
||||||
|
}) async {
|
||||||
|
final Map arguments = {
|
||||||
|
'width': width,
|
||||||
|
'height': height,
|
||||||
|
'horizontalShift': horizontalShift,
|
||||||
|
'verticalShift': verticalShift,
|
||||||
|
'rotate': rotate,
|
||||||
|
'font': font,
|
||||||
|
};
|
||||||
|
await method.invokeMethod<void>('initDrawingBoard', arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> drawLabelImage({
|
||||||
|
required double x,
|
||||||
|
required double y,
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String base64,
|
||||||
|
int rotate = 0,
|
||||||
|
int type = 1,
|
||||||
|
double threshold = 127,
|
||||||
|
}) async {
|
||||||
|
final Map arguments = {
|
||||||
|
'x': x,
|
||||||
|
'y': y,
|
||||||
|
'w': width,
|
||||||
|
'h': height,
|
||||||
|
'base64': base64,
|
||||||
|
'rotate': rotate,
|
||||||
|
'type': type,
|
||||||
|
'threshold': threshold,
|
||||||
|
};
|
||||||
|
final result = await method.invokeMethod<bool>(
|
||||||
|
'drawLabelImage',
|
||||||
|
arguments,
|
||||||
|
);
|
||||||
return result ?? false;
|
return result ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> drawLabelText({
|
||||||
|
required double x,
|
||||||
|
required double y,
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String content,
|
||||||
|
required double fontSize,
|
||||||
|
int rotate = 0,
|
||||||
|
int textAlignHorizontal = 0,
|
||||||
|
int textAlignVertical = 0,
|
||||||
|
int lineMode = 1,
|
||||||
|
double letterSpacing = 0,
|
||||||
|
double lineSpacing = 0,
|
||||||
|
}) async {
|
||||||
|
final Map arguments = {
|
||||||
|
'x': x,
|
||||||
|
'y': y,
|
||||||
|
'width': width,
|
||||||
|
'height': height,
|
||||||
|
'content': content,
|
||||||
|
'fontSize': fontSize,
|
||||||
|
'rotate': rotate,
|
||||||
|
'textAlignHorizontal': textAlignHorizontal,
|
||||||
|
'textAlignVertical': textAlignVertical,
|
||||||
|
'lineMode': lineMode,
|
||||||
|
'letterSpacing': letterSpacing,
|
||||||
|
'lineSpacing': lineSpacing,
|
||||||
|
};
|
||||||
|
final result = await method.invokeMethod<bool>('drawLabelText', arguments);
|
||||||
|
return result ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> drawLabelBarcode({
|
||||||
|
required double x,
|
||||||
|
required double y,
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String text,
|
||||||
|
required double textHeight,
|
||||||
|
required double fontSize,
|
||||||
|
int rotate = 0,
|
||||||
|
int codeType = 20,
|
||||||
|
int textPosition = 0,
|
||||||
|
}) async {
|
||||||
|
final Map arguments = {
|
||||||
|
'x': x,
|
||||||
|
'y': y,
|
||||||
|
'width': width,
|
||||||
|
'height': height,
|
||||||
|
'text': text,
|
||||||
|
'fontSize': fontSize,
|
||||||
|
'rotate': rotate,
|
||||||
|
'textHeight': textHeight,
|
||||||
|
'codeType': codeType,
|
||||||
|
'textPosition': textPosition,
|
||||||
|
};
|
||||||
|
final result = await method.invokeMethod<bool>(
|
||||||
|
'drawLabelBarcode',
|
||||||
|
arguments,
|
||||||
|
);
|
||||||
|
return result ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> getLabelData() async {
|
||||||
|
final result = await method.invokeMethod<String>('getLabelData');
|
||||||
|
return result ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> startJob({
|
||||||
|
required int blackRules,
|
||||||
|
required int paperStyle,
|
||||||
|
}) async {
|
||||||
|
final Map arguments = {
|
||||||
|
'blackRules': blackRules,
|
||||||
|
'paperStyle': paperStyle,
|
||||||
|
};
|
||||||
|
final result = await method.invokeMethod<bool>('startJob', arguments);
|
||||||
|
return result ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> endJob() async {
|
||||||
|
final result = await method.invokeMethod<bool>('endJob');
|
||||||
|
return result ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> commit({
|
||||||
|
required String data,
|
||||||
|
int count = 1,
|
||||||
|
}) async {
|
||||||
|
final Map arguments = {
|
||||||
|
'data': data,
|
||||||
|
'count': count,
|
||||||
|
};
|
||||||
|
final result = await method.invokeMethod<bool>(
|
||||||
|
'commit',
|
||||||
|
arguments,
|
||||||
|
);
|
||||||
|
return result ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Stream get printerStream => event.receiveBroadcastStream();
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,204 @@ abstract class JcPrinterPlatform extends PlatformInterface {
|
|||||||
_instance = instance;
|
_instance = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String?> getPlatformVersion() {
|
/// 蓝牙连接指定名称的打印机。
|
||||||
throw UnimplementedError('platformVersion() has not been implemented.');
|
///
|
||||||
}
|
/// @param name 要连接的蓝牙打印机的名称。
|
||||||
|
Future<void> connect(String name) async {
|
||||||
Future<bool> connect(String name) async {
|
|
||||||
throw UnimplementedError('connect() has not been implemented.');
|
throw UnimplementedError('connect() has not been implemented.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 断开连接
|
||||||
|
Future<void> disconnect() async {
|
||||||
|
throw UnimplementedError('disconnect() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 设置总打印机张数
|
||||||
|
Future<void> setTotalPrints(int page) async {
|
||||||
|
throw UnimplementedError('setTotalPrints() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 初始化画板。
|
||||||
|
///
|
||||||
|
/// @param width 画布宽度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param height 画布高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param horizontalShift 水平偏移,单位mm。
|
||||||
|
///
|
||||||
|
/// @param verticalShift 竖直偏移,单位mm。
|
||||||
|
///
|
||||||
|
/// @param rotate 旋转角度,支持角度0/90/180/270。
|
||||||
|
///
|
||||||
|
/// @param font 使用字体路径。
|
||||||
|
Future<void> initDrawingBoard({
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String font,
|
||||||
|
double horizontalShift = 0,
|
||||||
|
double verticalShift = 0,
|
||||||
|
int rotate = 0,
|
||||||
|
}) async {
|
||||||
|
throw UnimplementedError('initDrawingBoard() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 绘制图片。
|
||||||
|
///
|
||||||
|
/// @param x 水平坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param y 垂直坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param width 图片宽度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param height 图片高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param base64 图像base64数据。
|
||||||
|
///
|
||||||
|
/// @param rotate 旋转角度,支持角度0/90/180/270。
|
||||||
|
///
|
||||||
|
/// @param type 处理算法,默认1即可。
|
||||||
|
///
|
||||||
|
/// @param threshold 阈值,默认127即可。
|
||||||
|
Future<bool> drawLabelImage({
|
||||||
|
required double x,
|
||||||
|
required double y,
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String base64,
|
||||||
|
int rotate = 0,
|
||||||
|
int type = 1,
|
||||||
|
double threshold = 127,
|
||||||
|
}) async {
|
||||||
|
throw UnimplementedError('drawLabelImage() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 绘制文本。
|
||||||
|
///
|
||||||
|
/// @param x 水平坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param y 垂直坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param width 图片宽度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param height 图片高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param content 内容。
|
||||||
|
///
|
||||||
|
/// @param rotate 旋转角度,支持角度0/90/180/270。
|
||||||
|
///
|
||||||
|
/// @param textAlignHorizontal 文本水平对齐方式 0 左对齐、1 水平居中对齐、2 右对齐。
|
||||||
|
///
|
||||||
|
/// @param textAlignVertical 文本竖直对齐方式 0 上对齐、1 垂直居中对齐、2 下对齐。
|
||||||
|
///
|
||||||
|
/// @param lineMode 换行方式
|
||||||
|
/// 1:宽高固定,内容大小自适应(字号/字符间距/行间距 按比例缩放)
|
||||||
|
/// 2:宽度固定,高度自适应
|
||||||
|
/// 6.宽高固定,内容超过预设的宽高时自动缩小。
|
||||||
|
///
|
||||||
|
/// @param letterSpacing 字体间隔。
|
||||||
|
///
|
||||||
|
/// @param lineSpacing 行间隔。
|
||||||
|
Future<bool> drawLabelText({
|
||||||
|
required double x,
|
||||||
|
required double y,
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String content,
|
||||||
|
required double fontSize,
|
||||||
|
int rotate = 0,
|
||||||
|
int textAlignHorizontal = 0,
|
||||||
|
int textAlignVertical = 0,
|
||||||
|
int lineMode = 1,
|
||||||
|
double letterSpacing = 0,
|
||||||
|
double lineSpacing = 0,
|
||||||
|
}) async {
|
||||||
|
throw UnimplementedError('drawLabelText() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 绘制条码。
|
||||||
|
///
|
||||||
|
/// @param x 水平坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param y 垂直坐标,单位mm。
|
||||||
|
///
|
||||||
|
/// @param width 图片宽度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param height 图片高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param text 内容。
|
||||||
|
///
|
||||||
|
/// @param fontSize 字体大小。
|
||||||
|
///
|
||||||
|
/// @param rotate 旋转角度,支持角度0/90/180/270。
|
||||||
|
///
|
||||||
|
/// @param textHeight 文本高度,单位mm。
|
||||||
|
///
|
||||||
|
/// @param textPosition 文本位置,一维码文字识别码显示位置
|
||||||
|
/// 0:下方显示
|
||||||
|
/// 1:上方显示
|
||||||
|
/// 2:不显示。
|
||||||
|
///
|
||||||
|
/// @param codeType 一维码类型
|
||||||
|
/// 20:CODE128
|
||||||
|
/// 21:UPC-A
|
||||||
|
/// 22:UPC-E
|
||||||
|
/// 23:EAN8
|
||||||
|
/// 24:EAN13
|
||||||
|
/// 25:CODE93
|
||||||
|
/// 26:CODE39
|
||||||
|
/// 27:CODEBAR
|
||||||
|
/// 28:ITF25。
|
||||||
|
Future<bool> drawLabelBarcode({
|
||||||
|
required double x,
|
||||||
|
required double y,
|
||||||
|
required double width,
|
||||||
|
required double height,
|
||||||
|
required String text,
|
||||||
|
required double textHeight,
|
||||||
|
required double fontSize,
|
||||||
|
int rotate = 0,
|
||||||
|
int codeType = 20,
|
||||||
|
int textPosition = 0,
|
||||||
|
}) {
|
||||||
|
throw UnimplementedError('drawLabelBarcode() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 获取画板上绘制的数据
|
||||||
|
Future<String> getLabelData() async {
|
||||||
|
throw UnimplementedError('getLabelData() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 开始打印任务
|
||||||
|
///
|
||||||
|
/// @param blackRules 设置打印浓度。
|
||||||
|
///
|
||||||
|
/// @param paperStyle 设置纸张类型。
|
||||||
|
Future<bool> startJob({
|
||||||
|
required int blackRules,
|
||||||
|
required int paperStyle,
|
||||||
|
}) async {
|
||||||
|
throw UnimplementedError('startJob() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 结束打印任务
|
||||||
|
Future<bool> endJob() async {
|
||||||
|
throw UnimplementedError('endJob() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 提交打印任务
|
||||||
|
///
|
||||||
|
/// @param data 打印数据。
|
||||||
|
///
|
||||||
|
/// @param count 用于指定当前页的打印份数。
|
||||||
|
Future<bool> commit({
|
||||||
|
required String data,
|
||||||
|
int count = 1,
|
||||||
|
}) async {
|
||||||
|
throw UnimplementedError('commit() has not been implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 打印机事件流
|
||||||
|
Stream<dynamic> get printerStream {
|
||||||
|
throw UnimplementedError('printerStream has not been implemented.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:jc_printer/jc_printer_method_channel.dart';
|
// import 'package:jc_printer/jc_printer_method_channel.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
TestWidgetsFlutterBinding.ensureInitialized();
|
TestWidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
MethodChannelJcPrinter platform = MethodChannelJcPrinter();
|
// MethodChannelJcPrinter platform = MethodChannelJcPrinter();
|
||||||
const MethodChannel channel = MethodChannel('jc_printer');
|
const MethodChannel channel = MethodChannel('jc_printer');
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
@ -22,6 +22,6 @@ void main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('getPlatformVersion', () async {
|
test('getPlatformVersion', () async {
|
||||||
expect(await platform.getPlatformVersion(), '42');
|
// expect(await platform.getPlatformVersion(), '42');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:jc_printer/jc_printer.dart';
|
// import 'package:jc_printer/jc_printer.dart';
|
||||||
import 'package:jc_printer/jc_printer_platform_interface.dart';
|
import 'package:jc_printer/jc_printer_platform_interface.dart';
|
||||||
import 'package:jc_printer/jc_printer_method_channel.dart';
|
import 'package:jc_printer/jc_printer_method_channel.dart';
|
||||||
// import 'package:plugin_platform_interface/plugin_platform_interface.dart';
|
// import 'package:plugin_platform_interface/plugin_platform_interface.dart';
|
||||||
@ -20,7 +20,7 @@ void main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('getPlatformVersion', () async {
|
test('getPlatformVersion', () async {
|
||||||
JcPrinter jcPrinterPlugin = JcPrinter();
|
// JcPrinter jcPrinterPlugin = JcPrinter();
|
||||||
// MockJcPrinterPlatform fakePlatform = MockJcPrinterPlatform();
|
// MockJcPrinterPlatform fakePlatform = MockJcPrinterPlatform();
|
||||||
// JcPrinterPlatform.instance = fakePlatform;
|
// JcPrinterPlatform.instance = fakePlatform;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user