Страница флаттера обновляется и не может остановиться - PullRequest
0 голосов
/ 16 апреля 2020

Я создал приложение, чтобы проверить, является ли ответ на мой HTTP-запрос «ИСТИНА», и затем перейти к другому экрану. Весь смысл тестирования это сделать страницу входа. Чтобы я мог передать параметры с помощью getText (), а затем передать его по URL-адресу позже.

Приложения работают нормально, но страница приветствия продолжает мигать. Оно продолжает появляться и исчезать, а затем снова возвращаться. это никогда не останавливается. Могу я узнать почему?

Это мой код в файле main.dart

import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'Welcome.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var text;
  void getData() async {
    Response response = await get(
    'http://192.168.8.101/DIVSS%20ENGINE/DivssService.asmx/GetCustomerDetailsForMobile?CustEmail=test&CustPassword=123');
    print(response.body);
    if (response.body == '"TRUE"') {
      Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => Welcome(),
    ),
      );
   }
  }

  @override
  Widget build(BuildContext context) {
    getData();
    return Scaffold(
  body: Center(
    child: Text(text),
  ),
);
}
}

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Вы можете иметь переменную состояния, чтобы определить, какую страницу

class _MyHomePageState extends State<MyHomePage> {
  var text;
  bool isLoggedIn = false;

  @override
  void initState() async {
    super.initState();
    getData();
  }

  void getData() async {
    Response response = await get(
        'http://192.168.8.101/DIVSS%20ENGINE/DivssService.asmx/GetCustomerDetailsForMobile?CustEmail=test&CustPassword=123');
    print(response.body);
    if (response.body == '"TRUE"') {
      setState(() {
        isLoggedIn = true;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return isLoggedIn ? Scaffold(
      body: Center(
        child: Text(text),
      ),
    ) : Welcome();
  }
}

Переменная состояния isLoggedIn поможет вашему конструктору дерева виджетов узнать, какой виджет создавать.

Надеюсь, что приведенный выше код помогает!

0 голосов
/ 16 апреля 2020

Попробуйте перевести getData() вызов на initstate()

  @override
  void initState() async {
    super.initState();
    await getData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(text),
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...