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

标签 flutter dart

我正在使用提供程序来更新我的小部件,但是当我切换选项卡时它不会更新。我用错了吗?
图表.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),
            ],
          ),
        ),
      ),
    );
  }
}
我也在 main.dart 中添加了这个
MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => TodayModel()),
        ChangeNotifierProvider(create: (_) => ChartModel()),
      ],
更新:它在我放置加载图表后工作,但这是加载数据的正确方法而不是需要等待吗?我需要等待数据回来。
    appBar: TabBar(
              tabs: <Tab>[
                Tab(text: Constants.weekly),
                Tab(text: Constants.monthly),
              ],
              onTap: (value) {
                Provider.of<ChartModel>(context, listen: false).loadChart(ChartType.values[value]);
              },
            ),

最佳答案

你应该使用 Consumer 而不是 FutureBuilder

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

关于flutter - 在 2 个选项卡之间切换时,Tabview 未随提供程序更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60244972/

相关文章:

flutter - 自动填充条件的textformfield Controller

flutter - 使连续的按钮在 flutter 中具有相同的宽度

c++ - 在 Flutter 应用程序中使用来自 Android NDK 的 AssetManager 类

flutter - List.add 和手动将项目添加到 Riverpod StateNotifier<List<String>> 之间的区别

image - 检查图像 Assets 是否存在( flutter )

android - Flutter in_app_purchase 停留在 queryProductDetails() 方法

Dart - 播放一个 Futures 循环

html - 如何检查InputElement是否是Dart中的复选框

在同一属性上 flutter 交错动画

json - 解析JSON以转换为Model类