Как мне получать данные во флаттере? - PullRequest
0 голосов
/ 05 мая 2020


У меня проблема с моим приложением flutter при получении данных с онлайн-хостинга.

Вот мой код входа:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:idobloodapp/drawer/mainmenu.dart';
import 'package:idobloodapp/home/home.dart';
import 'package:idobloodapp/register.dart';

import 'loading/loading.dart';

class Login extends StatefulWidget {
  @override
  _LoginState createState() => _LoginState();
}

class _LoginState extends State<Login> {


  TextEditingController _pseudoController = new TextEditingController();
  TextEditingController _passwordController = new TextEditingController();
  var data;
   var _isSecured = true;


  @override
  Widget build(BuildContext context) {

    /**************** Get Login Connection && Data ************************/
    Future<String> getLogin(String pseudo) async {
      var response = await http.get(
          Uri.encodeFull(
              "https://idobloodadmin.000webhostapp.com/login.php?PSEUDO=${pseudo}"),
          headers: {"Accept": "application/json"});

      print(response.body);
      setState(() {
        var convertDataToJson = json.decode(response.body);
        data = convertDataToJson['result'];
      });
    }

    /*********************Alert Dialog Pseudo******************************/
    void onSignedInErrorPassword() {
      var alert = new AlertDialog(
        title: new Text("Pseudo Error"),
        content: new Text(
            "There was an Password error signing in. Please try again."),
      );
      showDialog(context: context, child: alert);
    }
    /*********************Alert Dialog Pseudo******************************/
    void onSignedInErrorPseudo() {
      var alert = new AlertDialog(
        title: new Text("Pseudo Error"),
        content:
            new Text("There was an Pseudo error signing in. Please try again."),
      );
      showDialog(context: context, child: alert);
    }

    /******************* Check Data ****************************/
    VerifData(String pseudo, String password, var datadb) {
      if (data[0]['username'] == pseudo) {
        if (data[0]['password'] == password) {
          // Navigator.of(context).pushNamed("/seconds");

          var route = new MaterialPageRoute(
            builder: (BuildContext context) =>
                new Home(
                idUser: data[0]['userid'],
                 firstname : data[0]['firstname'],
        lastname:data[0]['lastname'],
        gender:data[0]['gender'],
        contact:data[0]['contact'],
        address:data[0]['address'],
        bloodtype:data[0]['bloodtype'],
        username:data[0]['username'],

                ),
          );
          Navigator.of(context).push(route);
        } else {
          onSignedInErrorPassword();
        }
      } else {
        onSignedInErrorPseudo();
      }
    }


    /****************** TextField Pseudo*******************************/
    var pseudo = new ListTile(
      title: Card(

              child: TextFormField(
          decoration: InputDecoration(
                    icon: Icon(
                      Icons.person,
                    ),
              labelText: "Username",
              hintText: "Write your Username please",
              border: InputBorder.none
              ),
          controller: _pseudoController,
        ),
      ),
    );

    /************************************************************/

    /******************** TextField Password ******************************/
    var password = new ListTile(

      title: Card(
              child: TextFormField(
          decoration: InputDecoration(
              icon: new IconButton(
                  icon: Icon(
                    Icons.remove_red_eye,
                  ),
                  onPressed: () {
                    setState(() {
                      _isSecured = !_isSecured;
                    });
                  }),
              labelText: " Password",
              hintText: "Password",
              border: InputBorder.none),
          obscureText: _isSecured,
          controller: _passwordController,
        ),
      ),
    );

    /****************************************************/
    /********************* Button Login****************************************/
    var createaccount = new Container(
      child: FlatButton(
        child: const Text('No Account? Tap to Register'),

        onPressed: () {
          // setState(() => loading = true);
          var route = new MaterialPageRoute(
            builder: (BuildContext context) => new Register(),
          );
          Navigator.of(context).push(route);
        },
      ),
    );
/*************************************************/

    /********************* Button Login****************************************/
    var loginButton = new Container(
      child: RaisedButton(
        child: const Text('LogIn'),
        color: Theme.of(context).accentColor,
        elevation: 8.0,
        splashColor: Colors.blueGrey,
        onPressed: () {

          getLogin(_pseudoController.text);
          VerifData(_pseudoController.text, _passwordController.text, data);
        },
      ),
    );
/*************************************************/

    /********************Button Cancel ***********************/
    var cancelButton = new Container(
      child: FlatButton(
        child: const Text('Cancel'),
        onPressed: () {
          _passwordController.clear();
          _pseudoController.clear();
        },
      ),
    );

     return Scaffold(
      backgroundColor: Theme.of(context).scaffoldBackgroundColor,
      body: new ListView(
        children: <Widget>[
          SizedBox(
            height: 50.0,
          ),
          Center(child: Padding(
            padding: const EdgeInsets.all(0.0),
            child: Column(
              children: <Widget>[
                Image.asset("asset/login.png",height: 150,width: 150,),
                new Text("LOGIN",style:TextStyle(fontSize: 30)),
              ],
            ),
          )),
          new Padding(
            padding: const EdgeInsets.all(9.0),  
                child: Column(
                  children: <Widget>[pseudo, password,
                  SizedBox(
                    height: 20.0,
                  ),
                  Center(
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.end,
                      children: <Widget>[Center(child: cancelButton), Center(child: loginButton)],
                    ),
                  ),
                  ],
                ),
          ),
          SizedBox(height: 5.0,),
          createaccount
        ],
      ),
    );
  }
}

