Flutter TabBar没有TabController
我正在尝试向我的应用程序添加一个选项卡,但在构建时遇到了一些问题。我已经按照文档添加了一个tabController,但是我得到一个错误,说我没有。我的代码如下Flutter TabBar没有TabController,flutter,dart,Flutter,Dart,我正在尝试向我的应用程序添加一个选项卡,但在构建时遇到了一些问题。我已经按照文档添加了一个tabController,但是我得到一个错误,说我没有。我的代码如下 class _MyAppState extends State<MyApp> with TickerProviderStateMixin { TabController _controller; final List<Tab> topTabs = <Tab>[ new Tab(text
class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
TabController _controller;
final List<Tab> topTabs = <Tab>[
new Tab(text: 'Profile'),
new Tab(text: 'Match'),
new Tab(text: 'Chat'),
];
@override
void initState() {
super.initState();
_controller = TabController(vsync: this, length: 3);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MyApp'),
bottom: TabBar(
controller: _controller,
tabs: topTabs,
),
),
body: TabBarView(
controller: _controller,
children: [
new Container(
color: Colors.lightBlueAccent,
child: Center(child: Text('Profile', style: TextStyle(color: Colors.white),),),
),
new Container(
color: Colors.purpleAccent,
child: Center(child: Text('Match', style: TextStyle(color: Colors.white),),),
),
new Container(
color: Colors.lightGreenAccent,
child: Center(child: Text('Chat', style: TextStyle(color: Colors.white),),),
)
]),
);
}
}
class\u MyAppState使用TickerProviderStateMixin扩展状态{
TabController\u控制器;
最终列表topTabs=[
新选项卡(文本:“配置文件”),
新选项卡(文本:“匹配”),
新建选项卡(文本:“聊天”),
];
@凌驾
void initState(){
super.initState();
_controller=TabController(vsync:this,长度:3);
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“MyApp”),
底部:选项卡栏(
控制器:_控制器,
选项卡:顶部选项卡,
),
),
正文:选项卡视图(
控制器:_控制器,
儿童:[
新容器(
颜色:Colors.lightBlueAccent,
子:居中(子:文本('Profile',样式:TextStyle(颜色:Colors.white),),),
),
新容器(
颜色:颜色。紫红色,
子:居中(子:文本('Match',样式:TextStyle(颜色:Colors.white),),),
),
新容器(
颜色:颜色。浅绿色口音,
child:Center(child:Text('Chat',style:TextStyle(颜色:Colors.white),),),
)
]),
);
}
}
准确的误差是颤振:══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════
颤振:在构建MediaQuery(MediaQueryData)(大小:size(375.0667.0))时抛出以下断言,
颤振:devicePixelRatio:2.0,textScaleFactor:1.0,平台亮度:亮度。灯光,填充:
颤振:EdgeInsets.zero,视图填充:EdgeInsets.zero,视图插入:EdgeInsets.zero,物理深度:
颤振:1.7976931348623157e+308,始终使用24小时格式:假,可访问颤振:假,高对比度:
flatter:false,disableAnimations:false,invertColor:false,boldText:false):
颤振:TabBar没有TabBar控制器。
颤振:创建选项卡栏时,必须使用“控制器”提供显式选项卡控制器
属性,否则必须确保选项卡栏上方有一个DefaultTabController。
颤振:在这种情况下,既没有显式控制器,也没有默认控制器。我可以毫无问题地运行它,您是否在创建项目时过度编写了MyApp示例,该项目的MaterialApp包含您的代码或在main之前的内容
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyAppState()
);
}
}
class MyAppState extends StatefulWidget{
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyAppState> with TickerProviderStateMixin {
TabController _controller;
final List<Tab> topTabs = <Tab>[
new Tab(text: 'Profile'),
new Tab(text: 'Match'),
new Tab(text: 'Chat'),
];
@override
void initState() {
super.initState();
_controller = TabController(vsync: this, length: 3);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MyApp'),
bottom: TabBar(
controller: _controller,
tabs: topTabs,
),
),
body: TabBarView(
controller: _controller,
children: [
new Container(
color: Colors.lightBlueAccent,
child: Center(child: Text('Profile', style: TextStyle(color: Colors.white),),),
),
new Container(
color: Colors.purpleAccent,
child: Center(child: Text('Match', style: TextStyle(color: Colors.white),),),
),
new Container(
color: Colors.lightGreenAccent,
child: Center(child: Text('Chat', style: TextStyle(color: Colors.white),),),
)
]),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
主页:MyAppState()
);
}
}
类MyAppState扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState使用TickerProviderStateMixin扩展状态{
TabController\u控制器;
最终列表topTabs=[
新选项卡(文本:“配置文件”),
新选项卡(文本:“匹配”),
新建选项卡(文本:“聊天”),
];
@凌驾
void initState(){
super.initState();
_controller=TabController(vsync:this,长度:3);
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“MyApp”),
底部:选项卡栏(
控制器:_控制器,
选项卡:顶部选项卡,
),
),
正文:选项卡视图(
控制器:_控制器,
儿童:[
新容器(
颜色:Colors.lightBlueAccent,
子:居中(子:文本('Profile',样式:TextStyle(颜色:Colors.white),),),
),
新容器(
颜色:颜色。紫红色,
子:居中(子:文本('Match',样式:TextStyle(颜色:Colors.white),),),
),
新容器(
颜色:颜色。浅绿色口音,
child:Center(child:Text('Chat',style:TextStyle(颜色:Colors.white),),),
)
]),
);
}
}
我可以毫无问题地运行它,您是否在创建项目时过度编写了MyApp示例,该项目的MaterialApp包含您的代码或在主应用程序之前的内容
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyAppState()
);
}
}
class MyAppState extends StatefulWidget{
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyAppState> with TickerProviderStateMixin {
TabController _controller;
final List<Tab> topTabs = <Tab>[
new Tab(text: 'Profile'),
new Tab(text: 'Match'),
new Tab(text: 'Chat'),
];
@override
void initState() {
super.initState();
_controller = TabController(vsync: this, length: 3);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MyApp'),
bottom: TabBar(
controller: _controller,
tabs: topTabs,
),
),
body: TabBarView(
controller: _controller,
children: [
new Container(
color: Colors.lightBlueAccent,
child: Center(child: Text('Profile', style: TextStyle(color: Colors.white),),),
),
new Container(
color: Colors.purpleAccent,
child: Center(child: Text('Match', style: TextStyle(color: Colors.white),),),
),
new Container(
color: Colors.lightGreenAccent,
child: Center(child: Text('Chat', style: TextStyle(color: Colors.white),),),
)
]),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
主页:MyAppState()
);
}
}
类MyAppState扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState使用TickerProviderStateMixin扩展状态{
TabController\u控制器;
最终列表topTabs=[
新选项卡(文本:“配置文件”),
新选项卡(文本:“匹配”),
新建选项卡(文本:“聊天”),
];
@凌驾
void initState(){
super.initState();
_controller=TabController(vsync:this,长度:3);
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“MyApp”),
底部:选项卡栏(
控制器:_控制器,
选项卡:顶部选项卡,
),
),
正文:选项卡视图(
控制器:_控制器,
儿童:[
新康泰