मैं स्पंदन में एक एंड्रॉइड टीवी ऐप बनाना चाहता हूं लगभग सब कुछ किया जाता है लेकिन एक समस्या यह है कि मैं ध्यान केंद्रित करने में सक्षम नहीं हूं (जैसे कुछ पॉप-अप प्रभाव या सीमा कुछ भी बदलती है जो उपयोगकर्ता को बताती है कि आप अभी इस आइटम पर हैं) आइटम जिसे हम सूचीदृश्य में पुनरावृत्त कर रहे हैं।ऐप में जो मैं चाहता हूं उसकी छवि

लेकिन मैं इस पर फोकस नहीं कर पा रहा हूं। मैंने फोकसस्कोप -> लिस्टव्यू -> फोकस नोड के साथ प्रयास किया लेकिन यह पहले और आखिरी इंडेक्स में सटीक व्यवहार नहीं दे रहा है, और यह होमपेज में भी काम नहीं कर रहा है जहां एकाधिक सूचीदृश्य हैं।

1
Aviraj Patel 23 अगस्त 2021, 08:54

2 जवाब

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

कई तरीकों की कोशिश करने के बाद मुझे इंकवेल का उपयोग करके ऐसा करने का एक आसान और प्रभावी तरीका मिला।

विजेट ट्री इस तरह दिखेगा => पाड़ -> कुछ विजेट -> लिस्ट व्यू -> इंकवेल -> कैरोसौल्स

हमें इंकवेल में विजेट लपेटना है और इंकवेल में ऑनटैप, फोकसकोलर, ऑनफोकसचेंज का उपयोग करना है क्योंकि इंकवेल में स्वयं फोकस है।

 onFocusChange: (value) {
                        print(i);
                        setState(() {
                          hoverIndex = i;
                          widget.selectedIndex = i;
                        });
                      },
                      focusColor: Colors.transparent,

फोकस चेंज फंक्शन पर यह इंकवेल के अंदर होगा, इसलिए यह लिस्ट व्यू में हर बार उपयोगकर्ता को अनपढ़ कॉल करेगा, इसलिए उस i (इंडेक्स) के अनुसार हम होवरइंडेक्स को असाइन कर सकते हैं और होवरइंडेक्स के अनुसार हम इरिटेटिंग एलिमेंट की स्टाइल बदल सकते हैं।

0
Aviraj Patel 4 सितंबर 2021, 17:06

आपको ListView तत्व के लिए एक स्टेटफुल विजेट लागू करना चाहिए जिसमें फोकसनोड शामिल है।

फिर आप एक फोकसनोड श्रोता जोड़ते हैं, जिसे हर बार फोकस स्थिति बदलने पर कॉल किया जाएगा, और उन सभी दृश्य मापदंडों को सेट करें जिन्हें आप कॉलबैक में बदलना चाहते हैं।

        class _FocusableListViewItemState extends State<FocusableListViewItem>
        { 
    
          FocusNode _node;
        Color _focusBorderColor;

         @override
          void initState() {
            _focusBorderColor = Colors.transparent;
            _node.addListener(_onFocusChange);
        }

void _onFocusChange() {
    if (_node.hasFocus) {

      setState(() {
        _focusBorderColor = Colors.white;
      });
      
    } else {

      setState(() {
        _focusBorderColor = Colors.transparent;

      });
    }
  }


    
    }
0
YU No 3 सितंबर 2021, 08:41