Flutter每日灵感语录插件daily_inspiration_quotes的使用

Flutter每日灵感语录插件daily_inspiration_quotes的使用

灵感语录在许多教程、教育或实践应用中都是必不可少的,可以激励用户。

该插件提供了QuoteDialogButtonQuoteLoadingScreen 小部件,这些小部件会随机展示1643条不同的灵感语录,且不会重复出现。

当按下QuoteDialogButton时,它会触发ShowDialog函数,之后应用程序会显示一条随机的语录及其作者。QuoteLoadingScreen可以在应用程序的LoadingState中使用。与一组语录一起,应用程序会显示一个ProgressIndicator

对话框和按钮是可定制的,开发人员能够设置背景色、文本颜色以及按钮图标等。

Demo

如何使用?

  1. 在项目的pubspec.yaml文件中添加以下依赖:
dependencies:
  daily_inspiration_quotes: ^0.0.1
  1. 导入daily_inspiration_quotes.dart到你的代码中。
import 'package:daily_inspiration_quotes/daily_inspiration_quotes.dart';

QuoteDialogButton

你可以在任何地方调用QuoteDialogButton函数,并可选择性地指定以下参数:

  • canvasColor
  • textColor
  • buttonIcon
  • buttonColor
  • fontFamily
  • fontWeight
  • fontStyle

QuoteLoadingScreen

当你需要等待异步操作完成并在用户界面中显示加载状态时,你可以返回QuoteLoadingScreen,并可选择性地指定canvasColortextColor以及字体参数。

示例代码

import 'dart:async';

import 'package:daily_inspiration_quotes/daily_inspiration_quotes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'Todo.dart';
import 'bloc/api_bloc.dart';
import 'bloc/api_states.dart';
import 'bloc/api_events.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
          colorScheme: ColorScheme.fromSwatch(
              primarySwatch: Colors.deepPurple,
              accentColor: Colors.deepOrangeAccent)),
      home: BlocProvider(
        create: (_) => ApiBloc(),
        child: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key}) : super(key: key);

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

class _MyHomePageState extends State<MyHomePage> {
  List<Todo> users = [];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Users List"),
      ),
      // 调用Quote按钮,给定画布颜色、文本颜色、按钮图标及其颜色作为输入
      floatingActionButton: QuoteDialogButton(
        canvasColor: Colors.amber.shade200,
        textColor: Colors.black45,
        buttonIcon: Icons.lightbulb_circle_rounded,
        buttonColor: Colors.amber,
        fontStyle: FontStyle.italic,
        fontWeight: FontWeight.normal,
      ),
      body: buildBloc(),
    );
  }

  Widget buildBloc() {
    return BlocBuilder<ApiBloc, ApiStates>(builder: (context, state) {
      if (state is InitialState) {
        return buildInitialView();
      }
      if (state is LoadingState) {
        // 在加载状态下除了显示进度指示器外
        // 我们还显示了QuoteLoadingScreen,并给定画布颜色和文本颜色作为输入
        return QuoteLoadingScreen(
            canvasColor: Colors.amber.shade200, 
            textColor: Colors.black45,
            fontStyle: FontStyle.italic,
            fontWeight: FontWeight.normal,
        );
      }
      if (state is SuccessUserList) {
        List<Todo> users = state.usersList;
        return buildUserList(users);
      }
      if (state is FailureState) {
        return const Center(child: Text("Error while Connecting"));
      }

      return const Text("Nothing");
    });
  }

  Center buildInitialView() {
    return Center(
      child: ElevatedButton(
          onPressed: () {
            context.read<ApiBloc>().add(getTodosEvents());
          },
          child: Text("Get TODO".toUpperCase())),
    );
  }

  Widget buildUserList(List<Todo> users) {
    return RefreshIndicator(
      onRefresh: () {
        return Future.delayed(Duration(seconds: 5), () {});
      },
      child: RefreshIndicator(
        onRefresh: () {
          return Future.value(true);
        },
        child: ListView.builder(
            itemCount: users.length,
            itemBuilder: (BuildContext context, int index) {
              return ListTile(
                leading: const Icon(Icons.today_outlined),
                title: Text("${users[index].title}"),
                trailing: users[index].completed
                    ? Icon(
                        Icons.done,
                        color: Colors.green,
                      )
                    : null,
              );
            }),
      ),
    );
  }
}

class User {
  late int id;
  late String name;
  late String email;
  late String status;
  late String gender;

  User.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
    email = json['email'];
    status = json['status'];
    gender = json['gender'];
  }
}

更多关于Flutter每日灵感语录插件daily_inspiration_quotes的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter每日灵感语录插件daily_inspiration_quotes的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


daily_inspiration_quotes 是一个 Flutter 插件,用于在应用中显示每日灵感语录。这个插件通常会从网络或本地资源中获取每日的励志语录,并将其显示在应用界面上。以下是如何使用 daily_inspiration_quotes 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  daily_inspiration_quotes: ^1.0.0  # 请使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入 daily_inspiration_quotes 插件。

import 'package:daily_inspiration_quotes/daily_inspiration_quotes.dart';

3. 获取每日语录

你可以使用 DailyInspirationQuotes 类来获取每日的灵感语录。通常,插件会提供一个方法,比如 getQuote(),来获取当日的语录。

Future<void> fetchQuote() async {
  try {
    String quote = await DailyInspirationQuotes.getQuote();
    print('今天的灵感语录: $quote');
  } catch (e) {
    print('获取语录失败: $e');
  }
}

4. 显示语录

你可以将获取到的语录显示在应用的界面上。以下是一个简单的例子:

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

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

class _DailyQuoteScreenState extends State<DailyQuoteScreen> {
  String _quote = '加载中...';

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

  Future<void> fetchQuote() async {
    try {
      String quote = await DailyInspirationQuotes.getQuote();
      setState(() {
        _quote = quote;
      });
    } catch (e) {
      setState(() {
        _quote = '获取语录失败,请重试。';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('每日灵感语录'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Text(
            _quote,
            style: TextStyle(fontSize: 18, fontStyle: FontStyle.italic),
            textAlign: TextAlign.center,
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: fetchQuote,
        tooltip: '刷新语录',
        child: Icon(Icons.refresh),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: DailyQuoteScreen(),
  ));
}
回到顶部