উল্লম্ব ভিউপোর্টকে সীমাহীন উচ্চতা দেওয়া হয়েছিল


118

এটি আমার কোড:

  @override
  Widget build(BuildContext context) {
    return new Material(
      color: Colors.deepPurpleAccent,
      child: new Column(
       mainAxisAlignment: MainAxisAlignment.center,
          children:<Widget>[new GridView.count(crossAxisCount: _column,children: new List.generate(_row*_column, (index) {
            return new Center(
                child: new CellWidget()
            );
          }),)]
      )
    );
  }

নিম্নলিখিত হিসাবে ব্যতিক্রম:

I/flutter ( 9925): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 9925): The following assertion was thrown during performResize():
I/flutter ( 9925): Vertical viewport was given unbounded height.
I/flutter ( 9925): Viewports expand in the scrolling direction to fill their container. In this case, a vertical
I/flutter ( 9925): viewport was given an unlimited amount of vertical space in which to expand. This situation
I/flutter ( 9925): typically happens when a scrollable widget is nested inside another scrollable widget.
I/flutter ( 9925): If this widget is always nested in a scrollable widget there is no need to use a viewport because
I/flutter ( 9925): there will always be enough vertical space for the children. In this case, consider using a Column
I/flutter ( 9925): instead. Otherwise, consider using the "shrinkWrap" property (or a ShrinkWrappingViewport) to size
I/flutter ( 9925): the height of the viewport to the sum of the heights of its children.
I/flutter ( 9925): 
I/flutter ( 9925): When the exception was thrown, this was the stack:
I/flutter ( 9925): #0      RenderViewport.performResize.<anonymous closure> (package:flutter/src/rendering/viewport.dart:827:15)
I/flutter ( 9925): #1      RenderViewport.performResize (package:flutter/src/rendering/viewport.dart:880:6)
I/flutter ( 9925): #2      RenderObject.layout (package:flutter/src/rendering/object.dart:1555:9)

আপনি কলামের পরিবর্তে সাধারণ কন্টেইনারও ব্যবহার করতে পারেন (মূলত একাধিক শিশু উইজেটের জন্য))
নেপোলিয়ান

উইজেট বিল্ড (বিল্ডকন্টেক্সট প্রসঙ্গে) new নতুন মেটেরিয়াল ফিরিয়ে দিন (রঙ: রঙস.দীপপুরল অ্যাকসেন্ট, শিশু: নতুন পাত্রে (প্রান্তিককরণ: প্রান্তিককরণ.সেন্টার, শিশু: নতুন গ্রিডভিউ.কন্টার (ক্রসএ্যাকসিসাউন্ট: _ক্যালোম, বাচ্চা: নতুন তালিকা.জেনারেট (_আরো * _পথ, (সূচক) new নতুন কেন্দ্র ফিরে (শিশু: নতুন সেল উইজেট ());})),))); - এই কোডটি @ নেপোলিয়ান
পল্লভ বোহারা

কলামের অধীনে সর্বোচ্চ অ্যাক্সেস সাইজ যুক্ত করার চেষ্টা করুন এবং দেখুন এটি সহায়তা করে কিনা।
pblead26

, এই দেখ যদি এটি কাজ করে কারণ আমি মনে করি এটা সম্পন্ন করতে হবে: stackoverflow.com/a/61708887/10563627
পরেশ Mangukiya

উত্তর:


231

এই দুটি লাইন যুক্ত করা হচ্ছে

