@@ -362,6 +362,7 @@ $resultAt != null
362
362
name: func.name,
363
363
parameters: func.parameters,
364
364
returnType: func.returnType,
365
+ addSuffixVariable: true ,
365
366
channelName: channelNameFunc == null
366
367
? makeChannelName (api, func, dartPackageName)
367
368
: channelNameFunc (func),
@@ -468,11 +469,204 @@ final BinaryMessenger? ${_varNamePrefix}binaryMessenger;
468
469
Indent indent, {
469
470
required String dartPackageName,
470
471
}) {
472
+ const String apiName = '${instanceManagerClassName }Api' ;
473
+
474
+ final cb.Parameter binaryMessengerParameter = cb.Parameter (
475
+ (cb.ParameterBuilder builder) => builder
476
+ ..name = 'binaryMessenger'
477
+ ..type = cb.refer ('BinaryMessenger?' )
478
+ ..named = true ,
479
+ );
480
+
481
+ final cb.Field binaryMessengerField = cb.Field (
482
+ (cb.FieldBuilder builder) => builder
483
+ ..name = '${varNamePrefix }binaryMessenger'
484
+ ..type = cb.refer ('BinaryMessenger?' )
485
+ ..modifier = cb.FieldModifier .final$,
486
+ );
487
+
488
+ final String removeStrongReferenceName = makeChannelNameWithStrings (
489
+ apiName: apiName,
490
+ methodName: 'removeStrongReference' ,
491
+ dartPackageName: dartPackageName,
492
+ );
493
+
494
+ final cb.Class instanceManagerApi = cb.Class (
495
+ (cb.ClassBuilder builder) => builder
496
+ ..name = '_$apiName '
497
+ ..docs.add (
498
+ '/// Generated API for managing the Dart and native `$instanceManagerClassName `s.' ,
499
+ )
500
+ ..constructors.add (
501
+ cb.Constructor (
502
+ (cb.ConstructorBuilder builder) {
503
+ builder
504
+ ..docs.add ('/// Constructor for [_$apiName ].' )
505
+ ..optionalParameters.add (binaryMessengerParameter)
506
+ ..initializers.add (
507
+ cb.Code (
508
+ '${binaryMessengerField .name } = ${binaryMessengerParameter .name }' ,
509
+ ),
510
+ );
511
+ },
512
+ ),
513
+ )
514
+ ..fields.addAll (
515
+ < cb.Field > [
516
+ binaryMessengerField,
517
+ cb.Field (
518
+ (cb.FieldBuilder builder) {
519
+ builder
520
+ ..name = _pigeonChannelCodec
521
+ ..type = cb.refer ('MessageCodec<Object?>' )
522
+ ..static = true
523
+ ..modifier = cb.FieldModifier .constant
524
+ ..assignment = const cb.Code ('StandardMessageCodec()' );
525
+ },
526
+ )
527
+ ],
528
+ )
529
+ ..methods.add (
530
+ cb.Method (
531
+ (cb.MethodBuilder builder) {
532
+ builder
533
+ ..name = 'setUpMessageHandlers'
534
+ ..static = true
535
+ ..returns = cb.refer ('void' )
536
+ ..optionalParameters.addAll (< cb.Parameter > [
537
+ cb.Parameter (
538
+ (cb.ParameterBuilder builder) => builder
539
+ ..name = '${classMemberNamePrefix }clearHandlers'
540
+ ..type = cb.refer ('bool' )
541
+ ..named = true
542
+ ..defaultTo = const cb.Code ('false' ),
543
+ ),
544
+ binaryMessengerParameter,
545
+ cb.Parameter (
546
+ (cb.ParameterBuilder builder) => builder
547
+ ..name = 'instanceManager'
548
+ ..named = true
549
+ ..type = cb.refer ('$instanceManagerClassName ?' ),
550
+ ),
551
+ ])
552
+ ..body = cb.Block .of (
553
+ cb.Block (
554
+ (cb.BlockBuilder builder) {
555
+ final StringBuffer messageHandlerSink = StringBuffer ();
556
+ _writeFlutterMethodMessageHandler (
557
+ Indent (messageHandlerSink),
558
+ name: 'removeStrongReferenceName' ,
559
+ parameters: < Parameter > [
560
+ Parameter (
561
+ name: 'identifier' ,
562
+ type: const TypeDeclaration (
563
+ baseName: 'int' ,
564
+ isNullable: false ,
565
+ ),
566
+ )
567
+ ],
568
+ returnType: const TypeDeclaration .voidDeclaration (),
569
+ channelName: removeStrongReferenceName,
570
+ isMockHandler: false ,
571
+ isAsynchronous: false ,
572
+ nullHandlerExpression:
573
+ '${classMemberNamePrefix }clearHandlers' ,
574
+ onCreateApiCall: (
575
+ String methodName,
576
+ Iterable <Parameter > parameters,
577
+ Iterable <String > safeArgumentNames,
578
+ ) {
579
+ return '(instanceManager ?? $instanceManagerClassName .instance).remove(${safeArgumentNames .single })' ;
580
+ },
581
+ );
582
+ builder.statements.add (
583
+ cb.Code (messageHandlerSink.toString ()),
584
+ );
585
+ },
586
+ ).statements,
587
+ );
588
+ },
589
+ ),
590
+ )
591
+ ..methods.addAll (
592
+ < cb.Method > [
593
+ cb.Method (
594
+ (cb.MethodBuilder builder) {
595
+ builder
596
+ ..name = 'removeStrongReference'
597
+ ..returns = cb.refer ('Future<void>' )
598
+ ..modifier = cb.MethodModifier .async
599
+ ..requiredParameters.add (
600
+ cb.Parameter (
601
+ (cb.ParameterBuilder builder) => builder
602
+ ..name = 'identifier'
603
+ ..type = cb.refer ('int' ),
604
+ ),
605
+ )
606
+ ..body = cb.Block (
607
+ (cb.BlockBuilder builder) {
608
+ final StringBuffer messageCallSink = StringBuffer ();
609
+ _writeHostMethodMessageCall (
610
+ Indent (messageCallSink),
611
+ addSuffixVariable: false ,
612
+ channelName: removeStrongReferenceName,
613
+ parameters: < Parameter > [
614
+ Parameter (
615
+ name: 'identifier' ,
616
+ type: const TypeDeclaration (
617
+ baseName: 'int' ,
618
+ isNullable: false ,
619
+ ),
620
+ ),
621
+ ],
622
+ returnType: const TypeDeclaration .voidDeclaration (),
623
+ );
624
+ builder.statements.addAll (< cb.Code > [
625
+ cb.Code (messageCallSink.toString ()),
626
+ ]);
627
+ },
628
+ );
629
+ },
630
+ ),
631
+ cb.Method (
632
+ (cb.MethodBuilder builder) {
633
+ builder
634
+ ..name = 'clear'
635
+ ..returns = cb.refer ('Future<void>' )
636
+ ..modifier = cb.MethodModifier .async
637
+ ..docs.addAll (< String > [
638
+ '/// Clear the native `$instanceManagerClassName `.' ,
639
+ '///' ,
640
+ '/// This is typically called after a hot restart.' ,
641
+ ])
642
+ ..body = cb.Block (
643
+ (cb.BlockBuilder builder) {
644
+ final StringBuffer messageCallSink = StringBuffer ();
645
+ _writeHostMethodMessageCall (
646
+ Indent (messageCallSink),
647
+ addSuffixVariable: false ,
648
+ channelName: makeChannelNameWithStrings (
649
+ apiName: apiName,
650
+ methodName: 'clear' ,
651
+ dartPackageName: dartPackageName,
652
+ ),
653
+ parameters: < Parameter > [],
654
+ returnType: const TypeDeclaration .voidDeclaration (),
655
+ );
656
+ builder.statements.addAll (< cb.Code > [
657
+ cb.Code (messageCallSink.toString ()),
658
+ ]);
659
+ },
660
+ );
661
+ },
662
+ ),
663
+ ],
664
+ ),
665
+ );
666
+
667
+ final cb.DartEmitter emitter = cb.DartEmitter (useNullSafetySyntax: true );
471
668
indent.format (
472
- instanceManagerApiTemplate (
473
- dartPackageName: dartPackageName,
474
- pigeonChannelCodecVarName: _pigeonChannelCodec,
475
- ),
669
+ DartFormatter ().format ('${instanceManagerApi .accept (emitter )}' ),
476
670
);
477
671
}
478
672
@@ -859,7 +1053,7 @@ if (${varNamePrefix}replyList == null) {
859
1053
);
860
1054
indent.nest (2 , () {
861
1055
final String channelSuffix =
862
- addSuffixVariable ? ' ' : r'$messageChannelSuffix ' ;
1056
+ addSuffixVariable ? r'$messageChannelSuffix ' : ' ' ;
863
1057
indent.writeln ("'$channelName $channelSuffix ', $_pigeonChannelCodec ," );
864
1058
indent.writeln (
865
1059
'binaryMessenger: binaryMessenger);' ,
@@ -1451,7 +1645,6 @@ if (${varNamePrefix}replyList == null) {
1451
1645
_writeFlutterMethodMessageHandler (
1452
1646
Indent (messageHandlerSink),
1453
1647
name: methodName,
1454
- addSuffixVariable: true ,
1455
1648
parameters: < Parameter > [
1456
1649
Parameter (
1457
1650
name: '${classMemberNamePrefix }instanceIdentifier' ,
@@ -1507,7 +1700,6 @@ if (${varNamePrefix}replyList == null) {
1507
1700
_writeFlutterMethodMessageHandler (
1508
1701
Indent (messageHandlerSink),
1509
1702
name: method.name,
1510
- addSuffixVariable: true ,
1511
1703
parameters: < Parameter > [
1512
1704
Parameter (
1513
1705
name: '${classMemberNamePrefix }instance' ,
0 commit comments