Raid_Manager/app/lib/raid_page.dart

61 lines
1.8 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:raid_manager/raid_info_page.dart';
import 'package:raid_manager/types/md_raid_system.dart';
import 'package:http/http.dart' as http;
class RaidPage extends StatefulWidget {
const RaidPage({Key? key}) : super(key: key);
@override
State<RaidPage> createState() => _RaidPageState();
}
class _RaidPageState extends State<RaidPage> {
Future<MdRaidSystem> fetchRaids() async {
final resp =
await http.get(Uri.parse('http://127.0.0.1:8000/api/raiddevices'));
return MdRaidSystem.fromJson(jsonDecode(resp.body));
}
late final myFetch = fetchRaids();
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: myFetch,
builder: (context, snapshot) {
if (snapshot.hasData) {
final data = snapshot.data!;
return ListView.builder(
itemCount: data.raids.length,
itemBuilder: (context, idx) {
return ListTile(
title: Text(
data.raids[idx].name,
style: Theme.of(context).textTheme.headlineMedium,
),
subtitle: Text(
"${data.raids[idx].level} - ${data.raids[idx].faulty ? "errored" : "active sync"}",
style: Theme.of(context).textTheme.labelMedium,
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => RaidInfoPage(raid: data.raids[idx])));
},
);
},
);
} else if (snapshot.hasError) {
return const Text("errored");
} else {
return const Text("loading...");
}
},
);
}
}