Как отобразить список данных с упорядочением по дате? - PullRequest
0 голосов
/ 08 мая 2020

Вот результат:

enter image description here

Это намного лучше, но я не знаю, почему BELSHINA BOBRUISK не центрируется по вертикали. Как видите, остальные команды расположены вертикально по центру. F C SMOELVITCHI в центре. Странный. Я также хотел бы отображать «2020-06-01» в мобильном формате, поэтому, если это французский мобильный, он будет «01-06-2020». И еще вопрос. Не знаю, почему мое мобильное приложение использует тему с fontfamily, но не со всеми. У меня есть несколько страниц с частью данных в хорошем семейном шрифте, а другая часть в шрифте по умолчанию, это действительно странно

import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'package:flutter_app/menu_member.dart';
import 'package:flutter_app/globals.dart' as globals;
import 'package:flutter_app/appbar_draw.dart';

// Create a Form widget.
class Affiche_Matchs extends StatefulWidget {
  @override

  _Affiche_Matchs_State createState() {
    return _Affiche_Matchs_State();
  }
}

// Create a corresponding State class.
// This class holds data related to the form.

class _Affiche_Matchs_State extends State<Affiche_Matchs> {
  @override
  final _formKey = GlobalKey<FormState>();
  List<String> radioValues = [];
  Future<List<Match>> grid;

  Future <List<Match>> Liste_Match_Display() async {
    // SERVER LOGIN API URL
    var url = 'https://www.easytrafic.fr/game_app/display_matchs.php';

    // Starting Web API Call.
    var response = await http.get(url,headers: {'content-type': 'application/json','accept': 'application/json','authorization': globals.token});

    // Getting Server response into variable.

    var jsondata = json.decode(response.body);

    List<Match> Matchs = [];
    var i=0;
    for (var u in jsondata) {
      i=i+1;
      Match match = Match(u["id"],u["equipe1"],u["equipe2"],u["type_prono"],u["date_debut"],u["heure_debut"]);
      Matchs.add(match);
      radioValues.add("");
    }
    return Matchs;
  }

  void initState() {
    grid = Liste_Match_Display();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: drawappbar(true),
        drawer: new DrawerOnly(className: Affiche_Matchs()),
        body:
        Container(
          height: MediaQuery.of(context).size.height,
          width: MediaQuery.of(context).size.width,
          child:
          FutureBuilder(
            future: grid,
            builder: (BuildContext context, AsyncSnapshot snapshot) {
          switch (snapshot.connectionState) {
          case ConnectionState.waiting: return new Center(child: new CircularProgressIndicator(),);
          default:
          if(snapshot.hasError) {
          return new Center(child: new Text('Error: ${snapshot.error}'),);
          }
          else {
          List<Match> values = snapshot.data;
          Match lastitem;
          lastitem=values[0];
          if (values.isEmpty) {
          return Container(
          child: Center(
          child: Text("Aucun match disponible !!!")
          )
          );
          }
          else {
            return Form(
                key: _formKey,
                child: ListView.builder(itemCount: values.length,itemBuilder: (_,index) {
                          bool header = lastitem.date_debut !=
                              values[index].date_debut;
                          lastitem = values[index];
                          return Column(
                            children: [
                              (header || index == 0)
                                  ?
                          Container(
                            height: 30,
                            margin: EdgeInsets.only(top:10),
                            width: MediaQuery.of(context).size.width,
                            decoration: BoxDecoration(
                                border: Border.all(
                                  color: Colors.blue[700],
                                  width: 2,
                                ),
                                color: Colors.blue[700]
                            ),
                            child : new Text(values[index].date_debut,textAlign: TextAlign.center,style: TextStyle(fontSize: 18.0,fontWeight: FontWeight.w500,color: Colors.white),),
                          )// here display header
                                  :
                                  Container(),
                                  Container(
                                  margin: EdgeInsets.only(top:20,bottom:20),
                                  child: Center(
                                  child: Text(values[index].heure_debut),
                                  ),
                                  ),
                                  Row(
                                    mainAxisAlignment: MainAxisAlignment.center,
                                  children: [
                              Text(values[index].equipe1,style: TextStyle(fontSize:12)),
                              draw_grid("1", index, values[index].typeprono),
                              draw_grid("N", index, values[index].typeprono), //
                              draw_grid("2", index, values[index].typeprono), //
                              Text(values[index].equipe2,style: TextStyle(fontSize:12)),
                            ]
                  ),
                  ]
                          );
                        }
                )
            );
          }
          };
          };
          }
                          ),
                ),
            );
        }

  draw_grid (String choix, int index,String type_prono) {
    if (type_prono.contains(choix)) {
      return new InkWell(
        onTap: () {
          setState(() {
            if (radioValues[index] == choix) {
              radioValues[index] = "";
            }
            else {
              radioValues[index] = choix;
            }
          });
          print(radioValues);
        },
        child:
        Container(
          height: 30.0,
          width: 30.0,
          margin: EdgeInsets.only(right: 2,left: 2),
          child: new Center(
            child: new Text(choix,
                style: new TextStyle(
                    color:
                    radioValues[index] == choix ? Colors.white : Colors.red,
                    //fontWeight: FontWeight.bold,
                    fontSize: 18.0, fontWeight: FontWeight.w900)),
          ),
          decoration: new BoxDecoration(
            color: radioValues[index] == choix
                ? Colors.red
                : Colors.white,
            border: new Border.all(
                width: 2.0,
                color: radioValues[index] == choix
                    ? Colors.red
                    : Colors.red),
            borderRadius: const BorderRadius.all(const Radius.circular(5)),
          ),
        ),
      );
    }
    else {
      return Text("");
    }
  }

}

