Flutter每日灵感语录插件daily_inspiration_quotes的使用
Flutter每日灵感语录插件daily_inspiration_quotes的使用
灵感语录在许多教程、教育或实践应用中都是必不可少的,可以激励用户。
该插件提供了QuoteDialogButton
和 QuoteLoadingScreen
小部件,这些小部件会随机展示1643条不同的灵感语录,且不会重复出现。
当按下QuoteDialogButton
时,它会触发ShowDialog
函数,之后应用程序会显示一条随机的语录及其作者。QuoteLoadingScreen
可以在应用程序的LoadingState
中使用。与一组语录一起,应用程序会显示一个ProgressIndicator
。
对话框和按钮是可定制的,开发人员能够设置背景色、文本颜色以及按钮图标等。
Demo
如何使用?
- 在项目的
pubspec.yaml
文件中添加以下依赖:
dependencies:
daily_inspiration_quotes: ^0.0.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
,并可选择性地指定canvasColor
、textColor
以及字体参数。
示例代码
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
更多关于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(),
));
}