Flutter命名日API插件flutter_nameday_api的使用

Flutter命名日API插件flutter_nameday_api的使用

Namedays example

Flutter nameday API logo

是否需要在您的应用程序中实现命名日功能?此插件可以通过加快从互联网获取命名日数据来帮助您实现这一目标。它是对Abalin.net命名日API的封装,因此您无需处理请求和解析JSON。

Abalin API 是国际化的,目前支持来自全球20个国家的命名日。

目录


特性 #

  1. 获取20个国家今天、明天或昨天庆祝的命名日。
  2. 确定某一天庆祝的命名日。
  3. 按日期搜索命名日。

支持的国家 #

Austria Bulgaria Croatia Czechia Denmark
Estonia Finland France Germany Greece
Hungary Italy Latvia Lithuania Poland
Russian Federation Slovakia Spain Sweden United States of America

使用方法 #

目前可用的方法如下表所示:

方法 参数
Nameday.today() 国家名称
Nameday.tomorrow() 国家名称
Nameday.yesterday() 国家名称
Nameday.searchByName() 姓名, 国家名称
Nameday.specificDay() 国家名称, 日期

更多用法信息可以在示例Dart文档中查看。


示例 #

所有上述方法都返回其各自的未来类(Future),只需将其插入到FutureBuilder中即可:

FutureBuilder(
  future: Nameday.today(), // 获取今天的命名日
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      // 将快照数据分配给未来方法返回的类类型
      OneDayData nameDays = snapshot.data;

      return ExpansionTile(
        title: Text('今日命名日'),
        children: [
          SingleChildScrollView(
            child: Column(
              children: [
                Text('今天是 ${nameDays.month}/${nameDays.day}'),
                for (var element in nameDays.nameDays)
                  Text(
                    element,
                    style: _textStyle(),
                  ),
              ],
            ),
          ),
        ],
      );
    } else {
      return CircularProgressIndicator(); // 加载动画
    }
  },
),

命名日示例截图

您可以在示例页面中找到包含所有方法的完整示例。


示例代码 #

以下是完整的示例代码,展示了如何使用插件实现命名日功能:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter命名日API'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: _tiles,
          ),
        ),
      ),
    );
  }
}

// 插件的主要部分在这里
List<FutureBuilder> _tiles = [
  // 使用内置方法创建FutureBuilder
  FutureBuilder(
    future: Nameday.today(), // 获取今天的命名日
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        OneDayData nameDays = snapshot.data;

        return ExpansionTile(
          title: Text('今日命名日'),
          children: [
            SingleChildScrollView(
              child: Column(
                children: [
                  Text('今天是 ${nameDays.month}/${nameDays.day}'),
                  for (var element in nameDays.nameDays)
                    Text(
                      element,
                      style: _textStyle(),
                    ),
                ],
              ),
            ),
          ],
        );
      } else {
        return CircularProgressIndicator(); // 加载动画
      }
    },
  ),
  FutureBuilder(
    future: Nameday.yesterday(), // 获取昨天的命名日
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        OneDayData nameDays = snapshot.data;

        return ExpansionTile(
          title: Text('昨日命名日'),
          children: [
            SingleChildScrollView(
              child: Column(
                children: [
                  Text('昨天是 ${nameDays.month}/${nameDays.day}'),
                  for (var element in nameDays.nameDays)
                    Text(
                      element,
                      style: _textStyle(),
                    ),
                ],
              ),
            ),
          ],
        );
      } else {
        return CircularProgressIndicator(); // 加载动画
      }
    },
  ),
  FutureBuilder(
    future: Nameday.tomorrow(), // 获取明天的命名日
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        OneDayData nameDays = snapshot.data;

        return ExpansionTile(
          title: Text('明日命名日'),
          children: [
            SingleChildScrollView(
              child: Column(
                children: [
                  Text('明天是 ${nameDays.month}/${nameDays.day}'),
                  for (var element in nameDays.nameDays)
                    Text(
                      element,
                      style: _textStyle(),
                    ),
                ],
              ),
            ),
          ],
        );
      } else {
        return CircularProgressIndicator(); // 加载动画
      }
    },
  ),
  FutureBuilder(
    future: Nameday.specificDay(day: 28, month: 3), // 按指定日期搜索命名日
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        SpecificDayData nameDays = snapshot.data;

        return ExpansionTile(
          title: Text('按日期搜索命名日'),
          children: [
            SingleChildScrollView(
              child: Column(
                children: [
                  Text('${nameDays.month}/${nameDays.day} 的命名日'),
                  for (var element in nameDays.nameDays)
                    Text(
                      element,
                      style: _textStyle(),
                    ),
                ],
              ),
            ),
          ],
        );
      } else {
        return CircularProgressIndicator(); // 加载动画
      }
    },
  ),
  FutureBuilder(
    future: Nameday.searchByName(name: 'János', country: Countries.hu), // 按姓名搜索命名日
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        SearchByNameData nameDays = snapshot.data;

        return ExpansionTile(
          title: Text('按姓名搜索日期'),
          children: [
            SingleChildScrollView(
              child: Column(
                children: [
                  Text('搜索结果数量: ${nameDays.resultCount}'),
                  for (var result in nameDays.results)
                    Text(
                      '${result.month}/${result.day}',
                      style: _textStyle(),
                    ),
                ],
              ),
            ),
          ],
        );
      } else {
        return CircularProgressIndicator(); // 加载动画
      }
    },
  ),
];