ListView.builder(
    scrollDirection: Axis.vertical,
    shrinkWrap: true,
...

8
ধন্যবাদ, কেবলমাত্র একটি ছোট্ট পরামর্শ আপনি এটিকে স্ক্রোল-সক্ষম করতে ফ্লেক্সিবল দ্বারা তালিকাভিউকে ঘিরে রাখতে পারেন
শ্যাডি মোহাম্মদ শরীফ


156

এটি সাধারণত ঘটে যখন আপনি একটি ListView/ GridViewভিতরে ব্যবহার করার চেষ্টা করেন Column, এটি সমাধানের অনেকগুলি উপায় আছে, আমি এখানে কয়েকটি তালিকাবদ্ধ করছি listing

  1. মোড়ানো ListViewমধ্যেExpanded

    Column(
      children: <Widget>[
        Expanded( // wrap in Expanded
          child: ListView(...),
        ),
      ],
    )
    
  2. মোড়ানো ListViewমধ্যে SizedBoxদিতে একটি বেষ্টিতheight

    Column(
      children: <Widget>[
        SizedBox(
          height: 400, // fixed height
          child: ListView(...),
        ),
      ],
    )
    
  3. ব্যবহার করুন shrinkWrap: trueমধ্যে ListView

    Column(
      children: <Widget>[
        ListView(
          shrinkWrap: true, // use this
        ),
      ],
    )
    

4
অনুভূমিক তালিকা-দর্শন বিশিষ্ট উল্লম্ব তালিকার সাথে এটি ব্যবহার করে দেখুন। কেবল আকারের বাক্স পদ্ধতিই কাজ করবে তবে উচ্চতার দিক থেকে এটি খুব বেশি প্রেসক্রিপটিভ। আর কীভাবে করব?
ফ্র্যাক্টাল

shrinkWrap: trueকাজটি করেছেন
Ali80

4
এই উত্তর।
বিশালকনিশাদ

এই আমি খুঁজছিলাম ছিল। কোনও সুযোগ আপনি প্রতিটি পছন্দের জিনিসপত্র এবং যুক্ত করতে পারেন?
এমরগিনস

এটি আমাকে অনেক সাহায্য করেছিল। ধন্যবাদ @ কপসঅনরোড
কবি ছাড়

30

সুতরাং, প্রত্যেকে উত্তর পোস্ট করেছেন তবে কেউ কেন তা ব্যাখ্যা করার জন্য পাত্তা দেয়নি: আমি ডকুমেন্টেশনগুলি অনুলিপি করব shrinkWrap:

[স্ক্রোলডাইরেক্টেশন] এ স্ক্রোল দর্শনটির সীমাটি নির্ধারিত সামগ্রী দ্বারা নির্ধারণ করা উচিত কিনা।

যদি স্ক্রোল ভিউটি মোড়কে সঙ্কুচিত না করে তবে স্ক্রোল ভিউ [স্ক্রোলডাইরেক্টেশন] এর সর্বাধিক অনুমোদিত আকারে প্রসারিত হবে। যদি [স্ক্রোলডাইরেক্টেশন] এ স্ক্রোল ভিউটির সীমাহীন বাধা থাকে, তবে [সঙ্কুচিতভাবে মোড়ানো] অবশ্যই সত্য হবে।

স্ক্রোল দৃশ্যের সামগ্রীটি মোড়ানো সঙ্কুচিত হওয়া সর্বাধিক অনুমোদিত আকারে প্রসারণের চেয়ে উল্লেখযোগ্যভাবে ব্যয়বহুল কারণ স্ক্রোলিংয়ের সময় সামগ্রীটি প্রসারিত ও চুক্তি করতে পারে, যার অর্থ যখনই স্ক্রোল অবস্থান পরিবর্তন হয় তখন স্ক্রোল দৃশ্যের আকারটি পুনরায় সংশোধন করা দরকার।

ডিফল্ট false

সুতরাং, দস্তাবেজের শব্দভাণ্ডারটি গ্রহণ করে, এখানে কী ঘটছে তা হ'ল আমাদের সীমাহীন বাধারListView পরিস্থিতি (আমরা যে দিকে স্ক্রোলিং করছি) সেভাবেই এইভাবে ListViewঅভিযোগ করবে যে:

... একটি উল্লম্ব ভিউপোর্টকে সীমিত পরিমাণে উল্লম্ব স্থান দেওয়া হয়েছিল যাতে প্রসারিত হতে পারে।

কেবল সেট shrinkWrapকরে trueসেটি নিশ্চিত করে নিশ্চিত করুন যে এটি সামগ্রীর দ্বারা সংজ্ঞায়িত আকারটিকে মোড়া করে। উদাহরণস্বরূপ একটি নমুনা কোড:

// ...
  ListView(
    // Says to the `ListView` that it must wrap its
    // height (if it's vertical) and width (if it's horizontal).
    shrinkWrap: true,
  ),
// ...

যাইহোক, আপনার কোডটি যা করছে তা সত্ত্বেও, @ রামি পরামর্শটি এ ক্ষেত্রে ব্যবহার Alignনা করে এই ক্ষেত্রে সেরা Column


27

নমনীয় বা প্রসারিত উইজেটের ভিতরে গ্রিড ভিউ রাখুন

return new Material(
    color: Colors.deepPurpleAccent,
    child: new Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children:<Widget>[
         Flexible(
          child:  GridView.count(crossAxisCount: _column,children: new List.generate(_row*_column, (index) {
          return new Center(
             child: new CellWidget(),
          );
        }),))]
    )
);

4
প্রসারিত এবং shrinkWrap: trueগ্রিডভিউতে যুক্ত করুন।
উইলমার

13

