168 lines
7.2 KiB
Dart

import 'dart:io';
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/material.dart';
import 'package:manager_api/api.dart';
import 'package:mymuseum_visitapp/Components/CustomAppBar.dart';
import 'package:mymuseum_visitapp/Components/Loading.dart';
import 'package:mymuseum_visitapp/Components/ScannerBouton.dart';
import 'package:mymuseum_visitapp/Helpers/networkCheck.dart';
import 'package:mymuseum_visitapp/Screens/Visit/visit.dart';
import 'package:mymuseum_visitapp/app_context.dart';
import 'package:mymuseum_visitapp/client.dart';
import 'package:mymuseum_visitapp/constants.dart';
import 'package:provider/provider.dart';
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
//List<ConfigurationDTO> configurations = [ConfigurationDTO(label: "Test 0", isOffline: false), ConfigurationDTO(label: "Test 1", isOffline: true), ConfigurationDTO(label: "Test 2", isOffline: true)];
List<ConfigurationDTO> configurations = [];
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
final appContext = Provider.of<AppContext>(context);
return Scaffold(
appBar: CustomAppBar(
title: "Home page - liste parcours",
isHomeButton: false,
),
body: SingleChildScrollView(
child: Container(
width: size.width,
height: size.height,
child: FutureBuilder(
future: getConfiguration(appContext.clientAPI),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
configurations = List<ConfigurationDTO>.from(snapshot.data).where((configuration) => configuration.isMobile!).toList();
return RefreshIndicator (
onRefresh: () {
setState(() {});
return Future(() => null);
},
color: kSecondColor,
child: ListView.builder(
shrinkWrap: true, //I've set this as true here depending on what your listview content is
//physics: NeverScrollableScrollPhysics(),//This prevents scrolling, but may inhibit refresh indicator, remove as you need
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
setState(() {
print(configurations[index].label);
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => VisitPage(configurationId: configurations[index].id!),
));
});
},
child: Container(
height: size.height*0.15,
decoration: boxDecoration(configurations[index], false),
margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 20),
child: Stack(
children: [
Align(
alignment: Alignment.topLeft,
child: Padding(
padding: const EdgeInsets.only(top: 20, left: 10),
child: AutoSizeText(
configurations[index].label!,
style: const TextStyle(fontSize: kMenuTitleDetailSize),
maxLines: 1,
),
),
),
if(configurations[index].isOffline!) // TODO check if already downloaded
Positioned(
bottom: 0,
right: 0,
child: Container(
width: 45,
height: 45,
decoration: BoxDecoration(
shape: BoxShape.rectangle,
color: kMainColor,
borderRadius: BorderRadius.circular(20.0),
),
margin: const EdgeInsets.all(8),
child: InkWell(
onTap: () async {
print("TODO download");
},
child: Icon(Icons.download_outlined, color: Colors.white),
),
/*AutoSizeText(
configurations[index].isOffline.toString(),
style: const TextStyle(fontSize: kMenuDescriptionDetailSize, fontFamily: ""),
maxLines: 1,
),*/
)
)
],
),
),
);
},
itemCount: configurations.length
),
);
} else if (snapshot.connectionState == ConnectionState.none) {
return Text("No data");
} else {
return Center(
child: Container(
height: size.height * 0.15,
child: Loading()
)
);
}
}
),
),
),
floatingActionButton: const ScannerBouton(isReplacement: false),
//floatingActionButtonLocation: FloatingActionButtonLocation.miniCenterFloat,
);
}
Future<List<ConfigurationDTO>?> getConfiguration(Client client) async {
try {
bool isOnline = await hasNetwork();
if(isOnline) {
//var client = new Client("http://192.168.31.140:8089"); // TODO REMOVE
List<ConfigurationDTO>? configurations = await client.configurationApi!.configurationGet();
print(configurations);
return configurations;
} else {
return []; // TODO return local list..
}
} catch (e) {
print(e);
print("IN CATCH");
}
}
}
boxDecoration(ConfigurationDTO configuration, bool isSelected) { // TODO to change
return BoxDecoration(
color: kSecondColor,
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(20.0),
boxShadow: const [
BoxShadow(
color: kSecondColor,
spreadRadius: 0.15,
blurRadius: 3.5,
offset: Offset(0, 1), // changes position of shadow
),
],
);
}