मैं रिवरपॉड राज्य प्रबंधन का उपयोग कर प्रदाताओं को संयोजित करने का प्रयास कर रहा हूं। इस परिदृश्य में, मैं एक दृश्य मॉडल बना रहा हूं जिसमें एक ऐसा फ़ंक्शन है जो उस दृश्य मॉडल वर्ग से भविष्य को पुनर्प्राप्त करता है। जब मैं वीएम से देश डेटा लोड करने का प्रयास करता हूं, तो निम्न त्रुटि प्रदर्शित होती है:

"'पैकेज: Flutter_hooks/src/framework.dart': विफल अभिकथन: लाइन 489 पॉज़ 7: '!_debugIsInitHook': HookState.initState के अंदर विरासत में मिले विजेट्स को नहीं सुन सकता। इसके बजाय HookState.build का उपयोग करें"।

टेस्टस्क्रीन कोड:

var viewModel =
    Provider<TestViewModel>((ref) => TestViewModel(ref.read));
var countryProvider = FutureProvider<Country>((ref) {
  var vm = ref.watch(viewModel);
  return vm.getCountryData();
});

class TestScreen extends HookWidget {
  @override
  Widget build(BuildContext context) {
    var country = useProvider(countryProvider);

    return Scaffold(
      appBar: AppBar(title: 'Test'),
      body: country.when(
        loading: () => Container(),
        error: (err, stack) => Center(child: Text(err.toString())),
        data: (country) => Center(child: Text("Success")),
      ),
    );
  }
}

टेस्ट व्यू मॉडल कोड:

class TestViewModel {
  final Reader read;
  SessionRepository _session;

  Destination get dest => _session.destination;

  TestViewModel (this.read) : _session = read(sessionProvider);

  // A function that returns a Future
  Future<Country> getCountryData() => Country.getData(dest.countryName);
}
1
Flik 15 नवम्बर 2020, 19:15

1 उत्तर

सबसे बढ़िया उत्तर

शायद आप इसे इस तरह लागू करने का प्रयास कर सकते हैं

class Home extends StatelessWidget{
   @override
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(title: 'Test'),
       body: TestScreen();
    );
   }

}

class TestScreen extends HookWidget {
  @override
  Widget build(BuildContext context) {
    return useProvider(countryProvider).when(
       loading: () => Container(),
       error: (err, stack) => Center(child: Text(err.toString())),
       data: (country) => Center(child: Text("Success")),
    );
  }
}

इस तरह, हुक initState में परिवर्तनों को सुनने की कोशिश करने की त्रुटि प्रदर्शित किए बिना विजेट का पुनर्निर्माण कर सकता है

0
EdwynZN 15 नवम्बर 2020, 20:24