Экран Spla sh, экран загрузки и входа в Flutter Visual Studio Code - PullRequest
1 голос
/ 13 июля 2020

У меня есть несколько вопросов, потому что я немного запутался и не знаю, с чего начать. Я создаю экран spla sh (и он работает правильно), но после экрана spla sh я ожидаю, что следующим будет подключение, но когда я запускаю приложение, оно показывает spla sh, а затем логин. Нужно ли мне создавать класс в main.dart для всего экрана?

main
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/physics.dart';
import 'package:flutter_app/splash_screen.dart';
import 'package:flutter/services.dart';
import 'package:flutter_app/onboarding_screen.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);

    return MaterialApp(
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        debugShowCheckedModeBanner: false,
        home: SplashScreen());
  }
}

class OnboardingScreen extends StatelessWidget {
  const OnboardingScreen({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Travel On Boarding",
    );
  }
}
splash Screen
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:shimmer/shimmer.dart';
import 'package:flutter_app/onboarding_screen.dart';
import 'package:flutter_app/login_screen.dart';

class SplashScreen extends StatefulWidget {
  @override
  _SplashScreenState createState() => _SplashScreenState();
}

class _SplashScreenState extends State<SplashScreen> {
  @override
  void initState() {
    super.initState();

    _mockCheckForSession().then((status) {
      if (status) {
        _navigateToHome();
      } else {
        _navigateToLogin();
      }
    });
  }

  Future<bool> _mockCheckForSession() async {
    await Future.delayed(Duration(milliseconds: 6000), () {});

    return true;
  }

  void _navigateToHome() {
    Navigator.of(context).pushReplacement(
        MaterialPageRoute(builder: (BuildContext context) => LoginScreen()));
  }

  void _navigateToLogin() {
    Navigator.of(context).pushReplacement(
        MaterialPageRoute(builder: (BuildContext context) => LoginScreen()));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      body: Container(
        child: Stack(
          alignment: Alignment.center,
          children: <Widget>[
            Opacity(
              opacity: 0.5,
              child: Image.asset('assets/img/bg.png'),
            ),
            Shimmer.fromColors(
              period: Duration(milliseconds: 2000),
              baseColor: Color(0xffffffff),
              highlightColor: Color(0xff000000),
              child: Container(
                alignment: Alignment.center,
                padding: EdgeInsets.all(30.0),
                child: Text(
                  "ASE",
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: 90.0,
                    fontFamily: 'Pacifico',
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

onboarding
import 'package:flutter/material.dart';

class OnboardingScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Onboarding')),
        body: Center(
          child: Card(
            color: Colors.grey[300],
            elevation: 10.0,
            child: Container(
                height: 100.0,
                width: 100.0,
                alignment: Alignment.center,
                child: Text(
                  'Welcome Home!',
                  textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 20.0),
                )),
          ),
        ));
  }
}

Login
import 'package:flutter/material.dart';

class LoginScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Login')),
        body: Center(
          child: Container(
              alignment: Alignment.center,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Container(
                    margin: EdgeInsets.all(8.0),
                    child: TextField(
                      decoration: InputDecoration(hintText: "Enter Username"),
                    ),
                  ),
                  Container(
                    margin: EdgeInsets.all(8.0),
                    child: TextField(
                      decoration: InputDecoration(hintText: "Enter Password"),
                    ),
                  ),
                  MaterialButton(
                    onPressed: () {},
                    child: Text("Login", style: TextStyle(color: Colors.white)),
                    color: Colors.blueAccent,
                  )
                ],
              )),
        ));
  }
}

1 Ответ

0 голосов
/ 13 июля 2020

просто измените эту функцию таким образом

void _navigateToHome() {
    Navigator.of(context).pushReplacement(
        MaterialPageRoute(builder: (BuildContext context) => OnboardingScreen()));
  }
...