Flutter 颤振试验及其应用

Flutter 颤振试验及其应用,flutter,unit-testing,dart,testing,Flutter,Unit Testing,Dart,Testing,我有一个非常简单的底部导航,如下所示:- import 'package:blog_app/screens/create_blog_screen.dart'; import 'package:blog_app/screens/main_screen.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class Home extends StatefulWidget {

我有一个非常简单的底部导航,如下所示:-

import 'package:blog_app/screens/create_blog_screen.dart';
import 'package:blog_app/screens/main_screen.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class Home extends StatefulWidget {
  const Home({Key key}) : super(key: key);

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

class _HomeState extends State<Home> {
  int pageIndex = 0;
  PageController pageController = PageController();
  void changePage(int i) {
    setState(() {
      pageIndex = i;
      pageController.jumpToPage(i);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(
        onPageChanged: changePage,
        children: [
          const MainScreen(0),
          CreateBlogScreen(),
          const MainScreen(2),
        ],
        controller: pageController,
      ),
      bottomNavigationBar: CupertinoTabBar(
        onTap: changePage,
        currentIndex: pageIndex,
        items: const [
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.add_circle_outline),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.list_alt_rounded),
          ),
        ],
      ),
    );
  }
}

但是由于这个错误,测试失败了

在构造函数中调用setState():_HomeState#d1c32(生命周期状态:已创建,无小部件,未装入) 当您对尚未插入小部件树的小部件的状态对象调用setState()时,就会发生这种情况。无需在构造函数中调用setState(),因为在初始创建状态时,已假定该状态为脏状态

如何正确执行此操作?

如果我是你,我会使用此选项。您可以模拟点击底部导航栏,然后
expect
查找
main屏幕
CreateBlogScreen
import 'package:flutter_test/flutter_test.dart';
import 'package:blog_app/home.dart';

void main() {
  group('Navigation', () {
    final home = Home();
    final homeState = home.createState();
    test('pageIndex should start at 0', () {
      expect(homeState.pageIndex, 0);
    });
    test('pageIndex and pageController.page should be changed', () {
      homeState.changePage(1);
      expect(homeState.pageIndex, 1);
      expect(homeState.pageController.page, 1);
    });
  });
}