मैं इस स्पंदन कोड में प्रदाता 4.3.2 का उपयोग कर रहा हूं, यह एक साधारण स्पंदन ऐप है जिसमें एक टेक्स्ट फ़ाइल, फ्लैट बटन और एक सूची दृश्य निर्माता है जिसमें टेक्स्ट विजेट होता है। मैंने एक क्लास लिस्टडेटा बनाया है जिसमें सूची है और प्रदाता का उपयोग करके सूची दृश्य निर्माता में दिखाया गया है। यहाँ समस्या है, मैंने ListData वर्ग में एक addData विधि बनाई है। मैंने फ्लैट बटन की ऑनप्रेस विधि में प्रदाता का उपयोग करके सूची में डेटा जोड़ने के लिए इस विधि का उपयोग किया है, यह त्रुटि फेंक रहा है, खोजने में असमर्थ है। इस समस्या का समाधान। साथ ही यह मेरे मुख्य ऐप का संक्षिप्त रूप है
import 'dart:collection';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
String data;
return ChangeNotifierProvider(
create: (context) => ListData(),
child: MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("list"),
),
body: Column(
children: [
TextField(
onChanged: (value) => data = value,
),
FlatButton(
child: Text("Add"),
color: Colors.blue,
onPressed: () {
Provider.of<ListData>(context).addData(data);
},
),
Expanded(
child: MyListView(),
),
],
),
),
),
);
}
}
class MyListView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (context, index) {
return Text(Provider.of<ListData>(context).listData[index]);
},
itemCount: Provider.of<ListData>(context).listCount,
);
}
}
class ListData extends ChangeNotifier {
List _listData = [
'Hello',
"hi",
];
UnmodifiableListView get listData {
return UnmodifiableListView(_listData);
}
int get listCount {
return _listData.length;
}
void addData(String data) {
_listData.add(data);
notifyListeners();
}
}
2 जवाब
आप नीचे पेस्ट रन पूरा कोड कॉपी कर सकते हैं
आपको चाहिए Builder
और listen: false
सांकेतिक टुकड़ा
Builder(builder: (BuildContext context) {
return FlatButton(
child: Text("Add"),
color: Colors.blue,
onPressed: () {
Provider.of<ListData>(context, listen: false).addData(data);
},
);
}),
काम कर रहे डेमो
पूरा कोड
import 'dart:collection';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
String data;
return ChangeNotifierProvider(
create: (context) => ListData(),
child: MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("list"),
),
body: Column(
children: [
TextField(
onChanged: (value) => data = value,
),
Builder(builder: (BuildContext context) {
return FlatButton(
child: Text("Add"),
color: Colors.blue,
onPressed: () {
Provider.of<ListData>(context, listen: false).addData(data);
},
);
}),
Expanded(
child: MyListView(),
),
],
),
),
),
);
}
}
class MyListView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (context, index) {
return Text(Provider.of<ListData>(context).listData[index]);
},
itemCount: Provider.of<ListData>(context).listCount,
);
}
}
class ListData extends ChangeNotifier {
List _listData = [
'Hello',
"hi",
];
UnmodifiableListView get listData {
return UnmodifiableListView(_listData);
}
int get listCount {
return _listData.length;
}
void addData(String data) {
_listData.add(data);
notifyListeners();
}
}
आपको अपने FlatButton
को Consumer
विजेट में लपेटने की आवश्यकता है क्योंकि Provider.of को BuildContext के साथ बुलाया जाता है जो प्रदाता का पूर्वज है।
return ChangeNotifierProvider(
create: (_) => ListData(),
child: Consumer<ListData>(
builder: (_, listData, __) => FlatButton(onPressed: () => listData.addData(data)),
},
);
आपको त्रुटि क्यों मिलती है और इसका उपयोग कैसे करना है, यह समझने में आपकी सहायता के लिए सरल उदाहरणों के साथ अधिक जानने के लिए इसे देखें।
https://pub.dev/documentation/provider/latest/provider/Consumer-class.html
संबंधित सवाल
नए सवाल
flutter
स्पंदन Google द्वारा बनाई गई एक ओपन-सोर्स UI सॉफ़्टवेयर डेवलपमेंट किट है। इसका उपयोग Android, iOS, Linux, Mac, Windows, Google Fuchsia और वेब के लिए एक ही कोडबेस से एप्लिकेशन विकसित करने के लिए किया जाता है। स्पंदन ऐप्स डार्ट भाषा में लिखे गए हैं।