नेविगेटर अवधारणा के साथ प्रदाता का उपयोग करके स्क्रीन के बीच डेटा भेजना एक संघर्ष बनाता है

रन के बाद त्रुटि

निम्नलिखित प्रदाता नॉटफाउंड एरर को सेकेंड रूट (गंदा) बनाने में फेंक दिया गया था: त्रुटि: इस सेकेंड रूट विजेट के ऊपर सही प्रदाता नहीं मिला

ठीक करने के लिए, कृपया:

  • सुनिश्चित करें कि प्रदाता इस सेकेंडरूट विजेट का पूर्वज है
  • प्रदाता को प्रकार प्रदान करें
  • उपभोक्ता को प्रकार प्रदान करें
  • Provider.of को प्रकार प्रदान करें ()
  • हमेशा पैकेज आयात का उपयोग करें। उदाहरण: `आयात 'पैकेज: my_app/my_code.dart';
  • सुनिश्चित करें कि सही context का उपयोग किया जा रहा है।

https://www.ideone.com/xHXK5m

0
abdelgany mahmoud 29 अक्टूबर 2019, 15:58

3 जवाब

आप इस तरह से डेटा पास कर सकते हैं डेटा को क्लास में डाल सकते हैं

RaisedButton(
child: Text(‘Send data to the second page’),
onPressed: () {
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => SecondPage(
       data: data,
    )),
 );
 }, 
 ),

और इस तरह डेटा प्राप्त करें

class SecondPage extends StatelessWidget {
final Data data;
SecondPage({this.data});
@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    title: Text(‘Constructor — second page’),
  ),
  body: Container(
    padding: EdgeInsets.all(12.0),
    alignment: Alignment.center,
    child: Column(
      children: <Widget>[
        Container(
          height: 54.0,
          padding: EdgeInsets.all(12.0),
          child: Text(‘Data passed to this page:’,
           style: TextStyle(fontWeight: FontWeight.w700))),
        Text(‘Text: ${data.text}’),
        Text(‘Counter: ${data.counter}’),
        Text(‘Date: ${data.dateTime}’),
      ],
    ),
  ),
  );
  }
1
rishabh mistry 29 अक्टूबर 2019, 16:11
मैं कंस्ट्रक्टर का उपयोग कर सकता हूं लेकिन मैं प्रदाता का उपयोग करना चाहता हूं
 – 
abdelgany mahmoud
29 अक्टूबर 2019, 16:18

आप जो भी Provider मान MaterialApp से ऊपर रखते हैं उसे रखने का प्रयास कर सकते हैं और इस प्रकार नेविगेशन या, जब आप किसी दूसरे पृष्ठ पर धक्का देते हैं, तो फिर से मान प्रदान करें। प्रदाताओं को विजेट ट्री के दायरे में लाया जाता है, इसलिए यह अपेक्षित व्यवहार है।

उदाहरण के तौर पर, किसी अन्य मार्ग पर मान पास करने के लिए, आप कुछ ऐसा कर सकते हैं

onPressed: () {
  Navigator.of(context).push(MaterialPageRoute(builder: (context) {
    final foo = 'foo';

    Provider<String>.value(
      value: foo,
      child: NewPage(),
    );
  }));
},

और फिर इसे न्यूपेज रूट में नियमित रूप से उपभोग करें।

0
Nolence 29 अक्टूबर 2019, 17:11

इस कोड को आजमाएं:

MaterialApp(
title: 'Navigation Basics',
home: ChangeNotifierProvider(
  builder: (context) => Data(),
  child: FirstRoute(),
))

FirstRoute में ChangeNotifierProvider हटाएं

0
Marat 29 अक्टूबर 2019, 17:33