@@ -3,67 +3,87 @@ import 'dart:convert';
3
3
import 'package:http/http.dart' as http;
4
4
import 'package:riverpod/riverpod.dart' ;
5
5
6
+ import '../services/logs.dart' ;
7
+
6
8
class Flutter {
7
9
/// API data of flutter widgets, properties, methods, etc.
8
- static StateProvider <List <Map <String , dynamic >>?> apiData = StateProvider <List <Map <String , dynamic >>?>((_) => null );
10
+ static StateProvider <List <Map <String , dynamic >>?> apiData =
11
+ StateProvider <List <Map <String , dynamic >>?>((_) => null );
9
12
10
13
/// Pub API data of flutter and dart packages.
11
- static StateProvider <Map <String , dynamic >?> pubData = StateProvider <Map <String , dynamic >?>((_) => null );
14
+ static StateProvider <Map <String , dynamic >?> pubData =
15
+ StateProvider <Map <String , dynamic >?>((_) => null );
12
16
13
17
/// This function will fetch the data from the API
14
18
static Future <void > getData (ProviderContainer ref) async {
15
19
try {
16
20
// make the request
17
- http.Response response = await http.get (Uri .parse ('https://api.flutter.dev/flutter/index.json' ));
21
+ http.Response response = await http
22
+ .get (Uri .parse ('https://api.flutter.dev/flutter/index.json' ));
18
23
// conver the response to list
19
- List <Map <String , dynamic >> data = json.decode (response.body).cast <Map <String , dynamic >>();
24
+ List <Map <String , dynamic >> data =
25
+ json.decode (response.body).cast <Map <String , dynamic >>();
20
26
ref.read (apiData.notifier).state = data;
21
27
} catch (e) {
22
28
print (e);
23
29
}
24
30
}
25
31
26
32
/// This function will return the Widget data.
27
- static Future <Map <String , dynamic >?> getWidget (List <String >? args, ProviderContainer ref) async {
33
+ static Future <Map <String , dynamic >?> getWidget (
34
+ List <String >? args, ProviderContainer ref) async {
28
35
if (args == null || args.isEmpty) return null ;
29
36
List <Map <String , dynamic >>? data = ref.read (Flutter .apiData);
30
37
for (Map <String , dynamic > widgetData in data! ) {
31
38
if (widgetData['name' ].toLowerCase () == args[0 ].toLowerCase () &&
32
39
(widgetData['enclosedBy' ]['name' ].toLowerCase () == 'widgets' ||
33
- widgetData['enclosedBy' ]['name' ].toString ().toLowerCase () == args[0 ].toLowerCase ())) {
40
+ widgetData['enclosedBy' ]['name' ].toString ().toLowerCase () ==
41
+ args[0 ].toLowerCase ())) {
34
42
return widgetData;
35
43
}
36
44
}
37
45
return null ;
38
46
}
39
47
40
48
/// This function will return the Widget's property.
41
- static Future <Map <String , dynamic >?> getWidgetProperty (String widget, String property, ProviderContainer ref) async {
49
+ static Future <Map <String , dynamic >?> getWidgetProperty (
50
+ String widget, String property, ProviderContainer ref) async {
42
51
List <Map <String , dynamic >>? data = ref.read (Flutter .apiData);
43
52
for (Map <String , dynamic > propertyData in data! ) {
44
53
if (propertyData['name' ].toLowerCase () == property &&
45
- propertyData['qualifiedName' ].toString ().toLowerCase ().contains (widget.toLowerCase ())) {
54
+ propertyData['qualifiedName' ]
55
+ .toString ()
56
+ .toLowerCase ()
57
+ .contains (widget.toLowerCase ())) {
46
58
return propertyData;
47
59
}
48
60
}
49
61
return null ;
50
62
}
51
63
52
64
/// This function will return the list of properties of the widget.
53
- static Future <List <Map <String , dynamic >>?> getAllWidgetProperties (String widget, ProviderContainer ref) async {
65
+ static Future <List <Map <String , dynamic >>> getAllWidgetProperties (
66
+ String widget, ProviderContainer ref) async {
54
67
List <Map <String , dynamic >>? data = ref.read (Flutter .apiData);
55
68
List <Map <String , dynamic >>? properties = < Map <String , dynamic >> [];
56
69
for (dynamic propertyData in data! ) {
57
- if (propertyData['qualifiedName' ].toString ().toLowerCase ().contains (widget.toLowerCase ()) &&
58
- propertyData['enclosedBy' ]['name' ].toString ().toLowerCase () == widget.toLowerCase ()) {
70
+ if (propertyData['qualifiedName' ]
71
+ .toString ()
72
+ .toLowerCase ()
73
+ .contains (widget.toLowerCase ()) &&
74
+ propertyData['enclosedBy' ] != null &&
75
+ propertyData['enclosedBy' ]['name' ] != null &&
76
+ propertyData['enclosedBy' ]['name' ].toString ().toLowerCase () ==
77
+ widget.toLowerCase ()) {
59
78
properties.add (propertyData);
60
79
}
61
80
}
62
- return properties.isEmpty ? null : properties;
81
+ return properties.isEmpty ? < Map < String , dynamic > > [] : properties;
63
82
}
64
83
65
84
/// This function will return the similar widgets.
66
- static Future <List <Map <String , dynamic >>?> getSimilarWidgets (List <String > args, ProviderContainer ref) async {
85
+ static Future <List <Map <String , dynamic >>?> getSimilarWidgets (
86
+ List <String > args, ProviderContainer ref) async {
67
87
List <Map <String , dynamic >>? data = ref.read (Flutter .apiData);
68
88
List <Map <String , dynamic >> similarWidgets = < Map <String , dynamic >> [];
69
89
for (dynamic widgetData in data! ) {
@@ -76,26 +96,32 @@ class Flutter {
76
96
}
77
97
78
98
/// This function will return the pub package.
79
- static Future <Map <String , dynamic >?> getPubPackage (String packageName, ProviderContainer ref) async {
99
+ static Future <Map <String , dynamic >?> getPubPackage (
100
+ String packageName, ProviderContainer ref) async {
80
101
try {
81
102
// make the request
82
- http.Response response = await http.get (Uri .parse ('https://pub.dev/api/packages/$packageName ' ));
103
+ http.Response response = await http
104
+ .get (Uri .parse ('https://pub.dev/api/packages/$packageName ' ));
83
105
// conver the response to list
84
106
Map <String , dynamic > data = json.decode (response.body);
85
107
return data;
86
108
} catch (e) {
87
- print (e);
109
+ BotLogger .logln (LogType .error, e.toString ());
110
+ return null ;
88
111
}
89
112
}
90
113
91
114
/// This function will return the all pub packages.
92
- static Future <List <Map <String , dynamic >>?> getAllPubPackages (String package, ProviderContainer ref) async {
115
+ static Future <List <Map <String , dynamic >>?> getAllPubPackages (
116
+ String package, ProviderContainer ref) async {
93
117
try {
94
118
// make the request
95
- http.Response response = await http.get (Uri .parse ('https://pub.dev/api/search?q=$package ' ));
119
+ http.Response response =
120
+ await http.get (Uri .parse ('https://pub.dev/api/search?q=$package ' ));
96
121
// conver the response to list
97
122
Map <String , dynamic > data = json.decode (response.body);
98
- List <Map <String , dynamic >> pubList = await data['packages' ].cast <Map <String , dynamic >>();
123
+ List <Map <String , dynamic >> pubList =
124
+ await data['packages' ].cast <Map <String , dynamic >>();
99
125
return pubList.isEmpty ? null : pubList;
100
126
} catch (e) {
101
127
print (e);
@@ -104,14 +130,18 @@ class Flutter {
104
130
}
105
131
106
132
/// This function will return the pub package's API docs.
107
- static Future <List <Map <String , dynamic >>?> getPubPackageDocs (String packageName, ProviderContainer ref) async {
133
+ static Future <List <Map <String , dynamic >>?> getPubPackageDocs (
134
+ String packageName, ProviderContainer ref) async {
108
135
try {
109
136
// make the request
110
- http.Response response =
111
- await http.get (Uri .parse ('https://pub.dev/documentation/$packageName /latest/index.json' ));
112
- if (response.body.contains ('404 Not Found' )) return < Map <String , dynamic >> [];
137
+ http.Response response = await http.get (Uri .parse (
138
+ 'https://pub.dev/documentation/$packageName /latest/index.json' ));
139
+ if (response.body.contains ('404 Not Found' )) {
140
+ return < Map <String , dynamic >> [];
141
+ }
113
142
// conver the response to list
114
- List <Map <String , dynamic >> data = await json.decode (response.body).cast <Map <String , dynamic >>();
143
+ List <Map <String , dynamic >> data =
144
+ await json.decode (response.body).cast <Map <String , dynamic >>();
115
145
return data.isEmpty ? null : data;
116
146
} catch (e) {
117
147
print (e);
@@ -120,11 +150,12 @@ class Flutter {
120
150
}
121
151
122
152
/// This package will return the pub package's API data.
123
- static Future <Map <String , dynamic >?> getPubPackageDocsData (String packageName, ProviderContainer ref) async {
153
+ static Future <Map <String , dynamic >?> getPubPackageDocsData (
154
+ String packageName, ProviderContainer ref) async {
124
155
try {
125
156
// make the request
126
- http.Response response =
127
- await http. get ( Uri . parse ( 'https://pub.dev/documentation/$packageName /latest/index.json' ));
157
+ http.Response response = await http. get ( Uri . parse (
158
+ 'https://pub.dev/documentation/$packageName /latest/index.json' ));
128
159
// conver the response to list
129
160
Map <String , dynamic > data = json.decode (response.body);
130
161
return data.isEmpty ? null : data;
@@ -135,14 +166,19 @@ class Flutter {
135
166
}
136
167
137
168
/// This function returns the author name.
138
- static Future <String ?> getAuthorName (String package, ProviderContainer ref) async {
169
+ static Future <String ?> getAuthorName (
170
+ String package, ProviderContainer ref) async {
139
171
Map <String , dynamic >? packageData = await getPubPackage (package, ref);
140
172
String ? author = packageData! ['latest' ]['pubspec' ]['author' ];
141
173
if (author == null ) {
142
174
if (packageData['latest' ]['pubspec' ]['repository' ] == null ) {
143
- return packageData['latest' ]['pubspec' ]['homepage' ].toString ().split ('/' )[3 ];
175
+ return packageData['latest' ]['pubspec' ]['homepage' ]
176
+ .toString ()
177
+ .split ('/' )[3 ];
144
178
} else {
145
- return packageData['latest' ]['pubspec' ]['repository' ].toString ().split ('/' )[3 ];
179
+ return packageData['latest' ]['pubspec' ]['repository' ]
180
+ .toString ()
181
+ .split ('/' )[3 ];
146
182
}
147
183
}
148
184
return author;
0 commit comments