class Match {

  final String id;
  final String equipe1;
  final String equipe2;
  final String typeprono;
  final String date_debut;
  final String heure_debut;

  const Match(this.id,this.equipe1, this.equipe2, this.typeprono,this.date_debut,this.heure_debut);

}

1 Ответ

0 голосов
/ 08 мая 2020

Вам нужно отсортировать список по дате, а затем вы можете отобразить, проверив, отображать ли заголовок или нет.

Следующий код поможет вам понять больше, а затем вы сможете реализовать.

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';

class DeleteWidget extends StatefulWidget {
  @override
  _DeleteWidgetState createState() => _DeleteWidgetState();
}

class _DeleteWidgetState extends State<DeleteWidget> {
  final _formKey = GlobalKey<FormState>();
  List<String> radioValues = [];
  Future<List<Match>> grid;

  Future<List<Match>> Liste_Match_Display() async {
    // SERVER LOGIN API URL
    var url = 'https://www.easytrafic.fr/game_app/display_matchs.php';

    // Starting Web API Call.
    var response = await http.get(url, headers: {
      'content-type': 'application/json',
      'accept': 'application/json',
      'authorization':
          'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOjE1ODg5NTQ0NDgsImlhdCI6MTU4ODk1NDQ0OCwiZXhwIjoxNTg5MDE0NDQ4LCJkYXRhIjp7ImlkIjoiMSIsImVtYWlsIjoicGFzMzBAbmV0Y291cnJpZXIuY29tIn19.-jcyoxtkNVWWagune6EOjInjBgObyxf9gweXJrA2MxLL5fRTW1pkFSFrJOW8uYzhVpaZ4CF9A-c_m8akUq74NA '
    });

    // Getting Server response into variable.

    var jsondata = json.decode(response.body);

    List<Match> Matchs = [];
    var i = 0;
    for (var u in jsondata) {
      i = i + 1;
      Match match = Match(u["id"], u["equipe1"], u["equipe2"], u["type_prono"],
          u["date_debut"], u["heure_debut"]);
      Matchs.add(match);
      radioValues.add("");
    }
    return Matchs;
  }

  void initState() {
    grid = Liste_Match_Display();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //  appBar: drawappbar(true),
      //drawer: new DrawerOnly(className: Affiche_Matchs()),
      body: Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        child: FutureBuilder(
            future: grid,
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.waiting:
                  return new Center(
                    child: new CircularProgressIndicator(),
                  );
                default:
                  if (snapshot.hasError) {
                    return new Center(
                      child: new Text('Error: ${snapshot.error}'),
                    );
                  } else {
                    List<Match> values = snapshot.data;
                    Match lastitem;
                    lastitem = values[0];
                    if (values.isEmpty) {
                      return Container(
                          child: Center(
                              child: Text("Aucun match disponible !!!")));
                    } else {
                      return Form(
                          key: _formKey,
                          child: ListView.builder(
                              itemCount: values.length,
                              itemBuilder: (_, index) {
                                bool header = lastitem.date_debut !=
                                    values[index].date_debut;
                                lastitem = values[index];
                                return Column(
                                  children: [
                                    (header || index == 0)
                                        ? Container(
                                            height: 30,
                                            margin: EdgeInsets.only(top: 10),
                                            width: MediaQuery.of(context)
                                                .size
                                                .width,
                                            decoration: BoxDecoration(
                                                border: Border.all(
                                                  color: Colors.blue[700],
                                                  width: 2,
                                                ),
                                                color: Colors.blue[700]),
                                            child: new Text(
                                              values[index].date_debut,
                                              textAlign: TextAlign.center,
                                              style: TextStyle(
                                                  fontSize: 18.0,
                                                  fontWeight: FontWeight.w500,
                                                  color: Colors.white),
                                            ),
                                          ) // here display header
                                        : Container(),
                                    Text(values[index].heure_debut),
                                    Text(values[index].equipe1),
                                    Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.center,
                                      children: [
                                        draw_grid("1", index,
                                            values[index].typeprono),
                                        draw_grid("N", index,
                                            values[index].typeprono), //
                                        draw_grid("2", index,
                                            values[index].typeprono), //
                                      ],
                                    ),
                                    Text(values[index].equipe2),
// here display whole item
                                  ],
                                );
                              }));
                    }
                  }
                  ;
              }
              ;
            }),
      ),
    );
  }

  draw_grid(String choix, int index, String type_prono) {
    if (type_prono.contains(choix)) {
      return new InkWell(
        onTap: () {
          setState(() {
            if (radioValues[index] == choix) {
              radioValues[index] = "";
            } else {
              radioValues[index] = choix;
            }
          });
          print(radioValues);
        },
        child: Container(
          height: 40.0,
          width: 40.0,
          child: new Center(
            child: new Text(choix,
                style: new TextStyle(
                    color:
                        radioValues[index] == choix ? Colors.white : Colors.red,
                    //fontWeight: FontWeight.bold,
                    fontSize: 18.0,
                    fontWeight: FontWeight.w900)),
          ),
          decoration: new BoxDecoration(
            color: radioValues[index] == choix ? Colors.red : Colors.white,
            border: new Border.all(
                width: 2.0,
                color: radioValues[index] == choix ? Colors.red : Colors.red),
            borderRadius: const BorderRadius.all(const Radius.circular(5)),
          ),
        ),
      );
    } else {
      return Text("");
    }
  }
}

class Match {
  final String id;
  final String equipe1;
  final String equipe2;
  final String typeprono;
  final String date_debut;
  final String heure_debut;

  const Match(this.id, this.equipe1, this.equipe2, this.typeprono,
      this.date_debut, this.heure_debut);
}
...