Используйте WidgetsBinding.instance.addObserver , чтобы зарегистрировать WidgetsBindingObserver , на котором вы зацепили didChangeAppLifecycleState .
Есть пример здесь: https://github.com/flutter/flutter/blob/master/examples/layers/services/lifecycle.dart
Большинство API-интерфейсов предоставляют аргумент «пользовательские данные» размера указателя, который будет выглядеть следующим образом:
GConn* gnet_conn_new (const gchar *hostname,
gint port,
GConnFunc func,
void* user_data);
Это позволит вам передать экземпляр в user_data и передать вашу функцию C на функция-член вроде этого:
void my_func(GConn *conn, void* user_data)
{
((MyClass*)user_data)->MyMemberFunc(conn);
}
Возможно, ваш API имеет альтернативный или аналогичный параметр «пользовательские данные» где-то. В противном случае вы не сможете сделать это без globals или statics.
Короткий ответ, вы не можете.
Длинный ответ:
Учитывая достаточную свободу действий API, которую вам нужно позвонить, вы можете настроить функцию, которую вы просто регистрируете, и звоните в качестве посредника. Обычно функции обратного вызова позволяют включать дополнительные данные, которые передаются этой функции вместе с информацией, сгенерированной объектом, вызывающим обратный вызов. Обычно он называется чем-то вроде «client_data» и имеет тип void * или long. Если это так, вы можете просто использовать эти данные, чтобы включить достаточную информацию для вызова функции, которую вы хотите, в нужном экземпляре, например, в режиме boost :: function & lt;>.
Обратите внимание, что этот посредник функция, которая делегирует вашу функцию-член, может быть статическим членом или свободной функцией.
К сожалению, у вас нет этой опции, так что ваша работа будет вдвойне жесткой. Вам действительно нужен какой-то способ убедиться, что этому правильному экземпляру присваивается сообщение, и вам не удастся определить этот экземпляр из данных обратного вызова. Есть несколько вариантов, которые могут или не могут работать для вас:
В заключение, нет прямого способа сделать то, что вы хотите, но могут быть ответы на получение того, что вам нужно, если вы рассмотрите варианты. Любая функция, используемая в качестве обратного вызова, предоставляемая функции API C, должна ссылаться как указатель на функцию, а не на указатель на элемент любого рода ... и, к сожалению, не является также и функтором. C не знает, как справляться с этими вещами, поэтому ваш обратный вызов должен быть свободной функцией или статическим членом.
Вам понадобится функция-обертка, чтобы справиться с этим, или вы можете сделать статический my_func (при условии, что ему не нужно обращаться к каким-либо переменным экземпляра).