Flutter广告日历插件flutter_bs_ad_calendar的使用

Flutter广告日历插件flutter_bs_ad_calendar的使用

功能

  • 简易的API接口
  • 可根据需求自定义组件
  • 支持在尼泊尔日期(BS)和公历日期(AD)之间切换
  • 支持动态事件和节假日

安装

pubspec.yaml文件中添加以下依赖项:

dependencies:
  flutter_bs_ad_calendar: ^1.0.4

基本设置

完整的示例代码可以在这里查看。

import 'package:flutter_bs_ad_calendar/flutter_bs_ad_calendar.dart';

// 设置初始日历类型为公历(AD)
CalendarType _calendarType = CalendarType.ad;

// 使用flutter_bs_ad_calendar插件创建日历
FlutterBSADCalendar(
    calendarType: _calendarType, // 日历类型
    firstDate: DateTime(1970), // 日历起始日期
    lastDate: DateTime(2024), // 日历结束日期
    onMonthChanged: (date) => print('month changed: ${date.toString()}'), // 月份变化时回调
    onDateSelected: (date) => print('selected day: ${date.toString()}'), // 日期选择时回调
);

额外信息

以下是一些额外的功能选项:

onDateSelected: (date) {
    print('selected day: ${date.toString()}'); // 日期选择时回调
},
onMonthChanged: (date) {
    print('month changed: ${date.toString()}'); // 月份变化时回调
},
todayDecoration: BoxDecoration(
    borderRadius: const BorderRadius.all(Radius.circular(10)), // 圆角
    color: Theme.of(context).primaryColorLight, // 背景色
    shape: BoxShape.rectangle, // 形状
),
selectedDayDecoration: BoxDecoration(
    borderRadius: const BorderRadius.all(Radius.circular(10)), // 圆角
    color: Theme.of(context).primaryColorDark, // 背景色
    shape: BoxShape.rectangle, // 形状
),
dayBuilder: (dayToBuild) {
    return Container(
        padding: const EdgeInsets.symmetric(horizontal: 8.0), // 内边距
        child: Column(
            mainAxisAlignment: MainAxisAlignment.center, // 主轴居中
            children: [
                Align(
                    alignment: Alignment.topCenter, // 对齐方式
                    child: Text(
                        '${dayToBuild.day}', // 显示日期
                        style: Theme.of(context).textTheme.bodyMedium, // 文本样式
                    ),
                ),
            ],
        ),
    );
},

要动态更新可见的日历格式,可以将以下行添加到组件中:

calendarType: _calendarType

通过更改_calendarType的值来切换日历类型。例如:

setState(() {
    _calendarType = CalendarType.bs; // 切换到尼泊尔日期
});

示例代码

以下是完整的示例代码,展示了如何使用flutter_bs_ad_calendar插件:

import 'dart:collection';

import 'package:calendar_example/pages/dynamic_calendar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bs_ad_calendar/flutter_bs_ad_calendar.dart';

import 'pages/basic_calendar.dart';
import 'pages/event_calendar.dart';
import 'pages/feature_calendar.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Nepali Calendar',
      theme: ThemeData(
        colorScheme: const ColorScheme.light(
          primary: Colors.lightBlue,
          secondary: Colors.red,
        ),
      ),
      home: const MyHomePage(title: 'Flutter Nepali Calendar'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({
    super.key,
    this.title,
  });

  final String? title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  CalendarType _calendarType = CalendarType.ad; // 初始日历类型为公历

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title ?? ''),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const SizedBox(height: 30.0),
            ElevatedButton(
              child: const Text('Basics Calendar'),
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(builder: (_) => const BasicCalendar()),
              ),
            ),
            const SizedBox(height: 15.0),
            ElevatedButton(
              child: const Text('Dynamic Calendar'),
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(builder: (_) => const DynamicCalendar()),
              ),
            ),
            const SizedBox(height: 15.0),
            ElevatedButton(
              child: const Text('Calendar with Features'),
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(builder: (_) => const FeatureCalendar()),
              ),
            ),
            const SizedBox(height: 15.0),
            ElevatedButton(
              child: const Text('Calendar with Event'),
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(builder: (_) => const EventCalendar()),
              ),
            ),
            const SizedBox(height: 15.0),
            ElevatedButton(
              child: const Text('Nepali Calendar Dialog'),
              onPressed: () async {
                DateTime? date = await showFlutterBSADCalendarDialog(
                  context: context,
                );
              },
            ),
            const SizedBox(height: 15.0),
            ElevatedButton(
              child: const Text('English Calendar Dialog'),
              onPressed: () async {
                DateTime? date = await showFlutterBSADCalendarDialog(
                  context: context,
                  calendarType: CalendarType.ad,
                );
              },
            ),
            const SizedBox(height: 30.0),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 flutter_bs_ad_calendar 插件的示例代码。这个插件用于在 Flutter 应用中实现广告日历功能。请注意,具体的使用方式可能会根据插件的版本和 Flutter SDK 的更新有所变化。以下代码假设你已经将 flutter_bs_ad_calendar 添加到你的 pubspec.yaml 文件中,并且已经运行了 flutter pub get

首先,确保你的 pubspec.yaml 文件中包含以下依赖:

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

然后,在你的 Dart 文件中,你可以按照以下方式使用 flutter_bs_ad_calendar 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter 广告日历示例',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AdCalendarPage(),
    );
  }
}

class AdCalendarPage extends StatefulWidget {
  @override
  _AdCalendarPageState createState() => _AdCalendarPageState();
}

class _AdCalendarPageState extends State<AdCalendarPage> {
  List<AdData> _adDataList = [];

  @override
  void initState() {
    super.initState();
    // 初始化广告数据,这里可以是从服务器获取的数据,这里用静态数据演示
    _initAdData();
  }

  void _initAdData() {
    // 示例广告数据
    _adDataList = [
      AdData(date: DateTime(2023, 10, 1), title: '广告1', description: '这是第一个广告'),
      AdData(date: DateTime(2023, 10, 5), title: '广告2', description: '这是第二个广告'),
      AdData(date: DateTime(2023, 10, 10), title: '广告3', description: '这是第三个广告'),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('广告日历'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: AdCalendar(
          // 设置当前选中的日期,默认为今天
          currentDate: DateTime.now(),
          // 设置广告数据
          adDataList: _adDataList,
          // 点击广告时的回调
          onAdClick: (AdData adData) {
            // 显示广告详情页面或其他操作
            showDialog(
              context: context,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: Text(adData.title),
                  content: Text(adData.description),
                  actions: <Widget>[
                    TextButton(
                      onPressed: () => Navigator.of(context).pop(),
                      child: Text('确定'),
                    ),
                  ],
                );
              },
            );
          },
          // 其他可选配置,如日期格式、样式等
          // locale: Locale('zh'), // 设置语言
          // firstDayOfWeek: DateTime.monday, // 设置一周的第一天为周一
          // ...
        ),
      ),
    );
  }
}

// 广告数据模型
class AdData {
  final DateTime date;
  final String title;
  final String description;

  AdData({required this.date, required this.title, required this.description});
}

在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个广告日历。广告数据在 initState 方法中初始化,并使用 AdCalendar 组件显示。当用户点击某个广告时,会弹出一个对话框显示广告的详情。

请确保你已经正确安装并配置了 flutter_bs_ad_calendar 插件,并根据你的具体需求调整广告数据的获取方式和显示逻辑。

回到顶部