4

这是我的一段代码,但请在下结论之前阅读问题:

class RescheduleCard extends StatelessWidget {

@override
  Widget build(BuildContext context)=> Consumer<AppSnapshot>(
    builder: (context, appSnapshot, _)=>
    (appSnapshot.reschedule!=null)
    ?RescheduleBuilder(
          model: appSnapshot.reschedule,
          controllers: appSnapshot.controllers,
        )
    :Carouselcard(
      title:  carouselPageTitle(title: rescheduleTitle,test: appSnapshot.test),
      colors: yellows,

所以我对提供者有点陌生,而且我已经习惯了 Bloc,我的 api 曾经收到一些调用提供者并设置模型;

编辑:这里的供应商 256 行与“重新安排”有关...

class AppSnapshot with ChangeNotifier {

  RescheduleModel _reschedule;
  RescheduleModel get reschedule => _reschedule;

  void cleanReschedule() {
    reschedule=null;
    notifyListeners();
  }

  set reschedule(RescheduleModel reschedule) {
    _reschedule=reschedule;
    notifyListeners();
  }
}

重新编辑:最重要的是:

void main() async {
  final AppSnapshot _appSnapshot = AppSnapshot();
  await _appSnapshot.load();
  runApp(ChangeNotifierProvider(
          builder: (context) => _appSnapshot,
          child: Initializer()));
}

我期待“消费者”重建我的小部件,但没有!

我确定数据在那里,因为小部件位于旋转木马内,一旦我移动它,它就会正确重建。

我错过了什么?谢谢你

重新编辑:这是另一个轮播卡的示例,其中提供者可以快速工作并且实时应用更改

 Consumer<AppSnapshot>(
    builder: (context, appSnapshot, _)=> Carouselcard(
      title: carouselPageTitle(title: optionsTitle,test: appSnapshot.test),
      colors: lightBlues,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          ((appSnapshot.id??'')!='')                                                        // ID WIDGET
            ? ListTile(
              leading: CustomIcon(
                icon: deleteIcon,
                onTap: () => appSnapshot.deleteID(),
              ),
              title: _customCard(onTap:()=> _showID(id: appSnapshot.id,context: context)),
              subtitle: Text(tap2delete,textScaleFactor:0.8),
            )
            : IdTile(), 
4

2 回答 2

1

根据这篇文章FutureProvider它不会监听更改,它只会Consumers在 Future 完成时重建 1 次。

文章甚至解释了作者是如何对此进行测试的。

Dart Provider 包的开发者还解释FutureProvider.

于 2020-04-06T03:48:19.787 回答
0

在 main.dart 中指定类型

void main() async {
final AppSnapshot _appSnapshot = AppSnapshot();
await _appSnapshot.load();
runApp(ChangeNotifierProvider< **AppSnapshot** >(
      builder: (context) => _appSnapshot,
      child: Initializer()));
} 
于 2019-12-18T12:33:12.180 回答