এই পরিস্থিতিটি সাধারণত ঘটে যখন কোনও স্ক্রোলযোগ্য উইজেট অন্য স্ক্রোলযোগ্য উইজেটের অভ্যন্তরে থাকে।

আমার ক্ষেত্রে আমি কলামের অভ্যন্তরে গ্রিডভিউ ব্যবহার করি এবং সেই ত্রুটি নিক্ষেপ করে।

গ্রিডভিউ উইজেটের shrinkWrapসম্পত্তি / নামকরণের প্যারামিটার রয়েছে, সেট করতে trueআমার সমস্যাটি স্থির হয়েছে।

GridView.count(
  shrinkWrap: true,
  // rest of code
)

9

Columnএকক শিশু সারিবদ্ধ জন্য ব্যবহার করবেন না । Alignপরিবর্তে ব্যবহার করুন।

    new Align(
      alignment: Alignment.topCenter,
      child: new GridView(),
    )

এটি যদিও আমার ত্রুটিটি সমাধান করেছে তবে এখনও, আমি আমার গ্রিডভিউটি উল্লম্বভাবে কেন্দ্র করতে সক্ষম নই। এটি আগের মতোই দেখায়। প্রান্তিককরণের জন্য সমস্ত পতাকা চেষ্টা করে। * আমি কী অনুপস্থিত?
পল্লব বোহারা

5

যদিও shrinkWrapজিনিসটি করুন তবে আপনি এতে স্ক্রোল করতে পারবেন না ListView

আপনি যদি স্ক্রোলিং কার্যকারিতা চান তবে আপনি physicsসম্পত্তি যুক্ত করতে পারেন :

ListView.builder(
    scrollDirection: Axis.vertical,
    shrinkWrap: true,
    physics: ScrollPhysics(),
...

3

ListView/GridViewএটি হ'ল কারণ উইজেটের আকার নিতে কোনও পিতামাতা নেই, সুতরাং এটির উচ্চতা অসীম এবং এটি হ'ল বিড়বিড় করে তালিকাভিউয়ের উচ্চতা জানেন না এবং রেন্ডার করতে পারবেন না।

  1. সমাধান এক: নির্দিষ্ট উচ্চতা

    এটিকে সরাসরি মুড়ে নিন Containerবা SizedBoxমৃত উচ্চতা লিখুন।

    Column(
      children: <Widget>[
        SizedBox(
         height: 400, // fixed height
        child: ListView(...),
       ),
     ],
    )
    

এটি ঠিক আছে, তবে উচ্চতাটি যদি অভিযোজিত হওয়ার দরকার হয় তবে এটি লিখলে তা কার্যকর হবে না।

  1. সমাধান দুটি: সঙ্কুচিত মোড়ানো: সত্য

    ব্যবহার করে দেখুন shrinkWrap: trueসঙ্গে physics: ScrollPhysics()স্ক্রলিং জন্য

    shrinkWrap: trueঅ্যান্ড্রয়েডের মতো কিছুটা wrap_content

    ListView.builder(
       scrollDirection: Axis.vertical,
       shrinkWrap: true,
       physics: ScrollPhysics()
    ...
    

তবে সংকলনের পরে, আপনি পৃষ্ঠার নীচে একটি দীর্ঘ হলুদ সতর্কতা পাবেন।

তবুও পারি না

  1. সমাধান তিনটি: প্রসারিত বা নমনীয়

    Flexible অ্যান্ড্রয়েডে লিনিয়ারলআউটের সমতুল্য, বিড়বিড় করে একটি নমনীয় বিন্যাস।

    নমনীয় মধ্যে একটি আছে flexবৈশিষ্ট্য, লেআউট_ ওয়েটের সমান, অবশিষ্ট সমস্ত স্থান গ্রহণ করে।

    সুতরাং, আমরা নমনীয় সহ তালিকাগুলি মোড়তে পারি।

    Column(
      children: <Widget>[
        Expanded( 
          child: ListView(...),
        ),
      ],
    )
    

এই উত্তর ভিত্তিক: উল্লম্ব ভিউপোর্টকে সীমাহীন উচ্চতা দেওয়া হয়েছিল।


এগুলি সবই ইতিমধ্যে আমার সমাধানে আচ্ছন্ন Pare আমি আশা করি আপনি কিছু নতুন যুক্ত করেছেন।
কপসঅনরোড

হ্যাঁ আমি জানি, তবে আমি সেই সমাধানটি ব্যাখ্যা করার চেষ্টা করেছি এমনকি আমার মনে হয়
আমারও আপনার

1

দ্বিতীয় তালিকা দেখার জন্য এটি পরীক্ষা করুন

ListView.builder(
            physics: NeverScrollableScrollPhysics(),

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.