Как определить динамический аргумент функции

#flutter #dart

Вопрос:

У меня есть класс тела сообщения, у него есть два аргумента: тип сообщения и полезная нагрузка сообщения.

 class Message {
  final int messageType;
  final DynamicType payload;
}
 

Полезная нагрузка сообщения является динамической, которая также имеет динамический обратный вызов приема. Если тип сообщения 1, а полезная нагрузка-Payload1, иначе, если тип сообщения 2, полезная нагрузка-Payload2.

 class Payload1 {
  ...
}

class Payload2 {
  ...
}

Future<void> receivePayload(int messageType, DynamicType payload) {
  ...
}
 

Как определить динамический тип полезной нагрузки?

Комментарии:

1. Это то, что вы ищете: dart.dev/гиды/язык/языковой тур#универсальные

Ответ №1:

Вы можете использовать либо var, либо полезную нагрузку dynamic. Ex. var;

Или

динамическая полезная нагрузка;

Ответ №2:

во-первых, вы должны создать классы dynamic, payload1 и payload2. пожалуйста, обратите внимание, что два ваших последних занятия должны продлить последнее!

 import 'dynamic_type.dart';

class Message {
  int messageType;
  DynamicType payload;

  Message({this.messageType, this.payload});
}

class DynamicType{

}

import 'package:test_app/dynamic_type.dart';

class Payload1 extends DynamicType{
  int x;
  String y;

  Payload1({this.x, this.y});
//etc


}


import 'package:test_app/dynamic_type.dart';

class Payload2 extends DynamicType{
  String x;
  int y;

  Payload2({this.x, this.y});
//etc

}
 

и теперь вы можете использовать, как показано ниже:

 if(your_condition){
        message = Message(
          messageType: 0,
          payload: Payload1(
            x: 10,
            y: "test"
          )
        );
      } else {
        message = Message(
            messageType: 0,
            payload: Payload2(
                x: "another class",
                y: 10
            )
        );
      }
 

На самом деле, вы можете использовать типы «динамический» или «var», но они могут сбивать с толку, если ваши классы слишком сильно различаются!