fayaz07 / animated_splash

A light weight package for flutter apps, that easily shows a splash screen with a nice fade animation.
https://pub.dev/packages/animated_splash
Apache License 2.0
110 stars 26 forks source link

Problem loading screen #4

Open cmregazzo opened 5 years ago

cmregazzo commented 5 years ago

Good afternoon,

First of all, congratulations on the plugin, very good idea.

I have a problem; Calling my class is generating the following error:

Looking up a deactivated widget's ancestor is unsafe. E / flutter (2844): At this point the state of the widget's element tree is no longer stable. E / flutter (2844): To safely refer to a widget's ancestor in its dispose () method, save a reference to its ancestor by calling inheritFromWidgetOfExactType () in the widget's didChangeDependencies () method.

This error is generated when calling screen after Splash Screen.

Should I configure something in my class not to generate such a problem, or this is really a plugin problem.

Thanks.

fayaz07 commented 5 years ago

Hi, Good morning, can you drop the code actually you are trying to execute here!

ferdinandocecchini commented 4 years ago

Here is a code that generate the error (excuse me if it's too long, but it's fully functional) :

import 'package:flutter/material.dart';
import 'package:rflutter_alert/rflutter_alert.dart';
import 'dart:math';
import 'package:animated_splash/animated_splash.dart';

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

class MyApp extends StatelessWidget {
  final Function duringSplash = () {
    int rnd = Random().nextInt(10);
    print('rnd $rnd');
    return rnd < 5 ? 1 : 2;
    //return 1;
  };

  final Map op = {1: MainScreen(), 2: DummyScreen()};

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AnimatedSplash(
        imagePath: 'assets/images/Banner-BooksRoom-mobile.png',
        home: MainScreen(),
        customFunction: duringSplash,
        duration: 5000,
        type: AnimatedSplashType.BackgroundProcess,
        outputAndHome: op,
      ),
    );
  }
}

class MainScreen extends StatefulWidget {
  @override
  _MainScreenState createState() => _MainScreenState();
}

class _MainScreenState extends State {
  TextEditingController usernameController = TextEditingController();
  TextEditingController passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("BooksRoom.it"),
        leading: Icon(Icons.menu),
        backgroundColor: Colors.amber[700],
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 40.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              TextField(
                controller: usernameController,
                keyboardType: TextInputType.emailAddress,
                decoration: InputDecoration(
                    floatingLabelBehavior: FloatingLabelBehavior.auto,
                    labelText: 'Email'),
              ),
              const SizedBox(height: 30),
              TextField(
                controller: passwordController,
                keyboardType: TextInputType.text,
                obscureText: true,
                decoration: InputDecoration(
                    floatingLabelBehavior: FloatingLabelBehavior.auto,
                    labelText: 'Password'),
              ),
              const SizedBox(height: 30),
              Row(
                children: [
                  Expanded(
                    child: RaisedButton(
                      child: Text(
                        'Accedi',
                        style: TextStyle(
                          fontSize: 20.0,
                          fontWeight: FontWeight.bold,
                          color: Colors.white,
                        ),
                      ),
                      color: Colors.blueAccent,
                      padding: EdgeInsets.symmetric(vertical: 20.0),
                      onPressed: () {
                        if (usernameController.text.isEmpty ||
                            passwordController.text.isEmpty) {
                          Alert(
                            context: context,
                            type: AlertType.error,
                            title: 'Attenzione!',
                            desc: 'Tutti i campi sono obbligatori!',
                            buttons: [
                              DialogButton(
                                  child: Text('OK'),
                                  onPressed: () {
                                    Navigator.pop(context);
                                  })
                            ],
                          ).show();
                        } else {
                          Alert(
                            context: context,
                            type: AlertType.info,
                            title: 'Attenzione!',
                            desc:
                                'username = ${usernameController.text}\npassword = ${passwordController.text}',
                            buttons: [
                              DialogButton(
                                  child: Text('OK'),
                                  onPressed: () {
                                    Navigator.pop(context);
                                  })
                            ],
                          ).show();
                        }
                      },
                    ),
                  ),
                ],
              )
            ],
          ),
        ),
      ),
    );
  }
}

class DummyScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Container(
        color: Colors.teal,
        child: Center(
          child: Text('Dummy Screen',
              style: TextStyle(
                  color: Colors.yellow,
                  fontSize: 40,
                  fontWeight: FontWeight.bold)),
        ),
      ),
    );
  }
}

Thanks in advance

fayaz07 commented 4 years ago

Hi @ferdinandocecchini , I will look into it. Thanks

ArmenLevoni commented 4 years ago

Getting the same error. E/flutter (23831): [ERROR:flutter/shell/common/shell.cc(213)] Dart Error: Unhandled exception: E/flutter (23831): Looking up a deactivated widget's ancestor is unsafe. E/flutter (23831): At this point the state of the widget's element tree is no longer stable. E/flutter (23831): To safely refer to a widget's ancestor in its dispose() method, save a refe