Flutter IP查询插件ip_hunter的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter IP查询插件ip_hunter的使用

ip_hunter

获取设备的网络IP地址并获取基于连接网络的详细位置信息,如城市、区域和国家。

开始使用

引入插件

首先,在 pubspec.yaml 文件中添加 ip_hunter 插件依赖:

dependencies:
  ip_hunter: ^1.0.0

然后,运行 flutter pub get 来安装该插件。

导入插件

在你的 Dart 文件中导入 ip_hunter 包:

import 'package:ip_hunter/ip_hunter.dart';

使用插件

你可以通过 FutureBuilder 小部件来异步获取并显示 IP 地址:

// 在你的 build 方法中
return FutureBuilder<String>(
  future: IpHunter.getPublicIPAddress(), // 异步获取公共 IP 地址
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.waiting: 
        return const Text('Loading....'); // 显示加载状态
      default:
        if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}'); // 显示错误信息
        } else {
          return Text('IP: ${snapshot.data}', style: TextStyle(fontSize: 17)); // 显示 IP 地址
        }
    }
  },
);

你也可以通过一个简单的函数来获取 IP 地址:

Future<void> getIP() async {
  var ip = await IpHunter.getPublicIPAddress(); // 获取公共 IP 地址
  print("ip is $ip"); // 打印 IP 地址
}

注意事项

确保你的应用具有互联网访问权限,因为该插件需要网络连接来获取 IP 和位置详情。插件使用公开可用的 API 来根据网络 IP 地址提供位置详情。

详细方法

插件提供了以下方法:

方法名 描述 返回值
getNetworkIpAddress() 获取网络的 IP 地址 String
getCity() 获取与 IP 相关的城市 String
getRegion() 获取与 IP 相关的区域/州 String
getCountry() 获取与 IP 相关的国家 String
getCountryCode() 获取与 IP 相关的国家代码 String
getCurrency() 获取与 IP 相关的货币 String
getIpType() 获取 IP 类型(IPv4 / IPv6) String

完整示例

下面是完整的示例代码,展示了如何使用 ip_hunter 插件获取并显示 IP 地址及相关信息:

