Skip to content

Commit a9a5d37

Browse files
committed
NEW
1 parent 33f5705 commit a9a5d37

4 files changed

Lines changed: 349 additions & 0 deletions

File tree

4.98 MB
Loading
4.61 MB
Loading
3.62 MB
Loading
Lines changed: 349 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,349 @@
1+
import 'dart:typed_data';
2+
import 'dart:io';
3+
4+
import 'package:flutter/material.dart';
5+
import 'package:path_provider/path_provider.dart';
6+
7+
import 'package:flutter_wordcloud/flutter_wordcloud.dart';
8+
9+
// 键值对数据
10+
final jourData = {
11+
"JOURNAL OF CLEANER PRODUCTION": 47,
12+
"SUSTAINABILITY": 32,
13+
"SCIENCE OF THE TOTAL ENVIRONMENT": 28,
14+
"AMA-AGRICULTURAL MECHANIZATION IN ASIA AFRICA AND LATIN AMERICA": 19,
15+
"ENVIRONMENTAL SCIENCE AND POLLUTION RESEARCH": 17,
16+
"JOURNAL OF ENVIRONMENTAL MANAGEMENT": 16,
17+
"AGRICULTURE ECOSYSTEMS & ENVIRONMENT": 15,
18+
"AGRONOMY-BASEL": 12,
19+
"SCIENTIFIC REPORTS": 11,
20+
"AGRICULTURE-BASEL": 10,
21+
"ENVIRONMENTAL RESEARCH LETTERS": 10,
22+
"SOIL & TILLAGE RESEARCH": 8,
23+
"GLOBAL CHANGE BIOLOGY": 8,
24+
"AGRICULTURAL SYSTEMS": 7,
25+
"GEODERMA": 7,
26+
"FRONTIERS IN ENVIRONMENTAL SCIENCE": 7,
27+
"BIOGEOSCIENCES": 7,
28+
"ECOLOGICAL INDICATORS": 6,
29+
"INTERNATIONAL JOURNAL OF LIFE CYCLE ASSESSMENT": 6,
30+
"ATMOSPHERIC CHEMISTRY AND PHYSICS": 6,
31+
"FRONTIERS IN SUSTAINABLE FOOD SYSTEMS": 5,
32+
"ATMOSPHERIC ENVIRONMENT": 5,
33+
"SOIL BIOLOGY & BIOCHEMISTRY": 5,
34+
"MITIGATION AND ADAPTATION STRATEGIES FOR GLOBAL CHANGE": 5,
35+
"FIELD CROPS RESEARCH": 5,
36+
"SOIL SCIENCE SOCIETY OF AMERICA JOURNAL": 5,
37+
"NATURE COMMUNICATIONS": 5,
38+
"FRESENIUS ENVIRONMENTAL BULLETIN": 4,
39+
"ENVIRONMENT DEVELOPMENT AND SUSTAINABILITY": 4,
40+
"NUTRIENT CYCLING IN AGROECOSYSTEMS": 4,
41+
"SUSTAINABLE PRODUCTION AND CONSUMPTION": 4,
42+
"BIOMASS CONVERSION AND BIOREFINERY": 4,
43+
"RENEWABLE & SUSTAINABLE ENERGY REVIEWS": 4,
44+
"PLOS ONE": 4,
45+
"GLOBAL CHANGE BIOLOGY BIOENERGY": 4,
46+
"ENVIRONMENTAL POLLUTION": 4,
47+
"REGIONAL ENVIRONMENTAL CHANGE": 4,
48+
"FORESTS": 4,
49+
"LAND DEGRADATION & DEVELOPMENT": 4,
50+
"HELIYON": 3,
51+
"ARCHIVES OF AGRONOMY AND SOIL SCIENCE": 3,
52+
"ENVIRONMENTAL TECHNOLOGY & INNOVATION": 3,
53+
"ANTHROPOCENE": 3,
54+
"PLANT AND SOIL": 3,
55+
"JOURNAL OF SOILS AND SEDIMENTS": 3,
56+
"AGRICULTURAL WATER MANAGEMENT": 3,
57+
"JOURNAL OF THE SCIENCE OF FOOD AND AGRICULTURE": 3,
58+
"ENERGIES": 3,
59+
"PEDOSPHERE": 3,
60+
"SOIL USE AND MANAGEMENT": 3,
61+
"PLANTS-BASEL": 3,
62+
"CANADIAN JOURNAL OF SOIL SCIENCE": 2,
63+
"EARTHS FUTURE": 2,
64+
"EUROPEAN JOURNAL OF AGRONOMY": 2,
65+
"INDUSTRIAL CROPS AND PRODUCTS": 2,
66+
"RESOURCES CONSERVATION AND RECYCLING": 2,
67+
"COMMUNICATIONS IN SOIL SCIENCE AND PLANT ANALYSIS": 2,
68+
"GLOBAL ENVIRONMENTAL CHANGE-HUMAN AND POLICY DIMENSIONS": 2,
69+
"APPLIED SCIENCES-BASEL": 2,
70+
"APPLIED SOIL ECOLOGY": 2,
71+
"EUROPEAN JOURNAL OF SOIL SCIENCE": 2,
72+
"JOURNAL OF HYDROLOGY": 2,
73+
"CATENA": 2,
74+
"JOURNAL OF MATERIALS RESEARCH AND TECHNOLOGY-JMR&T": 2,
75+
"FOOD POLICY": 2,
76+
"JOURNAL OF FOREST ECONOMICS": 2,
77+
"ENVIRONMENT INTERNATIONAL": 2,
78+
"SOIL SCIENCE AND PLANT NUTRITION": 2,
79+
"DESALINATION AND WATER TREATMENT": 2,
80+
"ECOLOGICAL ECONOMICS": 2,
81+
"INTERNATIONAL JOURNAL OF ENVIRONMENTAL SCIENCE AND TECHNOLOGY": 2,
82+
"ENVIRONMENTAL SCIENCE & POLICY": 2,
83+
"ACS OMEGA": 2,
84+
"INTERNATIONAL JOURNAL OF ENVIRONMENTAL RESEARCH AND PUBLIC HEALTH": 2,
85+
"INTERNATIONAL JOURNAL OF AGRICULTURAL AND BIOLOGICAL ENGINEERING": 2,
86+
"FRONTIERS IN PLANT SCIENCE": 2,
87+
"PROCEEDINGS OF THE NATIONAL ACADEMY OF SCIENCES OF THE UNITED STATES OF": 2,
88+
"INTERNATIONAL SOIL AND WATER CONSERVATION RESEARCH": 2,
89+
"RANGELAND JOURNAL": 2,
90+
"SCIENCE": 2,
91+
"GLOBAL BIOGEOCHEMICAL CYCLES": 2,
92+
"ENVIRONMENTAL DEVELOPMENT": 2,
93+
"ANIMAL PRODUCTION SCIENCE": 2,
94+
"FOREST ECOSYSTEMS": 2,
95+
"FOREST POLICY AND ECONOMICS": 2,
96+
"IFOREST-BIOGEOSCIENCES AND FORESTRY": 2,
97+
"AGRONOMY FOR SUSTAINABLE DEVELOPMENT": 2,
98+
"FOREST ECOLOGY AND MANAGEMENT": 2,
99+
"BIOENERGY RESEARCH": 2,
100+
"JOURNAL OF ENVIRONMENTAL QUALITY": 2,
101+
"INTERNATIONAL JOURNAL OF GREENHOUSE GAS CONTROL": 2,
102+
"JOURNAL OF GEOPHYSICAL RESEARCH-BIOGEOSCIENCES": 2,
103+
"MATERIALS": 1,
104+
"IEEE JOURNAL OF SELECTED TOPICS IN APPLIED EARTH OBSERVATIONS AND REMOTE": 1,
105+
"PADDY AND WATER ENVIRONMENT": 1,
106+
"FRONTIERS IN MICROBIOLOGY": 1,
107+
"ENERGY SOURCES PART A-RECOVERY UTILIZATION AND ENVIRONMENTAL EFFECTS": 1,
108+
"PROCESSES": 1,
109+
"SCIENCE OF ADVANCED MATERIALS": 1,
110+
"SUSTAINABLE ENERGY TECHNOLOGIES AND ASSESSMENTS": 1
111+
};
112+
final subject = {
113+
"Environmental Sciences": 313,
114+
"Green & Sustainable Science & Technology": 104,
115+
"Soil Science": 70,
116+
"Engineering, Environmental": 67,
117+
"Agronomy": 60,
118+
"Environmental Studies": 50,
119+
"Ecology": 45,
120+
"Energy & Fuels": 41,
121+
"Multidisciplinary Sciences": 35,
122+
"Agriculture, Multidisciplinary": 34,
123+
"Meteorology & Atmospheric Sciences": 33,
124+
"Geosciences, Multidisciplinary": 32,
125+
"Plant Sciences": 29,
126+
"Agricultural Engineering": 28,
127+
"Forestry": 21,
128+
"Food Science & Technology": 19,
129+
"Biodiversity Conservation": 18,
130+
"Water Resources": 18,
131+
"Engineering, Chemical": 14,
132+
"Economics": 12,
133+
"Biotechnology & Applied Microbiology": 11,
134+
"Materials Science, Multidisciplinary": 11,
135+
"Chemistry, Multidisciplinary": 9,
136+
"Chemistry, Analytical": 8,
137+
"Chemistry, Applied": 7,
138+
"Agricultural Economics & Policy": 6,
139+
"Chemistry, Physical": 6,
140+
"Public, Environmental & Occupational Health": 5,
141+
"Engineering, Electrical & Electronic": 5,
142+
"Geography, Physical": 5,
143+
"Physics, Applied": 5,
144+
"Engineering, Civil": 4,
145+
"Agriculture, Dairy & Animal Science": 4,
146+
"Metallurgy & Metallurgical Engineering": 4,
147+
"Marine & Freshwater Biology": 3,
148+
"Thermodynamics": 3,
149+
"Remote Sensing": 3,
150+
"Imaging Science & Photographic Technology": 3,
151+
"Nanoscience & Nanotechnology": 3,
152+
"Nutrition & Dietetics": 3,
153+
"Biochemistry & Molecular Biology": 2,
154+
"Engineering, Multidisciplinary": 2,
155+
"Construction & Building Technology": 2,
156+
"Instruments & Instrumentation": 2,
157+
"Biology": 2,
158+
"Fisheries": 2,
159+
"Mathematics, Interdisciplinary Applications": 2,
160+
"Geography": 2,
161+
"Polymer Science": 2,
162+
"Mining & Mineral Processing": 2,
163+
"Toxicology": 2,
164+
"Mathematical & Computational Biology": 1,
165+
"Biochemical Research Methods": 1,
166+
"Limnology": 1,
167+
"Spectroscopy": 1,
168+
"Microbiology": 1,
169+
"Operations Research & Management Science": 1,
170+
"Physics, Condensed Matter": 1,
171+
"Physics, Mathematical": 1,
172+
"Logic": 1,
173+
"Entomology": 1,
174+
"Astronomy & Astrophysics": 1,
175+
"Materials Science, Ceramics": 1,
176+
"Mathematics, Applied": 1,
177+
"Chemistry, Inorganic & Nuclear": 1,
178+
"Biophysics": 1,
179+
"Electrochemistry": 1,
180+
"Computer Science, Artificial Intelligence": 1,
181+
"Computer Science, Interdisciplinary Applications": 1,
182+
"Engineering, Mechanical": 1,
183+
"Mechanics": 1,
184+
"Automation & Control Systems": 1,
185+
"Veterinary Sciences": 1,
186+
"Computer Science, Information Systems": 1,
187+
"Telecommunications": 1,
188+
"Management": 1,
189+
"Materials Science, Composites": 1,
190+
"Nuclear Science & Technology": 1,
191+
"Computer Science, Theory & Methods": 1,
192+
"Chemistry, Organic": 1
193+
};
194+
final research = {
195+
"Agriculture": 186,
196+
"Science & Technology - Other Topics": 141,
197+
"Engineering": 90,
198+
"Environmental Sciences": 49,
199+
"Energy & Fuels": 40,
200+
"Geology": 31,
201+
"Chemistry": 30,
202+
"Plant Sciences": 29,
203+
"Meteorology & Atmospheric Sciences": 29,
204+
"Forestry": 21,
205+
"Food Science & Technology": 19,
206+
"Biodiversity & Conservation": 18,
207+
"Water Resources": 18,
208+
"Materials Science": 13,
209+
"Business & Economics": 12,
210+
"Biotechnology & Applied Microbiology": 11,
211+
"Physical Geography": 5,
212+
"Physics": 5,
213+
"Public, Environmental & Occupational": 4,
214+
"Metallurgy & Metallurgical Engineering": 4,
215+
"Meteorology & Atmospheric": 4,
216+
"Computer Science": 3,
217+
"Environmental": 3,
218+
"Remote Sensing": 3,
219+
"Marine & Freshwater Biology": 3,
220+
"Thermodynamics": 3,
221+
"Mathematics": 3,
222+
"Biochemistry & Molecular Biology": 3,
223+
"Fisheries": 2,
224+
"Imaging Science &": 2,
225+
"Construction & Building Technology": 2,
226+
"Toxicology": 2,
227+
"Polymer Science": 2,
228+
"Geography": 2,
229+
"Nutrition": 2,
230+
"Instruments & Instrumentation": 2,
231+
"Life Sciences & Biomedicine - Other Topics": 2,
232+
"Environmental Sciences &": 2,
233+
"Mining & Mineral Processing": 2,
234+
"Imaging": 1,
235+
"Veterinary Sciences": 1,
236+
"Spectroscopy": 1,
237+
"Public, Environmental & Occupational Health": 1,
238+
"Nutrition & Dietetics": 1,
239+
"Science & Technology -": 1,
240+
"Operations Research & Management Science": 1,
241+
"Entomology": 1,
242+
"Astronomy & Astrophysics": 1,
243+
"Nuclear Science & Technology": 1,
244+
"Biophysics": 1,
245+
"Mechanics": 1,
246+
"Automation & Control Systems": 1,
247+
"Telecommunications": 1,
248+
"Microbiology": 1,
249+
"Mathematical & Computational Biology": 1
250+
};
251+
252+
// 简单的保持功能
253+
Future<File> saveUint8ListToDesktop(Uint8List data) async {
254+
final String? desktopPath = await getDownloadsDirectory()
255+
.then((dir) => dir?.parent.path)
256+
.then((parent) => '$parent/Desktop');
257+
258+
final String desktop = desktopPath ??
259+
r'C:\Users\' + Platform.environment['USERNAME']! + r'\Desktop';
260+
261+
final Directory desktopDir = Directory(desktop);
262+
if (!await desktopDir.exists()) {
263+
await desktopDir.create(recursive: true);
264+
}
265+
266+
final String fullPath =
267+
"$desktop/${DateTime.now().toUtc().millisecondsSinceEpoch ~/ 1000}.png";
268+
final File file = File(fullPath);
269+
await file.writeAsBytes(data);
270+
271+
debugPrint('已保存到桌面:$fullPath');
272+
return file;
273+
}
274+
275+
void main() {
276+
runApp(const DemoApp());
277+
}
278+
279+
class DemoApp extends StatelessWidget {
280+
const DemoApp({super.key});
281+
282+
@override
283+
Widget build(BuildContext context) {
284+
return MaterialApp(
285+
home: Scaffold(
286+
appBar: AppBar(title: const Text("WordCloud 形状演示")),
287+
body: SingleChildScrollView(
288+
child: Padding(
289+
padding: const EdgeInsets.all(20.0),
290+
child: Column(
291+
children: [
292+
_buildExample(jourData, '期刊统计', GradientTheme.coolGray,
293+
ColorMapTheme.mono, minFontSize: 10),
294+
_buildExample(subject, '学科统计', GradientTheme.sunset,
295+
ColorMapTheme.turboColors, minFontSize: 16),
296+
_buildExample(research, '研究领域统计', GradientTheme.greenCyan,
297+
ColorMapTheme.scientificColors, minFontSize: 20,),
298+
],
299+
),
300+
),
301+
),
302+
),
303+
);
304+
}
305+
306+
Future<void> savePng(WordCloudLogic wc) async {
307+
final data = await wc.exportToPngBytes(ratio: 3);
308+
await saveUint8ListToDesktop(data);
309+
}
310+
311+
Widget _buildExample(Map<String, int> datas, String title, Gradient gradient,
312+
List<Color> colorMap,
313+
{Offset? wordSpacing, double? minFontSize, double? maxFontSize}) {
314+
final wc = WordCloudLogic(
315+
datas,
316+
width: 1600,
317+
height: 1000,
318+
minFontSize: minFontSize ?? 10,
319+
maxFontSize: maxFontSize,
320+
backgroundGradient: gradient,
321+
coloMap: colorMap,
322+
wordSpacing: wordSpacing,
323+
);
324+
325+
return Column(
326+
children: [
327+
Row(
328+
children: [
329+
Text(
330+
title,
331+
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
332+
),
333+
IconButton(
334+
onPressed: () async => savePng(wc),
335+
icon: const Icon(Icons.save))
336+
],
337+
),
338+
const SizedBox(height: 15),
339+
Container(
340+
decoration: BoxDecoration(
341+
border: Border.all(color: Colors.grey.shade300, width: 2),
342+
borderRadius: BorderRadius.circular(8),
343+
),
344+
child: WordCloudView(cloud: wc),
345+
),
346+
],
347+
);
348+
}
349+
}

0 commit comments

Comments
 (0)