根据这个sample code
我创建了自己的TabController实现:
void main() {
runApp(new MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = new TabController(vsync: this, length: choices.length);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
bottomNavigationBar: new Material(
color: Colors.blue,
child: new TabBar(
controller: _tabController,
isScrollable: false,
tabs: choices.map((Choice choice) {
return new Tab(
text: null,
icon: new Icon(choice.icon),
);
}).toList(),
),
),
appBar: new AppBar(
title: const Text('Swap'),
),
body: new TabBarView(
controller: _tabController,
children: choices.map((Choice choice) {
return new Padding(
padding: const EdgeInsets.all(16.0),
child: new ChoiceCard(choice: choice),
);
}).toList(),
),
),
);
}
}
在行:_tabController = new TabController(vsync: this, length: choices.length);
中,我收到错误消息:
错误:参数类型"_MyAppState"无法分配给参数类型"TickerProvider"。([swap] lib/main. dart处的参数类型不可分配:24)
我的代码有什么问题?
9条答案
按热度按时间mrphzbgm1#
在语句末尾添加以下任意一个SingleTickerProviderStateMixin/TickerProviderStateMixin混合函数,如下所示:
例如:
class_ListingViewState使用单个计时器提供者状态混合{}扩展状态
kuuvgm7e2#
只需在类中使用SingleTickerProviderStateMixin进行扩展,就可以看到here full code
jdgnovmf3#
将
with TickerProviderStateMixin
添加到State
的类声明的末尾。iovurdzv4#
只需在extends状态类的末尾添加
with TickerProviderStateMixin
,如下所示:prdp8dxp5#
如前面所述,添加
mixin
后,TickerProviderStateMixin
应该可以完成此任务;如果您只需要一个Ticker
,也可以使用SingleTickerProviderStateMixin
。但是
TickerProviders
到底是做什么的呢?vsync
将TickerProvider
作为参数,这就是我们使用SingleTickerProviderStateMixin
的原因,正如named所描述的那样,TickerProvider
提供Ticker
,这仅仅意味着它将通知我们的应用有关帧更新(或屏幕更新),以便我们的AnimationController
可以生成新值,我们可以重绘动画小部件。zlwx9yxi6#
问题非常一般,因此需要详细描述
垂直同步用于
内部实施
TabController
在内部使用AnimationController
来呈现选项卡栏状态svmlkihl7#
在类状态末尾添加***TickerProviderStateMixin***
以下是完整示例
6xfqseft8#
上面的答案是正确的,但是你必须在类中声明一个标签栏,并从iniState初始化标签栏,否则vsync变量不接受'this'下面的代码可能会帮助你。
pn9klfpd9#
在GetX中
我发现了一个解决方案,只是添加与SingleGetTickerProviderMixin是完整的代码如下: