Flutter插件hemicycle的使用_Flutter插件旨在绘制一个半圆形的议会座位布局
Flutter插件hemicycle的使用_Flutter插件旨在绘制一个半圆形的议会座位布局
该Flutter插件旨在绘制一个半圆形的议会座位布局。用户可以根据需要设置座位的数量,默认为577个座位,这是法国国民议会的座位数。
特征
- 可以更改座位数量。
- 可以调整圆弧的角度(默认为170度)。
- 可以通过特定类型的输入来显示个人投票或部门代表。
使用方法
方法一:绘制部门代表
创建一个包含所有要绘制的部门的List<GroupSectors>
。
List<GroupSectors> hemicycleTest = [
GroupSectors(30, customVoteFor, description: "BEFORE"),
GroupSectors(50, customVoteAgainst, description: "NEW"),
GroupSectors(497, customVoteAbstention, description: "AFTER")
];
DrawHemicycle(
30 + 50 + 497,
nbRows: ((30 + 50 + 497) / 50).ceil(),
groupSectors: hemicycleTest,
withLegend: true,
withTitle: true,
title: "TEST",
);
方法二:绘制个人投票
创建一个包含所有要绘制的个人投票的List<IndividualVotes>
。
List<IndividualVotes> votesTest = [
IndividualVotes(33, voteResult: true, groupPairing: "AAA"),
IndividualVotes(34, voteResult: true, groupPairing: "AAA"),
IndividualVotes(35, voteResult: false, groupPairing: "AAA"),
IndividualVotes(36, voteResult: true, groupPairing: "AAA"),
IndividualVotes(37, voteResult: false, groupPairing: "AAA"),
IndividualVotes(88, voteResult: true, groupPairing: "MMM"),
IndividualVotes(89, voteResult: false, groupPairing: "MMM"),
IndividualVotes(90, voteResult: false, groupPairing: "MMM"),
IndividualVotes(122, voteResult: false, groupPairing: "ZZZ"),
IndividualVotes(123, voteResult: false, groupPairing: "ZZZ"),
IndividualVotes(124, voteResult: true, groupPairing: "ZZZ"),
IndividualVotes(126, voteResult: true, groupPairing: "ZZZ"),
];
DrawHemicycle(200,
nbRows: 8,
individualVotes: votesTest,
withLegend: true,
);
然后使用DrawHemicycle
组件来获取半圆形的议会座位布局。
完整示例代码
import 'package:flutter/material.dart';
import 'package:hemicycle/hemicycle.dart';
import 'package:hemicycle/attic/colors.dart';
void main() => runApp(HemicycleExample());
class HemicycleExample extends StatefulWidget {
[@override](/user/override)
_HemicycleExampleState createState() => _HemicycleExampleState();
}
class _HemicycleExampleState extends State<HemicycleExample> {
int numberTest = 0;
int resteTest = 0;
bool datasUpdated = false;
List<GroupSectors> hemicycleTest = [];
List<IndividualVotes> votesTest = [];
[@override](/user/override)
void initState() {
numberTest = 1;
resteTest = 577 - numberTest - 1;
hemicycleTest = [
GroupSectors(numberTest, hemicyleVoteFor, description: "BEFORE"),
GroupSectors(1, hemicyleVoteAgainst, description: "NEW"),
GroupSectors(resteTest, hemicyleVoteAbstention, description: "AFTER")
];
votesTest = [
IndividualVotes(33, voteResult: true, groupPairing: "AAA"),
IndividualVotes(34, voteResult: true, groupPairing: "AAA"),
IndividualVotes(35, voteResult: false, groupPairing: "AAA"),
IndividualVotes(36, voteResult: true, groupPairing: "AAA"),
IndividualVotes(37, voteResult: false, groupPairing: "AAA"),
IndividualVotes(88, voteResult: true, groupPairing: "MMM"),
IndividualVotes(89, voteResult: false, groupPairing: "MMM"),
IndividualVotes(90, voteResult: false, groupPairing: "MMM"),
IndividualVotes(122, voteResult: false, groupPairing: "ZZZ"),
IndividualVotes(123, voteResult: false, groupPairing: "ZZZ"),
IndividualVotes(124, voteResult: true, groupPairing: "ZZZ"),
IndividualVotes(126, voteResult: true, groupPairing: "ZZZ"),
];
updateAndRefresh();
super.initState();
}
void updateAndRefresh() async {
Future.delayed(Duration(milliseconds: 100), (() {
setState(() {
datasUpdated = true;
});
}));
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Column(children: <Widget>[
if (datasUpdated)
DrawHemicycle(200,
nbRows: 8, individualVotes: votesTest, withLegend: true),
if (datasUpdated)
DrawHemicycle(
resteTest + numberTest + 1,
nbRows: ((resteTest + numberTest + 1) / 50).ceil(),
groupSectors: hemicycleTest,
withLegend: true,
withTitle: true,
title: "TEST",
),
TextButton(
onPressed: () {
setState(() {
numberTest += 1;
datasUpdated = false;
});
updateAndRefresh();
},
child: Text(("PLUS UN... (" + numberTest.toString() + ")"))),
]),
);
}
}
更多关于Flutter插件hemicycle的使用_Flutter插件旨在绘制一个半圆形的议会座位布局的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复