Как передать аргумент как SerializedMessage

Я новичок во Flutter, и чтобы изучить «лучшие практики», я загрузил новое приложение-пример скелета.

Вы получаете три примера элементов в виде списка, и когда вы щелкаете по одному из них, вы переходите к просмотру деталей. Я хочу передать объект, чтобы для каждого элемента примера было настраиваемое представление сведений. Поэтому я изменил код на следующий:

      ListTile(
        leading: const FlutterLogo(),
        title: Text(myObject.name),
        onTap: () {
          Navigator.restorablePushNamed(
              context, ObjectDetailView.routeName,
              arguments: myObject);
        },
        trailing: const Icon(Icons.arrow_forward_ios_rounded),

Но показывает ошибку: The arguments object must be serializable via the StandardMessageCodec.

Как я могу это сделать? Это кажется довольно сложным для «примера приложения». Есть ли смысл использовать restorablePushNamed()на странице сведений? Или мне следует переключиться на "нормальный" метод push / pop.

1 ответ

Есть смысл использоватьили любой другой восстанавливаемый метод push, если вы хотите сохранить текущую страницу и состояние приложения, когда оно было уничтожено операционной системой во время работы в фоновом режиме (например, при нехватке памяти).

Вам решать, нужно ли это в вашем приложении, в противном случае вы можете просто использовать «обычные» методы push без необходимости сериализации аргументов.

Но для использования State Restoration вам придется конвертироватьна карту или список, чтобы StandardMessageCodec сериализовал его, как сказал @Apealed в комментариях.

Чтобы преобразовать его в карту. вы можете сделать что-то подобное в своем классе:

      Map<String, dynamic> toMap() {
  return {
    "name": this.name,
    "property2": this.property2,
    ...
  };
}

Вы можете проверить больше информации об этом в документации: flutter.dev/go/state-restoration-design

Другие вопросы по тегам