无法将animationController作为参数传递给flutter中的有状态小部件

j91ykkif  于 2022-11-30  发布在  Flutter
关注(0)|答案(3)|浏览(178)

我试图将animationController作为参数传递给我的statefullwidget。但是得到这个错误。
无法在初始值设定项中访问示例成员“_controller”。请尝试将对示例成员的引用替换为其他表达式
我只是试图通过底部导航器添加动画到导航变化。
我的父小部件如下所示。

class _DashboardState extends State<Dashboard>
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;

  @override
  void initState() {
    _controller = AnimationController(
        vsync: this, duration: const Duration(milliseconds: 150));
    _controller.forward();
    super.initState();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  List<Widget> widgetList = [
    DashboardView(),
    CallLogs(
      animationController: _controller,
    ),
    ContactLogs(),
    UserProfile()
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: widgetList[context.watch<NavigationIndex>().index],
      ),
      bottomNavigationBar: const BottomNavigator(),
    );
  }
}

孩子看起来像这样

import 'package:flutter/material.dart';

class CallLogs extends StatefulWidget {
  final AnimationController animationController;
  const CallLogs({super.key, required this.animationController});

  @override
  State<CallLogs> createState() => _CallLogsState();
}

class _CallLogsState extends State<CallLogs> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: const Text("Call logs"),
    );
  }
}

任何帮助都将不胜感激。提前感谢。干杯。

piwo6bdm

piwo6bdm1#

您可以使用late关键字进行延迟初始化。

late List<Widget> widgetList = [
    DashboardView(),
    CallLogs(
      animationController: _controller,
    ),
    ContactLogs(),
    UserProfile()
  ];

关于late keyword with declaration的更多信息

cclgggtu

cclgggtu2#

List<Widget> widgetList =替换为List<Widget> get widgetList =>
widgetList变量是在创建类对象时赋值的。到那时,_controller还没有初始化,因此它为空。

rqqzpn5f

rqqzpn5f3#

将此getter添加到State类中:

AnimationController get controller => _controller;

然后在widgetList列表中,将_controller替换为controller

List<Widget> widgetList = [
    DashboardView(),
    CallLogs(
      animationController: controller,
    ),
    ContactLogs(),
    UserProfile()
  ];

相关问题