【问题标题】:Flutter get User's Country without Manual PermissionFlutter 无需手动许可即可获取用户所在的国家/地区
【发布时间】:2020-10-02 15:05:05
【问题描述】:

我有一个博客应用程序,我可以在其中编写面向全球的商业内容以及一些特定于国家/地区的内容。喜欢印度、印度尼西亚等的特别帖子。

这就是为什么我需要一种方法来查找用户要从哪个国家/地区提供特定内容。

但是,我不想使用 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.

【问题讨论】:

    标签: android flutter geolocation flutter-dependencies google-location-services


    【解决方案1】:

    好吧,我终于找到了一种简单的方法来获取用户的国家/地区。

    http://ip-api.com/json

    此链接以 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'];
    

    【讨论】:

    • 是的,它是这样工作的,但免费版本只有 45 个请求/秒
    • @YasserBenmman 45 req/s 对于单个 IP 的免费版本。
    【解决方案2】:

    区域设置为您提供设备用户设置的语言。它不一定表明他们的出生国家。它绝对不会告诉你他们的居住国。在许多情况下,该人可能在语言代码所在的国家/地区,但这并不能保证。知道他们在哪里的唯一方法是通过位置。

    更新 关于你的评论。如果您的意思是根据从设备区域设置获得的语言代码从哪里获取国家/地区名称,请查看此帖子。我自己没有尝试过,但看起来很有希望。 https://dev.to/thealphamerc/get-search-filter-countries-data-using-countryprovider-flutter-plugin-1epc

    【讨论】:

    • 那么,如何获取用户的国家名称?
    • 这个答案对你有帮助吗?
    【解决方案3】:

    试试这个

    import 'dart:io' show Platform;
    
    String localeName = Platform.localeName
    

    或者试试这个

    请使用包devicelocale 我用真机测试过,效果很好

    代码sn-p

    String locale = await Devicelocale.currentLocale;
    

    【讨论】:

    • 你读过这个问题吗?我添加了相同的代码并告诉了它的问题。
    猜你喜欢
    • 2012-08-06
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2022-07-19
    • 2016-03-18
    相关资源
    最近更新 更多