import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:goatagent/screens/application.dart'; import 'package:http/http.dart' as http; class DashboardScreen extends StatefulWidget { const DashboardScreen({super.key}); @override State createState() => _DashboardScreenState(); } class _DashboardScreenState extends State { final client = http.Client(); final directoryEndpoint = Uri.parse('https://id.smartsheep.studio/.well-known'); List directory = List.empty(); @override void initState() { super.initState(); _pullDirectory(); } Future _pullDirectory() async { var response = await client.get(directoryEndpoint); if (response.statusCode == 200) { setState(() { directory = jsonDecode(utf8.decode(response.bodyBytes))["directory"]; }); } } @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: Padding( padding: const EdgeInsets.only(left: 20, right: 20, top: 30), child: GridView.count( crossAxisCount: 2, children: directory.map((element) { return Card( child: InkWell( onTap: () async { var link = element["link"]; Navigator.of(context, rootNavigator: true) .push(MaterialPageRoute( builder: (context) => ApplicationScreen( link: Uri.parse(link), title: element["name"], ), )); }, splashColor: Colors.indigo.withAlpha(30), child: Padding( padding: const EdgeInsets.all(10), child: Wrap( spacing: 8.0, children: [ Padding( padding: const EdgeInsets.only(left: 6, top: 2), child: Card( shape: const CircleBorder(), elevation: 0, color: Colors.indigo.withAlpha(70), child: const Padding( padding: EdgeInsets.all(16), child: Icon(Icons.apps), ), ), ), ListTile( title: Text(element['name']), subtitle: Padding( padding: const EdgeInsets.only(top: 2), child: Text(element['description'], style: Theme.of(context).textTheme.bodySmall), ), ), ], ), ), ), ); }).toList(), ), ), ), ); } }