Skip to content

Commit 8fee5b6

Browse files
author
Miqueas
committed
Finished Dart example
1 parent c3e6556 commit 8fee5b6

File tree

1 file changed

+77
-5
lines changed

1 file changed

+77
-5
lines changed

Github.dart

Lines changed: 77 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import 'package:http/http.dart' as http;
12
import 'package:args/args.dart';
2-
import 'package:dio/dio.dart';
33
import 'dart:convert';
44
import 'dart:io';
55

@@ -26,7 +26,8 @@ class GthUser {
2626
GthUser(String username) : this._url = BASE_URL + username;
2727

2828
Future<void> init() async {
29-
var obj = await Dio().get(this._url).data;
29+
var res = await http.get(Uri.parse(this._url));
30+
var obj = jsonDecode(res.body);
3031

3132
this.name = obj["name"];
3233
this.bio = obj["bio"];
@@ -38,10 +39,81 @@ class GthUser {
3839
this.following = GthUserItem(obj["following"]);
3940
}
4041

41-
Future<void> fetch(String thing) async {}
42+
Future<void> fetch(String thing) async {
43+
var url = "${this._url}/$thing";
44+
var res = await http.get(Uri.parse(url));
45+
var arr = jsonDecode(res.body);
46+
47+
switch (thing) {
48+
case "repos":
49+
for (var v in arr) this.repos.arr.add(v["name"]);
50+
break;
51+
case "gists":
52+
for (var v in arr) this.gists.arr.add(v["description"]);
53+
break;
54+
case "followers":
55+
for (var v in arr) this.followers.arr.add(v["login"]);
56+
break;
57+
case "following":
58+
for (var v in arr) this.following.arr.add(v["login"]);
59+
break;
60+
default: break;
61+
}
62+
}
4263
}
4364

4465
void main(List<String> args) async {
45-
var user = GthUser(args[0]);
46-
await user.init();
66+
var parser = ArgParser();
67+
parser.addFlag("repos", abbr: "r", defaultsTo: false);
68+
parser.addFlag("gists", abbr: "g", defaultsTo: false);
69+
parser.addFlag("followers", abbr: "f", defaultsTo: false);
70+
parser.addFlag("following", abbr: "F", defaultsTo: false);
71+
72+
var opts = parser.parse(args);
73+
args = opts.rest;
74+
75+
if (args.isNotEmpty) {
76+
for (var arg in args) {
77+
var user = GthUser(arg);
78+
await user.init();
79+
80+
print("Name: ${user.name}");
81+
print("Bio: ${user.bio}");
82+
print("Link: ${user.link}");
83+
84+
print("Public repos: ${user.repos.count}");
85+
if (opts["repos"]) {
86+
await user.fetch("repos");
87+
88+
for (var i = 0; i < user.repos.arr.length; i++)
89+
print(" | ${i + 1}. ${user.repos.arr[i]}");
90+
}
91+
92+
print("Public gists: ${user.gists.count}");
93+
if (opts["gists"]) {
94+
await user.fetch("gists");
95+
96+
for (var i = 0; i < user.gists.arr.length; i++)
97+
print(" | ${i + 1}. ${user.gists.arr[i]}");
98+
}
99+
100+
print("Followers: ${user.followers.count}");
101+
if (opts["followers"]) {
102+
await user.fetch("followers");
103+
104+
for (var i = 0; i < user.followers.arr.length; i++)
105+
print(" | ${i + 1}. ${user.followers.arr[i]}");
106+
}
107+
108+
print("Following: ${user.following.count}");
109+
if (opts["following"]) {
110+
await user.fetch("following");
111+
112+
for (var i = 0; i < user.following.arr.length; i++)
113+
print(" | ${i + 1}. ${user.following.arr[i]}");
114+
}
115+
}
116+
} else {
117+
print("No arguments, nothing to do.");
118+
}
47119
}

0 commit comments

Comments
 (0)