import 'package:flutter/material.dart';
import 'package:ip_hunter/ip_hunter.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Ip Hunter 示例'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: IpHunter.getPublicIPAddress(), // 异步获取公共 IP 地址
            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.waiting:
                  return const Text('Loading....'); // 显示加载状态
                default:
                  if (snapshot.hasError) {
                    return Text('Error: ${snapshot.error}'); // 显示错误信息
                  } else {
                    return Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Text(
                            'IP 地址: ${snapshot.data}',
                            style: const TextStyle(fontSize: 17),
                          ),
                          const SizedBox(height: 20),
                          FutureBuilder<String>(
                            future: IpHunter.getCity(), // 异步获取城市
                            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                              switch (snapshot.connectionState) {
                                case ConnectionState.waiting:
                                  return const Text('Loading....'); // 显示加载状态
                                default:
                                  if (snapshot.hasError) {
                                    return Text('Error: ${snapshot.error}'); // 显示错误信息
                                  } else {
                                    return Text(
                                      '城市: ${snapshot.data}',
                                      style: const TextStyle(fontSize: 17),
                                    ); // 显示城市
                                  }
                              }
                            },
                          ),
                          const SizedBox(height: 20),
                          FutureBuilder<String>(
                            future: IpHunter.getRegion(), // 异步获取区域/州
                            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                              switch (snapshot.connectionState) {
                                case ConnectionState.waiting:
                                  return const Text('Loading....'); // 显示加载状态
                                default:
                                  if (snapshot.hasError) {
                                    return Text('Error: ${snapshot.error}'); // 显示错误信息
                                  } else {
                                    return Text(
                                      '区域: ${snapshot.data}',
                                      style: const TextStyle(fontSize: 17),
                                    ); // 显示区域/州
                                  }
                              }
                            },
                          ),
                          const SizedBox(height: 20),
                          FutureBuilder<String>(
                            future: IpHunter.getCountry(), // 异步获取国家
                            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                              switch (snapshot.connectionState) {
                                case ConnectionState.waiting:
                                  return const Text('Loading....'); // 显示加载状态
                                default:
                                  if (snapshot.hasError) {
                                    return Text('Error: ${snapshot.error}'); // 显示错误信息
                                  } else {
                                    return Text(
                                      '国家: ${snapshot.data}',
                                      style: const TextStyle(fontSize: 17),
                                    ); // 显示国家
                                  }
                              }
                            },
                          ),
                          const SizedBox(height: 20),
                          FutureBuilder<String>(
                            future: IpHunter.getCountryCode(), // 异步获取国家代码
                            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                              switch (snapshot.connectionState) {
                                case ConnectionState.waiting:
                                  return const Text('Loading....'); // 显示加载状态
                                default:
                                  if (snapshot.hasError) {
                                    return Text('Error: ${snapshot.error}'); // 显示错误信息
                                  } else {
                                    return Text(
                                      '国家代码: ${snapshot.data}',
                                      style: const TextStyle(fontSize: 17),
                                    ); // 显示国家代码
                                  }
                              }
                            },
                          ),
                          const SizedBox(height: 20),
                          FutureBuilder<String>(
                            future: IpHunter.getCurrency(), // 异步获取货币
                            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                              switch (snapshot.connectionState) {
                                case ConnectionState.waiting:
                                  return const Text('Loading....'); // 显示加载状态
                                default:
                                  if (snapshot.hasError) {
                                    return Text('Error: ${snapshot.error}'); // 显示错误信息
                                  } else {
                                    return Text(
                                      '货币: ${snapshot.data}',
                                      style: const TextStyle(fontSize: 17),
                                    ); // 显示货币
                                  }
                              }
                            },
                          ),
                          const SizedBox(height: 20),
                          FutureBuilder<String>(
                            future: IpHunter.getIpType(), // 异步获取 IP 类型
                            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                              switch (snapshot.connectionState) {
                                case ConnectionState.waiting:
                                  return const Text('Loading....'); // 显示加载状态
                                default:
                                  if (snapshot.hasError) {
                                    return Text('Error: ${snapshot.error}'); // 显示错误信息
                                  } else {
                                    return Text(
                                      'IP 类型: ${snapshot.data}',
                                      style: const TextStyle(fontSize: 17),
                                    ); // 显示 IP 类型
                                  }
                              }
                            },
                          ),
                        ],
                      ),
                    );
                  }
              }
            },
          ),
        ),
      ),
    );
  }
}

更多关于Flutter IP查询插件ip_hunter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter IP查询插件ip_hunter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用ip_hunter插件进行IP查询的示例代码。这个插件可以用来获取用户的IP地址和地理位置信息。

首先,你需要在你的Flutter项目中添加ip_hunter插件。打开你的项目根目录下的pubspec.yaml文件,并添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  ip_hunter: ^最新版本号  # 请替换为实际最新版本号

然后运行flutter pub get来安装这个依赖。

接下来,你可以在你的Dart代码中使用IpHunter类来获取IP信息。以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:ip_hunter/ip_hunter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter IP Hunter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String ipAddress = "";
  String country = "";
  String region = "";
  String city = "";
  String isp = "";
  String timezone = "";

  @override
  void initState() {
    super.initState();
    _getIpInfo();
  }

  Future<void> _getIpInfo() async {
    try {
      IpInfo ipInfo = await IpHunter.getIpInfo();
      setState(() {
        ipAddress = ipInfo.ip;
        country = ipInfo.country;
        region = ipInfo.region;
        city = ipInfo.city;
        isp = ipInfo.isp;
        timezone = ipInfo.timezone;
      });
    } catch (e) {
      print("Error fetching IP info: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter IP Hunter Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('IP Address:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
            Text(ipAddress),
            SizedBox(height: 16),
            Text('Country:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
            Text(country),
            SizedBox(height: 16),
            Text('Region:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
            Text(region),
            SizedBox(height: 16),
            Text('City:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
            Text(city),
            SizedBox(height: 16),
            Text('ISP:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
            Text(isp),
            SizedBox(height: 16),
            Text('Timezone:', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
            Text(timezone),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 添加了ip_hunter依赖并运行flutter pub get来安装它。
  2. 创建了一个Flutter应用,并在主页面MyHomePage中调用IpHunter.getIpInfo()方法来获取IP信息。
  3. 使用setState方法来更新UI,以显示获取到的IP信息。

你可以根据需要调整UI布局和显示的信息。运行这个应用,你应该能看到设备的IP地址及其相关的地理位置信息。

回到顶部