Flutter投票管理插件polls的使用
Flutter投票管理插件polls的使用
屏幕截图
投票 | 尚未投票 | 已投票 |
---|---|---|
![]() |
![]() |
![]() |
使用
基础用法
import 'package:polls/polls.dart';
Polls(
children: [
// 这个列表不能少于2项,否则会抛出异常
Polls.options(title: 'Cairo', value: option1),
Polls.options(title: 'Mecca', value: option2),
Polls.options(title: 'Denmark', value: option3),
Polls.options(title: 'Mogadishu', value: option4),
],
question: Text('What is the capital of Egypt'), // 问题
currentUser: this.user, // 当前用户
creatorID: this.creator, // 创建者ID
voteData: usersWhoVoted, // 投票数据
userChoice: usersWhoVoted[this.user], // 用户选择
onVoteBackgroundColor: Colors.blue, // 投票背景颜色
leadingBackgroundColor: Colors.blue, // 领先背景颜色
backgroundColor: Colors.white, // 背景颜色
onVote: (choice) { // 投票回调
setState(() {
this.usersWhoVoted[this.user] = choice;
});
if (choice == 1) {
setState(() {
option1 += 1.0;
});
}
if (choice == 2) {
setState(() {
option2 += 1.0;
});
}
if (choice == 3) {
setState(() {
option3 += 1.0;
});
}
if (choice == 4) {
setState(() {
option4 += 1.0;
});
}
},
);
投票视图类型
Polls(
viewType: PollsType.creator
);
Polls(
viewType: PollsType.voter
);
Polls(
viewType: PollsType.readOnly
);
我为什么制作这个插件
显然,我构建了两个需要用户投票流程的应用,两次在不同的应用中实现了相同的代码。我也将代码分享给了一位朋友。我认为将其做成一个包不会是个坏主意,因为此时在pub.dev
上还没有投票小部件包。
关注我的GitHub
关注我
示例代码
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:polls/polls.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Polls',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PollView(),
);
}
}
class PollView extends StatefulWidget {
[@override](/user/override)
_PollViewState createState() => _PollViewState();
}
class _PollViewState extends State<PollView> {
double option1 = 1.0;
double option2 = 0.0;
double option3 = 1.0;
double option4 = 1.0;
double option5 = 1.0;
double option6 = 3.0;
double option7 = 2.0;
double option8 = 1.0;
String user = "king@mail.com";
Map<String, dynamic> usersWhoVoted = {
'sam@mail.com': 3,
'mike@mail.com': 4,
'john@mail.com': 1,
'kenny@mail.com': 1
};
String creator = "eddy@mail.com";
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Polls(
children: [
// 这个列表不能少于2项,否则会抛出异常
Polls.options(title: 'Cairo', value: option1),
Polls.options(title: 'Mecca', value: option2),
Polls.options(title: 'Denmark', value: option3),
Polls.options(title: 'Mogadishu', value: option4),
Polls.options(title: 'Maldives', value: option5),
Polls.options(title: 'Brazil', value: option6),
Polls.options(title: 'Ethiopia', value: option7),
Polls.options(title: 'Italy', value: option8),
],
question: Text('How old are you?'), // 问题
currentUser: this.user, // 当前用户
creatorID: this.creator, // 创建者ID
voteData: usersWhoVoted, // 投票数据
userChoice: usersWhoVoted[this.user], // 用户选择
onVoteBackgroundColor: Colors.blue, // 投票背景颜色
leadingBackgroundColor: Colors.blue, // 领先背景颜色
backgroundColor: Colors.white, // 背景颜色
onVote: (choice) { // 投票回调
print(choice);
setState(() {
this.usersWhoVoted[this.user] = choice;
});
if (choice == 1) {
setState(() {
option1 += 1.0;
});
}
if (choice == 2) {
setState(() {
option2 += 1.0;
});
}
if (choice == 3) {
setState(() {
option3 += 1.0;
});
}
if (choice == 4) {
setState(() {
option4 += 1.0;
});
}
if (choice == 5) {
setState(() {
option5 += 1.0;
});
}
if (choice == 6) {
setState(() {
option6 += 1.0;
});
}
if (choice == 7) {
setState(() {
option7 += 1.0;
});
}
if (choice == 8) {
setState(() {
option8 += 1.0;
});
}
},
),
),
);
}
}
更多关于Flutter投票管理插件polls的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter投票管理插件polls的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
polls
是一个用于 Flutter 的投票管理插件,它允许你轻松地在应用中创建和管理投票功能。使用这个插件,你可以创建投票、添加选项、让用户投票,并显示投票结果。
以下是使用 polls
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 polls
插件的依赖:
dependencies:
flutter:
sdk: flutter
polls: ^2.0.0 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 polls
插件:
import 'package:polls/polls.dart';
3. 创建投票
你可以使用 Polls
小部件来创建投票。以下是一个简单的示例:
class VotingPage extends StatefulWidget {
[@override](/user/override)
_VotingPageState createState() => _VotingPageState();
}
class _VotingPageState extends State<VotingPage> {
// 定义投票选项
Map<String, int> options = {
'Option 1': 0,
'Option 2': 0,
'Option 3': 0,
};
// 用户ID(用于防止重复投票)
String user = 'user1';
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Voting Page'),
),
body: Center(
child: Polls(
children: options.keys.map((option) {
return Polls.options(
title: option,
value: options[option]!,
);
}).toList(),
question: Text('What is your favorite option?'),
currentUser: user,
creatorID: 'admin',
voteData: options,
userChoice: options.keys.toList().indexOf('Option 1'), // 默认选择
onVote: (choice) {
setState(() {
// 更新投票结果
options[options.keys.toList()[choice]] =
options[options.keys.toList()[choice]]! + 1;
});
},
),
),
);
}
}