Newer
Older
import 'package:flutter/material.dart';
import 'package:googleapis_auth/auth_io.dart' as auth;
import 'package:googleapis/sheets/v4.dart' as sheets;
import 'dart:io' show File;
class StudentEditPage extends StatefulWidget {
  final String googleSheetsLink;
  const StudentEditPage({Key? key, required this.googleSheetsLink}) : super(key: key);
  @override
  _StudentEditPageState createState() => _StudentEditPageState();
}
class _StudentEditPageState extends State<StudentEditPage> {
  final TextEditingController _firstNameController = TextEditingController();
  final TextEditingController _lastNameController = TextEditingController();
  final TextEditingController _studentNumberController = TextEditingController();
  String? _spreadsheetId;
  @override
  void initState() {
    super.initState();
    _extractSpreadsheetId();
  }
  void _extractSpreadsheetId() {
    final regExp = RegExp(r'/spreadsheets/d/([a-zA-Z0-9-_]+)');
    final matches = regExp.firstMatch(widget.googleSheetsLink);
    if (matches != null && matches.groupCount >= 1) {
      _spreadsheetId = matches.group(1);
    } else {
      print("L'URL de la feuille Google Sheets est invalide");
    }
  }
  Future<void> _addStudentToSheet() async {
    if (_spreadsheetId == null) {
      print("Id de la feuille Google Sheets non trouve");
      return;
    }
    final accountCredentials = auth.ServiceAccountCredentials.fromJson(
        File(AppConfig.cleCompteService).readAsStringSync());
    final scopes = [sheets.SheetsApi.spreadsheetsScope];
    try {
      final authClient = await auth.clientViaServiceAccount(accountCredentials, scopes);
      var api = sheets.SheetsApi(authClient);
      var range = '${AppConfig.sheetName}!A:A';
      var valueRange = sheets.ValueRange.fromJson({
        "values": [
          [
            _firstNameController.text,
            _lastNameController.text,
            _studentNumberController.text,
            "", //vide pour le moment
            "oui"
      await api.spreadsheets.values.append(valueRange, _spreadsheetId!, range,
          valueInputOption: 'USER_ENTERED');
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
        content: Text("L'étudiant a été ajouté avec succès à la feuille."),
      ));
      authClient.close();
    } catch (e) {
      print(e);
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
        content: Text("Erreur lors de l'ajout de l'étudiant à la feuille."),
      ));
    }
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Ajouter un étudiant"),
      ),
      body: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              TextField(
                controller: _firstNameController,
                decoration: InputDecoration(labelText: "Prénom de l'étudiant"),
              ),
              TextField(
                controller: _lastNameController,
                decoration: InputDecoration(labelText: "Nom de l'étudiant"),
              ),
              TextField(
                controller: _studentNumberController,
                decoration: InputDecoration(labelText: "Numéro de l'étudiant"),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _addStudentToSheet,
                child: Text("Ajouter à la Google Sheet"),
              ),
            ],
          ),