// 样式设置
TextStyle _textStyle() {
  return TextStyle(
    fontSize: 16.0,
    fontWeight: FontWeight.w300,
  );
}

更多关于Flutter命名日API插件flutter_nameday_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter命名日API插件flutter_nameday_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_nameday_api 是一个用于获取命名日(Nameday)信息的 Flutter 插件。命名日是指在特定日期与某个人名相关联的庆祝日,通常在某些欧洲国家(如匈牙利、波兰、捷克等)有庆祝命名日的传统。

以下是如何在 Flutter 项目中使用 flutter_nameday_api 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_nameday_api 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_nameday_api: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 flutter_nameday_api 插件:

import 'package:flutter_nameday_api/flutter_nameday_api.dart';

3. 使用插件

你可以使用 NamedayAPI 类来获取命名日信息。以下是一些常见的用法:

获取今天的命名日

Future<void> fetchTodayNameday() async {
  try {
    NamedayData namedayData = await NamedayAPI.getTodayNameday();
    print("Today's nameday: ${namedayData.namedays.join(", ")}");
  } catch (e) {
    print("Failed to fetch today's nameday: $e");
  }
}

获取指定日期的命名日

Future<void> fetchNamedayByDate(DateTime date) async {
  try {
    NamedayData namedayData = await NamedayAPI.getNamedayByDate(date);
    print("Nameday on ${date.toLocal()}: ${namedayData.namedays.join(", ")}");
  } catch (e) {
    print("Failed to fetch nameday by date: $e");
  }
}

获取指定月份的命名日

Future<void> fetchNamedayByMonth(int month) async {
  try {
    List<NamedayData> namedayList = await NamedayAPI.getNamedayByMonth(month);
    for (var namedayData in namedayList) {
      print("Nameday on ${namedayData.date.toLocal()}: ${namedayData.namedays.join(", ")}");
    }
  } catch (e) {
    print("Failed to fetch nameday by month: $e");
  }
}

4. 处理数据

NamedayData 类包含以下字段:

  • date: 日期
  • namedays: 一个包含命名日的字符串列表

你可以根据需要使用这些数据来更新 UI 或执行其他操作。

5. 示例代码

以下是一个完整的示例,展示如何在 Flutter 应用中显示今天的命名日:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: NamedayScreen(),
    );
  }
}

class NamedayScreen extends StatefulWidget {
  [@override](/user/override)
  _NamedayScreenState createState() => _NamedayScreenState();
}

class _NamedayScreenState extends State<NamedayScreen> {
  String _nameday = 'Loading...';

  [@override](/user/override)
  void initState() {
    super.initState();
    _fetchTodayNameday();
  }

  Future<void> _fetchTodayNameday() async {
    try {
      NamedayData namedayData = await NamedayAPI.getTodayNameday();
      setState(() {
        _nameday = namedayData.namedays.join(", ");
      });
    } catch (e) {
      setState(() {
        _nameday = 'Failed to fetch nameday';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Today\'s Nameday'),
      ),
      body: Center(
        child: Text(
          _nameday,
          style: TextStyle(fontSize: 24),
        ),
      ),
    );
  }
}
回到顶部