, а вот мой home.dart code

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:idobloodapp/drawer/maindrawer.dart';

class Home extends StatelessWidget {

  final idUser,username,firstname,lastname,gender,contact,address,bloodtype;
  Home({Key key, this.idUser,this.firstname,this.lastname,this.username,this.gender,this.contact,this.address,this.bloodtype}) : super(key: key);


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color.fromRGBO(244, 13, 48, 1),
      appBar: AppBar(
        elevation:0.0,
         backgroundColor: Color.fromRGBO(244, 13, 48, 1),
        title: Text(
          "DATA",
          style: TextStyle(color: Colors.black),
        ),

        actions: <Widget>[
          FlatButton.icon(
            icon: Icon(FontAwesomeIcons.signOutAlt),
            label: Text('LOGOUT'),
            onPressed: () async {
              // await _auth.signOut();
            },
          )
        ], //remove drop shadow
      ),

        drawer:MainDrawer(),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.start,

          children:<Widget>[

            Row(
              mainAxisAlignment: MainAxisAlignment.start,
              children: <Widget>[
                Padding(
                  padding: const EdgeInsets.only(left: 100.0,top:7.0),
                  child: Row(
                    children: <Widget>[
                      CircleAvatar(
                        radius:50,
                        backgroundImage:AssetImage("asset/kitty.jpeg"),
                      ),
                         Padding(
                           padding: const EdgeInsets.only(left:28.0),
                           child: Row(
                             children: <Widget>[
                               Text("$bloodtype",
                               style:TextStyle(fontWeight: FontWeight.bold,
                                fontSize: 28.0, color: Colors.white

                                )

                               ),
                             ],
                           ),
                         ),
                    ],
                  ),
                ),

              ],
            ),
                 Padding(
                   padding: const EdgeInsets.only(left:100.0),
                   child: Row(
                    // crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Expanded(
                                              child: Column(
                          children: <Widget>[

                            Text("$firstname $lastname",
                            style:TextStyle(fontWeight: FontWeight.bold,
                            fontSize: 28.0, color: Colors.white,


                            ),
                             overflow: TextOverflow.ellipsis,
                            ),
                          ],
                        ),
                      ),
                    ],
                ),
                 ),

              Padding(
                padding: const EdgeInsets.only(left:100.0),
                child: Row(
                  children: <Widget>[
                    Text("@ $username",
                     style:TextStyle(fontWeight: FontWeight.bold,
                          fontSize: 28.0, color: Colors.white,
                    ),
                    ),
                  ],
                ),
              ),
              Expanded(
                child: Container(
                  width:double.infinity,
                  margin:EdgeInsets.only(top:15),
                  decoration:BoxDecoration(
                    color:Colors.white,
                  ) ,
                  child: Padding(
                    padding: const EdgeInsets.only(top:18.0),
                    child: Column(
                      mainAxisAlignment:MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                         Row(
                           children: <Widget>[
                             Icon(Icons.person,size: 40,color: Color.fromRGBO(244, 13, 48, 1),),
                             Text("$gender",style:TextStyle(
                               fontSize:40
                             ),
                              overflow: TextOverflow.ellipsis,),
                           ],
                         ),
                            Row(
                              children: <Widget>[
                                Icon(Icons.contact_phone,size: 40,color: Color.fromRGBO(244, 13, 48, 1),),
                                Text("$contact",style:TextStyle(
                               fontSize:40
                             )),
                              ],
                            ),
                           Expanded(
                                                          child: Row(
                                children: <Widget>[
                                  Icon(Icons.location_city,size: 40,color: Color.fromRGBO(244, 13, 48, 1),),
                                  Text("$address",style:TextStyle(
                                 fontSize:40
                               ),
                                overflow: TextOverflow.ellipsis,),
                                ],
                              ),
                            ),

                      ],
                    ),
                  ),
                ),
                ),


          ]
        ),
    );
  }



}

Когда я вошел в систему home.dart смог получить данные, и когда я go на другую страницу и go вернулся на мой home.dart, мои данные снова стали нулевыми (хотя мои таблица уже содержит данные пользователя). Итак, что мне добавить, чтобы home.dart никогда не получал null?

...