如何使活动堆栈在抖动中为空?

时间:2018-12-08 14:59:04

标签: flutter

我有4个演练屏幕,当我转到此处名为TestScreen的应用程序主页时,到达屏幕末尾时,当我按手机中的后退按钮时,我再次返回到演练页面我不想要,它也会引发异常(“断言失败:1554行pos 12:'!_debugLocked':不正确。”)。所以我在想,如果我进入TestScreen后使活动堆栈为空,它可能会起作用,但我却不能这样做。请帮助我。

Main.dart

library flutter_walkthrough;

import 'package:flutter/material.dart';
import 'package:comp_apps/walkthrough.dart';

void main(){
   runApp(MyApp());
}

class MyApp extends StatelessWidget {
final List<Walkthrough> list = [
Walkthrough(
  title: "Title 1",
  content: "Content 1",
  imageIcon: Icons.restaurant_menu,
),
Walkthrough(
  title: "Title 2",
  content: "Content 2",
  imageIcon: Icons.search,
),
Walkthrough(
  title: "Title 3",
  content: "Content 3",
  imageIcon: Icons.shopping_cart,
),
Walkthrough(
  title: "Title 4",
  content: "Content 4",
  imageIcon: Icons.verified_user,
),
];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: IntroScreen(list, MaterialPageRoute(builder: (context)=> 
TestScreen())).,
    );
  }
}
class TestScreen extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return Scaffold(
  appBar: AppBar(
    title: Text("Hello"),
    automaticallyImplyLeading: false,
  ),
);
 }
}

 class IntroScreen extends StatefulWidget {
final List<Walkthrough> walkthroughList;
final MaterialPageRoute pageRoute;
IntroScreen(this.walkthroughList, this.pageRoute);

void skipPage(BuildContext context) {
   Navigator.push(context, pageRoute);
}

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

class _IntroScreenState extends State<IntroScreen> {
  final PageController controller = new PageController();
  int currentPage = 0;
  bool lastPage = false;

  void _onPageChanged(int page) {
    setState(() {
      currentPage = page;
      if (currentPage == widget.walkthroughList.length - 1) {
        lastPage = true;
      } else {
        lastPage = false;
      }
    });
   }

  @override
  Widget build(BuildContext context) {
     return Container(
      color: Color(0xFFEEEEEE),
      padding: const EdgeInsets.all(10.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
          Expanded(
            child: Container(),
            flex: 1,
          ),
          Expanded(
            flex: 3,
            child: PageView(
              children: widget.walkthroughList,
              controller: controller,
              onPageChanged: _onPageChanged,
            ),
          ),
          Expanded(
        flex: 1,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.end,
          children: <Widget>[
            FlatButton(
              child: Text(
                lastPage ? "" : "SKIP",
                style: TextStyle(
                    color: Colors.black,
                    fontWeight: FontWeight.bold,
                    fontSize: 16.0),
              ),
              onPressed: () => lastPage ? null : widget.skipPage(context),
            ),
            FlatButton(
              child: Text(
                lastPage ? "GOT IT" : "NEXT",
                style: TextStyle(
                  color: Colors.black,
                  fontWeight: FontWeight.bold,
                  fontSize: 16.0,
                ),
              ),
                  onPressed: () => lastPage
                      ? widget.skipPage(context)
                      : controller.nextPage(
                          duration: Duration(milliseconds: 300),
                      curve: Curves.easeIn),
                 )
              ],
            ),
          )
        ],
      ),
    );
  }
}

Walkthrough.dart

import 'package:flutter/material.dart';

class Walkthrough extends StatefulWidget {
  final title;
  final content;
  final imageIcon;
  final imagecolor;

  Walkthrough({this.title, this.content, this.imagecolor, this.imageIcon});

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

 class _WalkthroughState extends State<Walkthrough>
    with SingleTickerProviderStateMixin {
  Animation animation;
  AnimationController animationController;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    animationController = AnimationController(vsync: this,duration: 
Duration(milliseconds: 500));
    animation = Tween(
      begin: -250.0, end: 0.0).animate(CurvedAnimation(parent: 
animationController, curve: Curves.easeInOut));
    animation.addListener(() => setState(() {}));
    animationController.forward();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    animationController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.all(20.0),
      child: Material(
        animationDuration: Duration(milliseconds: 500),
        elevation: 2.0,
       borderRadius: BorderRadius.all(Radius.circular(5.0)),
    child: Column(
      mainAxisSize: MainAxisSize.min,
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: <Widget>[
        Transform(
          transform: Matrix4.translationValues(animation.value, 0.0, 0.0),
          child: Text(widget.title,style: TextStyle(
            fontSize: 20.0,
            fontWeight: FontWeight.bold,
            color: Colors.black
          ),),
        ),
        Transform(
          transform: Matrix4.translationValues(animation.value, 0.0, 0.0),
          child: Text(widget.content,
          softWrap: true,
          textAlign: TextAlign.center,
          style: TextStyle(
            fontWeight: FontWeight.normal,
            fontSize: 15.0,
            color: Colors.black,
          ),),
        ),
        Icon(
          widget.imageIcon,
          size: 100.0,
          color: widget.imagecolor,
        )
      ],
    ),
  ),
);
 }
}

0 个答案:

没有答案