add providers per page
show only 10 packages new page for all packages
This commit is contained in:
		@@ -5,6 +5,7 @@ import 'package:aurcache/providers/build_provider.dart';
 | 
			
		||||
import 'package:aurcache/utils/time_formatter.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:go_router/go_router.dart';
 | 
			
		||||
import 'package:provider/provider.dart';
 | 
			
		||||
 | 
			
		||||
import '../components/dashboard/your_packages.dart';
 | 
			
		||||
 | 
			
		||||
@@ -21,54 +22,59 @@ class _BuildScreenState extends State<BuildScreen> {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      body: APIBuilder<BuildProvider, Build, BuildDTO>(
 | 
			
		||||
          key: const Key("Build on seperate page"),
 | 
			
		||||
          dto: BuildDTO(buildID: widget.buildID),
 | 
			
		||||
          interval: const Duration(seconds: 10),
 | 
			
		||||
          onLoad: () => const Text("loading"),
 | 
			
		||||
          onData: (buildData) {
 | 
			
		||||
            final start_time = DateTime.fromMillisecondsSinceEpoch(
 | 
			
		||||
                (buildData.start_time ?? 0) * 1000);
 | 
			
		||||
      body: MultiProvider(
 | 
			
		||||
        providers: [
 | 
			
		||||
          ChangeNotifierProvider<BuildProvider>(create: (_) => BuildProvider()),
 | 
			
		||||
        ],
 | 
			
		||||
        child: APIBuilder<BuildProvider, Build, BuildDTO>(
 | 
			
		||||
            key: const Key("Build on seperate page"),
 | 
			
		||||
            dto: BuildDTO(buildID: widget.buildID),
 | 
			
		||||
            interval: const Duration(seconds: 10),
 | 
			
		||||
            onLoad: () => const Text("loading"),
 | 
			
		||||
            onData: (buildData) {
 | 
			
		||||
              final start_time = DateTime.fromMillisecondsSinceEpoch(
 | 
			
		||||
                  (buildData.start_time ?? 0) * 1000);
 | 
			
		||||
 | 
			
		||||
            return Column(
 | 
			
		||||
              crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
              mainAxisAlignment: MainAxisAlignment.start,
 | 
			
		||||
              children: [
 | 
			
		||||
                Row(
 | 
			
		||||
                  mainAxisAlignment: MainAxisAlignment.start,
 | 
			
		||||
                  children: [
 | 
			
		||||
                    const SizedBox(
 | 
			
		||||
                      width: 10,
 | 
			
		||||
                    ),
 | 
			
		||||
                    IconButton(
 | 
			
		||||
                      icon: Icon(
 | 
			
		||||
                        switchSuccessIcon(buildData.status),
 | 
			
		||||
                        color: switchSuccessColor(buildData.status),
 | 
			
		||||
              return Column(
 | 
			
		||||
                crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                mainAxisAlignment: MainAxisAlignment.start,
 | 
			
		||||
                children: [
 | 
			
		||||
                  Row(
 | 
			
		||||
                    mainAxisAlignment: MainAxisAlignment.start,
 | 
			
		||||
                    children: [
 | 
			
		||||
                      const SizedBox(
 | 
			
		||||
                        width: 10,
 | 
			
		||||
                      ),
 | 
			
		||||
                      onPressed: () {
 | 
			
		||||
                        context.replace("/build/${buildData.id}");
 | 
			
		||||
                      },
 | 
			
		||||
                    ),
 | 
			
		||||
                    const SizedBox(
 | 
			
		||||
                      width: 10,
 | 
			
		||||
                    ),
 | 
			
		||||
                    Text(
 | 
			
		||||
                      buildData.pkg_name,
 | 
			
		||||
                      style: const TextStyle(fontWeight: FontWeight.bold),
 | 
			
		||||
                    ),
 | 
			
		||||
                    const SizedBox(
 | 
			
		||||
                      width: 10,
 | 
			
		||||
                    ),
 | 
			
		||||
                    Text("triggered ${start_time.readableDuration()}")
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
                const SizedBox(
 | 
			
		||||
                  height: 15,
 | 
			
		||||
                ),
 | 
			
		||||
                _buildPage(buildData)
 | 
			
		||||
              ],
 | 
			
		||||
            );
 | 
			
		||||
          }),
 | 
			
		||||
                      IconButton(
 | 
			
		||||
                        icon: Icon(
 | 
			
		||||
                          switchSuccessIcon(buildData.status),
 | 
			
		||||
                          color: switchSuccessColor(buildData.status),
 | 
			
		||||
                        ),
 | 
			
		||||
                        onPressed: () {
 | 
			
		||||
                          context.replace("/build/${buildData.id}");
 | 
			
		||||
                        },
 | 
			
		||||
                      ),
 | 
			
		||||
                      const SizedBox(
 | 
			
		||||
                        width: 10,
 | 
			
		||||
                      ),
 | 
			
		||||
                      Text(
 | 
			
		||||
                        buildData.pkg_name,
 | 
			
		||||
                        style: const TextStyle(fontWeight: FontWeight.bold),
 | 
			
		||||
                      ),
 | 
			
		||||
                      const SizedBox(
 | 
			
		||||
                        width: 10,
 | 
			
		||||
                      ),
 | 
			
		||||
                      Text("triggered ${start_time.readableDuration()}")
 | 
			
		||||
                    ],
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(
 | 
			
		||||
                    height: 15,
 | 
			
		||||
                  ),
 | 
			
		||||
                  _buildPage(buildData)
 | 
			
		||||
                ],
 | 
			
		||||
              );
 | 
			
		||||
            }),
 | 
			
		||||
      ),
 | 
			
		||||
      appBar: AppBar(),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ import 'package:aurcache/components/builds_table.dart';
 | 
			
		||||
import 'package:aurcache/components/api/APIBuilder.dart';
 | 
			
		||||
import 'package:aurcache/providers/builds_provider.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:provider/provider.dart';
 | 
			
		||||
import '../constants/color_constants.dart';
 | 
			
		||||
import '../models/build.dart';
 | 
			
		||||
 | 
			
		||||
@@ -12,33 +13,39 @@ class BuildsScreen extends StatelessWidget {
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(),
 | 
			
		||||
      body: Padding(
 | 
			
		||||
        padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
        child: Container(
 | 
			
		||||
      body: MultiProvider(
 | 
			
		||||
        providers: [
 | 
			
		||||
          ChangeNotifierProvider<BuildsProvider>(
 | 
			
		||||
              create: (_) => BuildsProvider()),
 | 
			
		||||
        ],
 | 
			
		||||
        child: Padding(
 | 
			
		||||
          padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
          decoration: const BoxDecoration(
 | 
			
		||||
            color: secondaryColor,
 | 
			
		||||
            borderRadius: BorderRadius.all(Radius.circular(10)),
 | 
			
		||||
          ),
 | 
			
		||||
          child: SingleChildScrollView(
 | 
			
		||||
            child: Column(
 | 
			
		||||
              crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
              children: [
 | 
			
		||||
                Text(
 | 
			
		||||
                  "All Builds",
 | 
			
		||||
                  style: Theme.of(context).textTheme.subtitle1,
 | 
			
		||||
                ),
 | 
			
		||||
                SizedBox(
 | 
			
		||||
                  width: double.infinity,
 | 
			
		||||
                  child: APIBuilder<BuildsProvider, List<Build>, Object>(
 | 
			
		||||
                      key: const Key("Builds on seperate screen"),
 | 
			
		||||
                      interval: const Duration(seconds: 10),
 | 
			
		||||
                      onLoad: () => const Text("no data"),
 | 
			
		||||
                      onData: (data) {
 | 
			
		||||
                        return BuildsTable(data: data);
 | 
			
		||||
                      }),
 | 
			
		||||
                )
 | 
			
		||||
              ],
 | 
			
		||||
          child: Container(
 | 
			
		||||
            padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
            decoration: const BoxDecoration(
 | 
			
		||||
              color: secondaryColor,
 | 
			
		||||
              borderRadius: BorderRadius.all(Radius.circular(10)),
 | 
			
		||||
            ),
 | 
			
		||||
            child: SingleChildScrollView(
 | 
			
		||||
              child: Column(
 | 
			
		||||
                crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                children: [
 | 
			
		||||
                  Text(
 | 
			
		||||
                    "All Builds",
 | 
			
		||||
                    style: Theme.of(context).textTheme.subtitle1,
 | 
			
		||||
                  ),
 | 
			
		||||
                  SizedBox(
 | 
			
		||||
                    width: double.infinity,
 | 
			
		||||
                    child: APIBuilder<BuildsProvider, List<Build>, Object>(
 | 
			
		||||
                        key: const Key("Builds on seperate screen"),
 | 
			
		||||
                        interval: const Duration(seconds: 10),
 | 
			
		||||
                        onLoad: () => const Text("no data"),
 | 
			
		||||
                        onData: (data) {
 | 
			
		||||
                          return BuildsTable(data: data);
 | 
			
		||||
                        }),
 | 
			
		||||
                  )
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
import 'package:aurcache/api/statistics.dart';
 | 
			
		||||
import 'package:aurcache/components/api/APIBuilder.dart';
 | 
			
		||||
import 'package:aurcache/providers/stats_provider.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:provider/provider.dart';
 | 
			
		||||
 | 
			
		||||
import '../api/API.dart';
 | 
			
		||||
import '../components/dashboard/header.dart';
 | 
			
		||||
import '../constants/color_constants.dart';
 | 
			
		||||
import '../providers/builds_provider.dart';
 | 
			
		||||
import '../providers/packages_provider.dart';
 | 
			
		||||
import '../utils/responsive.dart';
 | 
			
		||||
import '../models/stats.dart';
 | 
			
		||||
import '../components/dashboard/quick_info_banner.dart';
 | 
			
		||||
@@ -22,63 +22,71 @@ class DashboardScreen extends StatefulWidget {
 | 
			
		||||
class _DashboardScreenState extends State<DashboardScreen> {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return APIBuilder<StatsProvider, Stats, Object>(
 | 
			
		||||
      interval: const Duration(seconds: 10),
 | 
			
		||||
      onData: (stats) {
 | 
			
		||||
        return SafeArea(
 | 
			
		||||
          child: SingleChildScrollView(
 | 
			
		||||
            child: Container(
 | 
			
		||||
              padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
              child: Column(
 | 
			
		||||
                children: [
 | 
			
		||||
                  const Header(),
 | 
			
		||||
                  const SizedBox(height: defaultPadding),
 | 
			
		||||
                  QuickInfoBanner(
 | 
			
		||||
                    stats: stats,
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(height: defaultPadding),
 | 
			
		||||
                  Row(
 | 
			
		||||
                    crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                    children: [
 | 
			
		||||
                      Expanded(
 | 
			
		||||
                        flex: 5,
 | 
			
		||||
                        child: Column(
 | 
			
		||||
                          children: [
 | 
			
		||||
                            const YourPackages(),
 | 
			
		||||
                            const SizedBox(height: defaultPadding),
 | 
			
		||||
                            const RecentBuilds(),
 | 
			
		||||
                            if (Responsive.isMobile(context))
 | 
			
		||||
                              const SizedBox(height: defaultPadding),
 | 
			
		||||
                            if (Responsive.isMobile(context))
 | 
			
		||||
                              SidePanel(
 | 
			
		||||
                                  nrbuilds: stats.total_builds,
 | 
			
		||||
                                  nrfailedbuilds: stats.failed_builds,
 | 
			
		||||
                                  nrActiveBuilds: stats.active_builds),
 | 
			
		||||
                          ],
 | 
			
		||||
                        ),
 | 
			
		||||
                      ),
 | 
			
		||||
                      if (!Responsive.isMobile(context))
 | 
			
		||||
                        const SizedBox(width: defaultPadding),
 | 
			
		||||
                      // On Mobile means if the screen is less than 850 we dont want to show it
 | 
			
		||||
                      if (!Responsive.isMobile(context))
 | 
			
		||||
    return MultiProvider(
 | 
			
		||||
      providers: [
 | 
			
		||||
        ChangeNotifierProvider<StatsProvider>(create: (_) => StatsProvider()),
 | 
			
		||||
        ChangeNotifierProvider<PackagesProvider>(
 | 
			
		||||
            create: (_) => PackagesProvider()),
 | 
			
		||||
        ChangeNotifierProvider<BuildsProvider>(create: (_) => BuildsProvider()),
 | 
			
		||||
      ],
 | 
			
		||||
      child: APIBuilder<StatsProvider, Stats, Object>(
 | 
			
		||||
        interval: const Duration(seconds: 10),
 | 
			
		||||
        onData: (stats) {
 | 
			
		||||
          return SafeArea(
 | 
			
		||||
            child: SingleChildScrollView(
 | 
			
		||||
              child: Container(
 | 
			
		||||
                padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
                child: Column(
 | 
			
		||||
                  children: [
 | 
			
		||||
                    const Header(),
 | 
			
		||||
                    const SizedBox(height: defaultPadding),
 | 
			
		||||
                    QuickInfoBanner(
 | 
			
		||||
                      stats: stats,
 | 
			
		||||
                    ),
 | 
			
		||||
                    const SizedBox(height: defaultPadding),
 | 
			
		||||
                    Row(
 | 
			
		||||
                      crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                      children: [
 | 
			
		||||
                        Expanded(
 | 
			
		||||
                          flex: 2,
 | 
			
		||||
                          child: SidePanel(
 | 
			
		||||
                              nrbuilds: stats.total_builds,
 | 
			
		||||
                              nrfailedbuilds: stats.failed_builds,
 | 
			
		||||
                              nrActiveBuilds: stats.active_builds),
 | 
			
		||||
                          flex: 5,
 | 
			
		||||
                          child: Column(
 | 
			
		||||
                            children: [
 | 
			
		||||
                              const YourPackages(),
 | 
			
		||||
                              const SizedBox(height: defaultPadding),
 | 
			
		||||
                              const RecentBuilds(),
 | 
			
		||||
                              if (Responsive.isMobile(context))
 | 
			
		||||
                                const SizedBox(height: defaultPadding),
 | 
			
		||||
                              if (Responsive.isMobile(context))
 | 
			
		||||
                                SidePanel(
 | 
			
		||||
                                    nrbuilds: stats.total_builds,
 | 
			
		||||
                                    nrfailedbuilds: stats.failed_builds,
 | 
			
		||||
                                    nrActiveBuilds: stats.active_builds),
 | 
			
		||||
                            ],
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                    ],
 | 
			
		||||
                  )
 | 
			
		||||
                ],
 | 
			
		||||
                        if (!Responsive.isMobile(context))
 | 
			
		||||
                          const SizedBox(width: defaultPadding),
 | 
			
		||||
                        // On Mobile means if the screen is less than 850 we dont want to show it
 | 
			
		||||
                        if (!Responsive.isMobile(context))
 | 
			
		||||
                          Expanded(
 | 
			
		||||
                            flex: 2,
 | 
			
		||||
                            child: SidePanel(
 | 
			
		||||
                                nrbuilds: stats.total_builds,
 | 
			
		||||
                                nrfailedbuilds: stats.failed_builds,
 | 
			
		||||
                                nrActiveBuilds: stats.active_builds),
 | 
			
		||||
                          ),
 | 
			
		||||
                      ],
 | 
			
		||||
                    )
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        );
 | 
			
		||||
      },
 | 
			
		||||
      onLoad: () {
 | 
			
		||||
        return Text("loading");
 | 
			
		||||
      },
 | 
			
		||||
          );
 | 
			
		||||
        },
 | 
			
		||||
        onLoad: () {
 | 
			
		||||
          return Text("loading");
 | 
			
		||||
        },
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -29,94 +29,103 @@ class _PackageScreenState extends State<PackageScreen> {
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(),
 | 
			
		||||
      body: APIBuilder<PackageProvider, Package, PackageDTO>(
 | 
			
		||||
          dto: PackageDTO(pkgID: widget.pkgID),
 | 
			
		||||
          onLoad: () => const Text("loading"),
 | 
			
		||||
          onData: (pkg) {
 | 
			
		||||
            return Padding(
 | 
			
		||||
              padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
              child: Column(
 | 
			
		||||
                crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                children: [
 | 
			
		||||
                  Row(
 | 
			
		||||
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | 
			
		||||
                    crossAxisAlignment: CrossAxisAlignment.center,
 | 
			
		||||
                    children: [
 | 
			
		||||
                      Container(
 | 
			
		||||
                        margin: const EdgeInsets.only(left: 15),
 | 
			
		||||
                        child: Text(
 | 
			
		||||
                          pkg.name,
 | 
			
		||||
                          style: const TextStyle(fontSize: 32),
 | 
			
		||||
                        ),
 | 
			
		||||
                      ),
 | 
			
		||||
                      Container(
 | 
			
		||||
                        margin: const EdgeInsets.only(right: 15),
 | 
			
		||||
                        child: ElevatedButton(
 | 
			
		||||
                          onPressed: () async {
 | 
			
		||||
                            final confirmResult =
 | 
			
		||||
                                await showDeleteConfirmationDialog(context);
 | 
			
		||||
                            if (!confirmResult) return;
 | 
			
		||||
 | 
			
		||||
                            final succ = await API.deletePackage(pkg.id);
 | 
			
		||||
                            if (succ) {
 | 
			
		||||
                              context.pop();
 | 
			
		||||
 | 
			
		||||
                              Provider.of<PackagesProvider>(context,
 | 
			
		||||
                                      listen: false)
 | 
			
		||||
                                  .refresh(context);
 | 
			
		||||
                              Provider.of<BuildsProvider>(context,
 | 
			
		||||
                                      listen: false)
 | 
			
		||||
                                  .refresh(context);
 | 
			
		||||
                              Provider.of<StatsProvider>(context, listen: false)
 | 
			
		||||
                                  .refresh(context);
 | 
			
		||||
                            }
 | 
			
		||||
                          },
 | 
			
		||||
                          child: const Text(
 | 
			
		||||
                            "Delete",
 | 
			
		||||
                            style: TextStyle(color: Colors.redAccent),
 | 
			
		||||
      body: MultiProvider(
 | 
			
		||||
        providers: [
 | 
			
		||||
          ChangeNotifierProvider<BuildsProvider>(
 | 
			
		||||
              create: (_) => BuildsProvider()),
 | 
			
		||||
          ChangeNotifierProvider<PackageProvider>(
 | 
			
		||||
              create: (_) => PackageProvider()),
 | 
			
		||||
        ],
 | 
			
		||||
        child: APIBuilder<PackageProvider, Package, PackageDTO>(
 | 
			
		||||
            dto: PackageDTO(pkgID: widget.pkgID),
 | 
			
		||||
            onLoad: () => const Text("loading"),
 | 
			
		||||
            onData: (pkg) {
 | 
			
		||||
              return Padding(
 | 
			
		||||
                padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
                child: Column(
 | 
			
		||||
                  crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                  children: [
 | 
			
		||||
                    Row(
 | 
			
		||||
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | 
			
		||||
                      crossAxisAlignment: CrossAxisAlignment.center,
 | 
			
		||||
                      children: [
 | 
			
		||||
                        Container(
 | 
			
		||||
                          margin: const EdgeInsets.only(left: 15),
 | 
			
		||||
                          child: Text(
 | 
			
		||||
                            pkg.name,
 | 
			
		||||
                            style: const TextStyle(fontSize: 32),
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                      )
 | 
			
		||||
                    ],
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(
 | 
			
		||||
                    height: 25,
 | 
			
		||||
                  ),
 | 
			
		||||
                  Container(
 | 
			
		||||
                    padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
                    decoration: const BoxDecoration(
 | 
			
		||||
                      color: secondaryColor,
 | 
			
		||||
                      borderRadius: BorderRadius.all(Radius.circular(10)),
 | 
			
		||||
                    ),
 | 
			
		||||
                    child: SingleChildScrollView(
 | 
			
		||||
                      child: Column(
 | 
			
		||||
                        crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                        children: [
 | 
			
		||||
                          Text(
 | 
			
		||||
                            "Builds of ${pkg.name}",
 | 
			
		||||
                            style: Theme.of(context).textTheme.subtitle1,
 | 
			
		||||
                          ),
 | 
			
		||||
                          SizedBox(
 | 
			
		||||
                            width: double.infinity,
 | 
			
		||||
                            child: APIBuilder<BuildsProvider, List<Build>,
 | 
			
		||||
                                BuildsDTO>(
 | 
			
		||||
                              key: const Key("Builds on Package info"),
 | 
			
		||||
                              dto: BuildsDTO(pkgID: pkg.id),
 | 
			
		||||
                              interval: const Duration(seconds: 5),
 | 
			
		||||
                              onData: (data) {
 | 
			
		||||
                                return BuildsTable(data: data);
 | 
			
		||||
                              },
 | 
			
		||||
                              onLoad: () => const Text("no data"),
 | 
			
		||||
                        Container(
 | 
			
		||||
                          margin: const EdgeInsets.only(right: 15),
 | 
			
		||||
                          child: ElevatedButton(
 | 
			
		||||
                            onPressed: () async {
 | 
			
		||||
                              final confirmResult =
 | 
			
		||||
                                  await showDeleteConfirmationDialog(context);
 | 
			
		||||
                              if (!confirmResult) return;
 | 
			
		||||
 | 
			
		||||
                              final succ = await API.deletePackage(pkg.id);
 | 
			
		||||
                              if (succ) {
 | 
			
		||||
                                context.pop();
 | 
			
		||||
 | 
			
		||||
                                Provider.of<PackagesProvider>(context,
 | 
			
		||||
                                        listen: false)
 | 
			
		||||
                                    .refresh(context);
 | 
			
		||||
                                Provider.of<BuildsProvider>(context,
 | 
			
		||||
                                        listen: false)
 | 
			
		||||
                                    .refresh(context);
 | 
			
		||||
                                Provider.of<StatsProvider>(context,
 | 
			
		||||
                                        listen: false)
 | 
			
		||||
                                    .refresh(context);
 | 
			
		||||
                              }
 | 
			
		||||
                            },
 | 
			
		||||
                            child: const Text(
 | 
			
		||||
                              "Delete",
 | 
			
		||||
                              style: TextStyle(color: Colors.redAccent),
 | 
			
		||||
                            ),
 | 
			
		||||
                          ),
 | 
			
		||||
                        ],
 | 
			
		||||
                      ),
 | 
			
		||||
                        )
 | 
			
		||||
                      ],
 | 
			
		||||
                    ),
 | 
			
		||||
                  )
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
            );
 | 
			
		||||
          }),
 | 
			
		||||
                    const SizedBox(
 | 
			
		||||
                      height: 25,
 | 
			
		||||
                    ),
 | 
			
		||||
                    Container(
 | 
			
		||||
                      padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
                      decoration: const BoxDecoration(
 | 
			
		||||
                        color: secondaryColor,
 | 
			
		||||
                        borderRadius: BorderRadius.all(Radius.circular(10)),
 | 
			
		||||
                      ),
 | 
			
		||||
                      child: SingleChildScrollView(
 | 
			
		||||
                        child: Column(
 | 
			
		||||
                          crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                          children: [
 | 
			
		||||
                            Text(
 | 
			
		||||
                              "Builds of ${pkg.name}",
 | 
			
		||||
                              style: Theme.of(context).textTheme.subtitle1,
 | 
			
		||||
                            ),
 | 
			
		||||
                            SizedBox(
 | 
			
		||||
                              width: double.infinity,
 | 
			
		||||
                              child: APIBuilder<BuildsProvider, List<Build>,
 | 
			
		||||
                                  BuildsDTO>(
 | 
			
		||||
                                key: const Key("Builds on Package info"),
 | 
			
		||||
                                dto: BuildsDTO(pkgID: pkg.id),
 | 
			
		||||
                                interval: const Duration(seconds: 5),
 | 
			
		||||
                                onData: (data) {
 | 
			
		||||
                                  return BuildsTable(data: data);
 | 
			
		||||
                                },
 | 
			
		||||
                                onLoad: () => const Text("no data"),
 | 
			
		||||
                              ),
 | 
			
		||||
                            ),
 | 
			
		||||
                          ],
 | 
			
		||||
                        ),
 | 
			
		||||
                      ),
 | 
			
		||||
                    )
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
              );
 | 
			
		||||
            }),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								frontend/lib/screens/packages_screen.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								frontend/lib/screens/packages_screen.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
import 'package:aurcache/components/packages_table.dart';
 | 
			
		||||
import 'package:aurcache/providers/packages_provider.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:provider/provider.dart';
 | 
			
		||||
 | 
			
		||||
import '../components/api/APIBuilder.dart';
 | 
			
		||||
import '../constants/color_constants.dart';
 | 
			
		||||
import '../models/package.dart';
 | 
			
		||||
 | 
			
		||||
class PackagesScreen extends StatelessWidget {
 | 
			
		||||
  const PackagesScreen({super.key});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(),
 | 
			
		||||
      body: MultiProvider(
 | 
			
		||||
        providers: [
 | 
			
		||||
          ChangeNotifierProvider<PackagesProvider>(
 | 
			
		||||
              create: (_) => PackagesProvider()),
 | 
			
		||||
        ],
 | 
			
		||||
        child: Padding(
 | 
			
		||||
          padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
          child: Container(
 | 
			
		||||
            padding: const EdgeInsets.all(defaultPadding),
 | 
			
		||||
            decoration: const BoxDecoration(
 | 
			
		||||
              color: secondaryColor,
 | 
			
		||||
              borderRadius: BorderRadius.all(Radius.circular(10)),
 | 
			
		||||
            ),
 | 
			
		||||
            child: SingleChildScrollView(
 | 
			
		||||
              child: Column(
 | 
			
		||||
                crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                children: [
 | 
			
		||||
                  Text(
 | 
			
		||||
                    "All Packages",
 | 
			
		||||
                    style: Theme.of(context).textTheme.subtitle1,
 | 
			
		||||
                  ),
 | 
			
		||||
                  SizedBox(
 | 
			
		||||
                    width: double.infinity,
 | 
			
		||||
                    child: APIBuilder<PackagesProvider, List<Package>, Object>(
 | 
			
		||||
                        key: const Key("Builds on seperate screen"),
 | 
			
		||||
                        interval: const Duration(seconds: 10),
 | 
			
		||||
                        onLoad: () => const Text("no data"),
 | 
			
		||||
                        onData: (data) {
 | 
			
		||||
                          return PackagesTable(data: data);
 | 
			
		||||
                        }),
 | 
			
		||||
                  )
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user