getArgumentFormMap<T> static method

T? getArgumentFormMap<T>(
  1. BuildContext context,
  2. String key
)

Implementation

static T? getArgumentFormMap<T>(BuildContext context, String key) {
  // 如果使用 Go Router,从 queryParameters 获取参数
  if (instance.enableGoRouter) {
    final GoRouterState? state = GoRouterState.of(context);
    if (state != null) {
      if (state.extra is Map) {
        Map<String, Object?> argMap = state.extra as Map<String, Object?>;
        return argMap[key] as T?;
      } else if (state.uri.queryParameters.containsKey(key)) {
        String value = state.uri.queryParameters[key]!;
        // 根据类型转换
        if (T == String) {
          return value as T;
        } else if (T == int) {
          return int.tryParse(value) as T?;
        } else if (T == bool) {
          return (value.toLowerCase() == 'true') as T;
        }
        return value as T?;
      }
    }
    return null;
  }

  // 传统 Navigator 的参数获取方式
  var argument = ModalRoute.of(context)!.settings.arguments;
  if (argument == null || argument is! Map) {
    return null;
  }
  Map<String, Object?> argMap = argument as Map<String, Object?>;
  return argMap[key] as T?;
}