在 2 个选项卡之间切换时,Tabview 未随提供程序更新

pho*_*ong 6 dart flutter

我正在使用提供程序来更新我的小部件,但是当我切换选项卡时它不会更新。我用错了吗?

图表.dart

Widget chart(BuildContext context, ChartType chartType) {
  return FutureBuilder<void>(
    future: Provider.of<ChartModel>(context, listen: false).loadChartHabits(),
    builder: (context, data) => Container(
      Text(data);
    );
  );
}


class Charts extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          appBar: AppBar(
            bottom: TabBar(
              <Tab>[
                Tab(text: Constants.weekly),
                Tab(text: Constants.monthly),
              ],
            ),
            title: Text('Tabs Demo'),
          ),
          body: TabBarView(
            children: [
               chart(context, ChartType.Weekly),
               chart(context, ChartType.Monthly),
            ],
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我也在 main.dart 中添加了这个

MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => TodayModel()),
        ChangeNotifierProvider(create: (_) => ChartModel()),
      ],
Run Code Online (Sandbox Code Playgroud)

更新:它在我放置加载图表后工作,但这是加载数据的正确方法而不是需要等待吗?我需要等待数据回来。

    appBar: TabBar(
              tabs: <Tab>[
                Tab(text: Constants.weekly),
                Tab(text: Constants.monthly),
              ],
              onTap: (value) {
                Provider.of<ChartModel>(context, listen: false).loadChart(ChartType.values[value]);
              },
            ),
Run Code Online (Sandbox Code Playgroud)

小智 0

你应该使用 Consumer 而不是 FutureBuilder

 return  Consumer<ChartModel>(
          builder: (_, provider, __) {
            return Container(child:Text(provider.data));
              
           
          },
        );
Run Code Online (Sandbox Code Playgroud)