问题描述
我有一个Blog App,其中我编写了Global的Bussiness内容以及一些特定于国家/地区的内容。像印度,印度尼西亚等的特殊职位。
这就是为什么我需要一种方法来查找用户要从哪个国家/地区提供特定内容。
但是,我不想使用GeoLocator插件,因为它将询问 位置用户。我只想要使用者的国家/地区,而不想要特定 位置,但权限对话框未指定可以 用户担心此应用为何需要位置权限。那是 为什么我想要一种无需隐式许可即可获取用户国家的方法 对话框询问他们的位置。
import 'dart:io' show Platform;
String localeName = Platform.localeName;
// this returns language device is using which mostly comes us en_US so this is of no use
Locale myLocale = Localizations.localeOf(context);
// This returned the US as the country despite the App being opened and used in India.
解决方法
好吧,我终于找到了一种获取用户所在国家的简单方法。
此链接以JSON格式返回用户的位置。因此,现在所有要做的就是向上述链接/ API发出Get请求,并将JSON解码为Map。
对于首次安装HTTP软件包:
Pubspec.yaml:
dependencies:
http:
代码:
import 'package:http/http.dart' as http;
import 'dart:convert';
Response data = await http.get('http://ip-api.com/json');
Map data = jsonDecode(data.body);
String country = data['country'];
,
语言环境为您提供设备用户设置的语言。它不一定表示他们的出生国家。它绝对不会告诉您他们的居住国。在许多情况下,该人可能是语言代码所在的国家/地区,但这并不能保证。知道它们在哪里的唯一方法是按位置。
更新 关于您的评论。如果您是根据从设备区域设置获得的语言代码来获取国家/地区名称,那么请看一下这篇文章。我自己没有尝试过,但看起来很有希望。 https://dev.to/thealphamerc/get-search-filter-countries-data-using-countryprovider-flutter-plugin-1epc
,尝试
import 'dart:io' show Platform;
String localeName = Platform.localeName
或尝试
请使用软件包devicelocale 我已经在真实设备上进行了测试,效果很好
代码段
String locale = await Devicelocale.currentLocale;