// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/material.dart'; import 'package:test/test.dart'; class FirstComponent extends StatelessComponent { Widget build(BuildContext context) { return new GestureDetector( onTap: () { Navigator.pushNamed(context, '/second'); }, child: new Container( decoration: new BoxDecoration( backgroundColor: new Color(0xFFFFFF00) ), child: new Text('X') ) ); } } class SecondComponent extends StatefulComponent { SecondComponentState createState() => new SecondComponentState(); } class SecondComponentState extends State<SecondComponent> { Widget build(BuildContext context) { return new GestureDetector( onTap: () => Navigator.pop(context), child: new Container( decoration: new BoxDecoration( backgroundColor: new Color(0xFFFF00FF) ), child: new Text('Y') ) ); } } void main() { test('Can navigator navigate to and from a stateful component', () { testWidgets((WidgetTester tester) { final Map<String, RouteBuilder> routes = <String, RouteBuilder>{ '/': (RouteArguments args) => new FirstComponent(), '/second': (RouteArguments args) => new SecondComponent(), }; tester.pumpWidget(new MaterialApp(routes: routes)); expect(tester.findText('X'), isNotNull); expect(tester.findText('Y'), isNull); tester.tap(tester.findText('X')); tester.pump(const Duration(milliseconds: 10)); expect(tester.findText('X'), isNotNull); expect(tester.findText('Y'), isNotNull); tester.pump(const Duration(milliseconds: 10)); tester.pump(const Duration(milliseconds: 10)); tester.pump(const Duration(seconds: 1)); tester.tap(tester.findText('Y')); tester.pump(const Duration(milliseconds: 10)); tester.pump(const Duration(milliseconds: 10)); tester.pump(const Duration(milliseconds: 10)); tester.pump(const Duration(seconds: 1)); expect(tester.findText('X'), isNotNull); expect(tester.findText('Y'), isNull); }); }); }