Flutter词云生成插件word_cloud的使用
Flutter词云生成插件 word_cloud
的使用
目录
WordCloudData
为了在Flutter中使用词云组件,首先需要将数据设置到WordCloudData
对象中。
WordCloudData mydata = WordCloudData(data: data_list);
参数data
需要一个包含键为word
和value
的Map列表。例如:
List<Map> data_list= [
{'word': 'Apple','value': 100},
{'word': 'Samsung','value': 60},
];
另一种添加数据的方法是使用实例方法addData
:
mydata.addData(String word, double value);
WordCloudView
设置了数据之后,可以使用WordCloudView
组件来展示词云:
WordCloudView(
data: mydata,
mapwidth: 500,
mapheight: 500,
)
这是一个基本用法示例。以下是基于示例数据集的结果:
更多属性
mapcolor
通过mapcolor
属性可以设置词云背景颜色:
WordCloudView(
data: mydata,
mapcolor: Color.fromARGB(255, 174, 183, 235),
mapwidth: 500,
mapheight: 500,
)
colorlist
通过colorlist
参数可以改变单词的颜色。需要输入Color类型的列表,词云会选择字体颜色随机显示:
WordCloudView(
data: mydata,
mapcolor: Color.fromARGB(255, 174, 183, 235),
mapwidth: 500,
mapheight: 500,
colorlist: [Colors.black, Colors.redAccent, Colors.indigoAccent],
)
shape
可以通过shape
参数决定词云的整体形状。目前支持圆形和椭圆两种形状:
WordCloudView(
data: mydata,
mapcolor: Color.fromARGB(255, 174, 183, 235),
mapwidth: 500,
mapheight: 500,
shape: WordCloudCircle(radius: 250),
)
WordCloudTap
WordCloudTap
和WordCloudTapView
使得词云中的单词可点击。首先定义WordCloudTap
并设置想要点击的单词及其对应的函数:
WordCloudTap wordtaps = WordCloudTap();
wordtaps.addWordtap(String word, Function function);
示例代码如下:
WordCloudTap wordtaps = WordCloudTap();
int count = 0;
String wordstring = '';
// 设置WordCloudTap
for (int i = 0; i < data_list.length; i++) {
void tap() {
setState(() {
count += 1;
wordstring = data_list[i]['word'];
});
}
wordtaps.addWordtap(data_list[i]['word'], tap);
}
WordCloudTapView
完成WordCloudTap
的设置后,可以将其作为WordCloudTapView
的一个因子使用。与WordCloudView
不同的是,WordCloudTapView
需要一个额外的参数wordtap
,用于传入WordCloudTap
对象。
WordCloudTapView(
data: wcdata,
wordtap: wordtaps,
mapcolor: Color.fromARGB(255, 174, 183, 235),
mapwidth: 500,
mapheight: 500,
colorlist: [Colors.black, Colors.redAccent, Colors.indigoAccent],
)
示例项目
下面是一个完整的示例项目,展示了如何使用word_cloud
插件生成词云,并使其可点击:
import 'package:flutter/material.dart';
import 'package:word_cloud/word_cloud_data.dart';
import 'package:word_cloud/word_cloud_shape.dart';
import 'package:word_cloud/word_cloud_tap.dart';
import 'package:word_cloud/word_cloud_tap_view.dart';
import 'package:word_cloud/word_cloud_view.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Word Cloud Example Page',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Word Cloud Example Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 示例数据列表
List<Map> word_list = [
// 数据略...
];
int count = 0;
String wordstring = '';
[@override](/user/override)
Widget build(BuildContext context) {
WordCloudData wcdata = WordCloudData(data: word_list);
WordCloudTap wordtaps = WordCloudTap();
// 设置WordCloudTap
for (int i = 0; i < word_list.length; i++) {
void tap() {
setState(() {
count += 1;
wordstring = word_list[i]['word'];
});
}
wordtaps.addWordtap(word_list[i]['word'], tap);
}
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Clicked Word : ${wordstring}', style: TextStyle(fontSize: 20)),
Text('Clicked Count : ${count}', style: TextStyle(fontSize: 20)),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
WordCloudTapView(
data: wcdata,
wordtap: wordtaps,
mapcolor: Color.fromARGB(255, 174, 183, 235),
mapwidth: 500,
mapheight: 500,
fontWeight: FontWeight.bold,
shape: WordCloudCircle(radius: 250),
colorlist: [Colors.black, Colors.redAccent, Colors.indigoAccent],
),
SizedBox(height: 15, width: 30),
WordCloudView(
data: wcdata,
mapcolor: Color.fromARGB(255, 174, 183, 235),
mapwidth: 500,
mapheight: 500,
fontWeight: FontWeight.bold,
colorlist: [Colors.black, Colors.redAccent, Colors.indigoAccent],
),
],
),
],
),
),
);
}
}
更多关于Flutter词云生成插件word_cloud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter词云生成插件word_cloud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用word_cloud
插件生成词云的代码案例。这个插件允许你根据提供的词频数据生成一个动态的词云图。
首先,确保你的Flutter项目中已经添加了word_cloud
插件。你可以在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
word_cloud: ^x.y.z # 请将x.y.z替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中创建一个词云。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:word_cloud/word_cloud.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Word Cloud Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<WordPair> words = List<WordPair>.generate(100, (i) => WordPair.random());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Word Cloud'),
),
body: Center(
child: WordCloud(
words: words.map((pair) => WordCloudData(
text: pair.asPascalCase,
size: 10 + (pair.hashCode % 100).toDouble(),
)).toList(),
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 0.6,
backgroundColor: Colors.grey[900],
textStyle: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
padding: 2.0,
rotation: () => (Math.random() * 2 * 3.141592653589793).toDouble(),
),
),
);
}
}
class WordPair {
final String first;
final String second;
WordPair(this.first, this.second);
String get asPascalCase {
return '${first.capitalize()}${second.capitalize()}';
}
@override
int get hashCode => first.hashCode ^ second.hashCode;
static WordPair random() {
final words = List<String>.generate(
1000,
(i) => 'Word${i % 100}',
);
final random = Random();
return WordPair(
words[random.nextInt(words.length)],
words[random.nextInt(words.length)],
);
}
}
解释
-
依赖添加:在
pubspec.yaml
中添加word_cloud
依赖。 -
数据生成:我们创建了一个
WordPair
类来生成随机的单词对,并且提供了一个hashCode
方法来生成不同的哈希值,用于后续的尺寸计算。 -
UI构建:在
MyHomePage
的build
方法中,我们创建了一个WordCloud
组件。words
:一个包含WordCloudData
对象的列表,每个对象代表一个单词及其大小。width
和height
:词云的宽度和高度。backgroundColor
:词云的背景颜色。textStyle
:词云中文字的样式。padding
:词云中单词之间的间距。rotation
:每个单词的旋转角度,这里使用了随机数来生成不同的角度。
-
运行应用:运行你的Flutter应用,你应该能看到一个根据随机单词对生成的词云。
希望这个示例能帮助你在Flutter项目中成功使用word_cloud
插件!