Флаттер несколько, используя Navigator.of (context). Overlay не работает - PullRequest
0 голосов
/ 07 июля 2019

этот код ниже представляет собой простую диалоговую реализацию, чтобы показать и скрыть Container после нажатия на кнопку, чтобы показать, что все в порядке, после нажатия на диалоговое окно, чтобы скрыть container тоже работает, теперь я хочу показать снова container сNavigator.of(context).overlay, это не работает

полный исходный код:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Home());
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Directionality(
        textDirection: TextDirection.rtl,
        child: Center(
          child: RaisedButton.icon(
            icon: Icon(Icons.notifications_active),
            label: Text('Notify!'),
            onPressed: () {
              Navigator.of(context).overlay.insert(OverlayEntry(builder: (BuildContext context) {
                return SlidingLayer();
              }));
            },
          ),
        ),
      ),
    );
  }
}

class SlidingLayer extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => SlidingLayerState();
}

class SlidingLayerState extends State<SlidingLayer> with SingleTickerProviderStateMixin {
  AnimationController controller;
  Animation<Offset> position;

  @override
  void initState() {
    super.initState();

    controller = AnimationController(vsync: this, duration: Duration(milliseconds: 750));
    position = Tween<Offset>(begin: Offset(0.0, -14.0), end: Offset.zero).animate(CurvedAnimation(parent: controller, curve: Curves.ease));

    controller.forward();
  }

  @override
  Widget build(BuildContext context) {
    return Material(
      color: Colors.transparent,
      child: Align(
        alignment: Alignment.topCenter,
        child: Padding(
          padding: EdgeInsets.only(top: 90.0),
          child: SlideTransition(
              position: position,
              child: Container(
                margin: EdgeInsets.all(10.0),
                height: 150.0,
                width: double.infinity,
                decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.0), boxShadow: [
                  BoxShadow(
                    color: Colors.black26,
                    blurRadius: 0.9,
                    spreadRadius: 0.5,
                    offset: Offset(0.0, 0.0),
                  ),
                ]),
                child: InkWell(
                  onTap: (){
                   controller.reverse();
                  },
                  child: Center(
                    child: Text(
                      'ssss',
                      style: TextStyle(
                        fontSize: 26.0,
                      ),
                    ),
                  ),
                ),
              )),
        ),
      ),
    );
  }
}
...