मैं वर्तमान में एक SliverList और एक SliverChildBuilderDelegate का उपयोग करके फ़्लटर में कैलेंडर दृश्य बना रहा हूं जैसे कि मुझे कैलेंडर में प्रत्येक आइटम को एक बार में प्रस्तुत करने की आवश्यकता नहीं है।

पहली तारीख युग समय है, 1 जनवरी, 1970, और अंतिम तिथि आज की तारीख के बाद गणना किए गए कुछ विषम समय है।

मेरा मुद्दा यह है कि जब मैं पहली बार दृश्य प्रस्तुत करता हूं, तो मैं चाहता हूं कि यह आज से शुरू हो रहा है, न कि 1 जनवरी, 1970 को। हालांकि, अगर मेरे पास आज 0 इंडेक्स हैं, तो नकारात्मक इंडेक्स की अनुमति नहीं है (या आपूर्ति) निर्माता प्रतिनिधि ताकि आप उस तिथि से ऊपर स्क्रॉल न कर सकें। जहाँ तक मैं बता सकता हूँ, आप बिल्डर या सूची को एक प्रारंभिक सूचकांक की आपूर्ति नहीं कर सकते हैं, इसलिए मैं युग समय को 0 अनुक्रमणिका के रूप में नहीं बना सकता क्योंकि सूची अभी शुरू होगी, जिससे काफी भयानक हो जाएगा अनुभव! मुझे पूरा यकीन नहीं है कि कैसे आगे बढ़ना है।

क्या किसी के पास कोई सुझाव है?

10
Sam Markoe 31 मई 2018, 08:30

2 जवाब

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

मुझे ऐसा करने के आसान तरीके की जानकारी नहीं है, initialPositition पैरामीटर ListView में नहीं है और न ही SliverList में। कारण मैं सोच सकता हूं कि सूचियां ScrollView पर एम्बेडेड विजेट्स की एक श्रृंखला है, जैसे कि आपके लिए प्रारंभिक आइटम सेट करने के लिए, आपको उस आइटम की सटीक स्क्रॉल ऑफ़सेट जानने की आवश्यकता होगी।

डिफ़ॉल्ट रूप से दो सूची विजेट इसकी वस्तुओं की ऊंचाई के बारे में कोई धारणा नहीं बनाते हैं, इसलिए सामान्य रूप से उस ऑफसेट को खोजने के लिए आपको एक-एक करके सभी विजेट्स की ऊंचाई की गणना करने की आवश्यकता होगी, जो अक्षम है।

हालांकि, यदि आप अपनी सभी सूची वस्तुओं की ऊंचाई पहले से जानते हैं, या यदि आप उन्हें ListView.itemExtent फ़ील्ड या SliverFixedExtentList के माध्यम से एक निश्चित ऊंचाई के लिए बाध्य कर सकते हैं, तो आप चीजों को आसान बना सकते हैं।


यदि आप अपने सूची आइटम की ऊंचाई पहले से जानते (या मजबूर) हैं, तो आप अपने ScrollController में एक initialScrollOffset के माध्यम से एक प्रारंभिक आइटम सेट कर सकते हैं। यहाँ एक ListView के साथ एक उदाहरण दिया गया है।

@override
Widget build(BuildContext context) {
  final _itemExtent = 56.0; // I know item heights beforehand
  final generatedList = List.generate(500, (index) => 'Item $index');

  return ListView(
    controller: ScrollController(initialScrollOffset: _itemExtent * 401),
    children: generatedList
        .map((index) =>
            ListTile(title: Text(index, style: TextStyle(fontSize: 20.0))))
        .toList(),
  );
}

या एक SliverList में।

@override
Widget build(BuildContext context) {
  final _itemExtent = 56.0;
  final generatedList = List.generate(500, (index) => 'Item $index');

  return CustomScrollView(
    controller: ScrollController(initialScrollOffset: _itemExtent * 401),
    slivers: [
      SliverFixedExtentList(
        itemExtent: _itemExtent,  // I'm forcing item heights
        delegate: SliverChildBuilderDelegate(
          (context, index) => ListTile(
                title: Text(
                  generatedList[index],
                  style: TextStyle(fontSize: 20.0),
                ),
              ),
          childCount: generatedList.length,
        ),
      ),
    ],
  );
}

जब आप पहली बार ऐप खोलते हैं तो दोनों ही मामलों में यह परिणाम होता है।

enter image description here

16
Edman 31 मई 2018, 12:13

SliverList एक प्रतिनिधि पैरामीटर लेता है जो सूची में आइटम्स को देखने में स्क्रॉल करते समय प्रदान करता है।

आप SliverChildListDelegate वाले बच्चों की वास्तविक सूची निर्दिष्ट कर सकते हैं या उन्हें SliverChildBuilderDelegate के साथ आलसी बना सकते हैं।

SliverList(
    delegate: SliverChildListDelegate(
      [
        Container(color: Colors.red, height: 150.0),
        Container(color: Colors.purple, height: 150.0),
        Container(color: Colors.green, height: 150.0),
      ],
    ),
);
// This builds an infinite scrollable list of differently colored 
// Containers.
SliverList(
    delegate: SliverChildBuilderDelegate((BuildContext context, int index) {
      // To convert this infinite list to a list with three items,
      // uncomment the following line:
      // if (index > 3) return null;
      return Container(color: getRandomColor(), height: 150.0);
    },
    // Or, uncomment the following line:
    // childCount: 3,
  ),
);

enter image description here

संदर्भ: http://flutterexamples.com/#textfield

0
Paresh Mangukiya 9 पद 2020, 05:46