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);
});
});
}