web-dev-qa-db-ja.com

Flutter Providerはウィジェットを再構築しません

これが私のコードの一部ですが、結論にジャンプする前に質問を読んでください:

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は一度プロバイダに電話をかけてモデルを設定します。

編集:これは「再スケジュール」に関心を持つものにトリップしたプロバイダです...

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()));
}
 _

私は「消費者」が私のウィジェットを再構築することを期待していますが、そうではありません!

ウィジェットがカルーセル内にあるため、データがそこにあると確信しています。

何が行方不明ですか?ありがとうございました

再編集:プロバイダがQuilckly Works Works applytherがリアルタイムで適用される別のカルーセルカードの例です。

 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

これによると 記事FutureProviderが変更を待っていないため、将来が完了したらConsumers 1の時間のみが再構築されます。

この記事では、著者がこれをどのようにテストしたかについて説明します。

DARTプロバイダパッケージの開発者も ユースケースを説明しますFutureProviderです。

1
Brian Ogden

Main.Dart.Dart.Dart.Dart.Dartの種類

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