I am trying to make this type of view
there 3 types of news latest,sport and old news which are having 3 listview the data is populating but i am unable to scroll it the list view or the complete scroll view is not scrolling i had trying it from the 1 week please find the below code
I am able to the layout but it's not scrolling at all
First tab view
class First_Tab_Layout extends StatefulWidget { @override State<StatefulWidget> createState() { First_State fst_state() => new First_State(); return fst_state(); } } class First_State extends State<First_Tab_Layout> { List latest_news_list; List sports_news_list; List cinema_news_list; latestnews() async { var latest_news_url = common_url + 'getlatestPosts'; print(latest_news_url); http.Response latest_newsresponse = await http.get(latest_news_url); var latest_news_response = json.decode(latest_newsresponse.body); setState(() { latest_news_list = latest_news_response['posts']; }); } sportsnews() async { var sports_news_url = common_url + 'getsportsPosts'; print(sports_news_url); http.Response sports_newsresponse = await http.get(sports_news_url); var sports_news_response = json.decode(sports_newsresponse.body); setState(() { sports_news_list = sports_news_response['posts']; }); } cinemanews() async { var cinema_news_url = common_url + 'getcinemaPosts'; print(cinema_news_url); http.Response cinema_newsresponse = await http.get(cinema_news_url); var cinema_news_response = json.decode(cinema_newsresponse.body); setState(() { cinema_news_list = cinema_news_response['posts']; }); } @override void initState() { super.initState(); latestnews(); sportsnews(); cinemanews(); } @override Widget build(BuildContext context) { return new MaterialApp( debugShowCheckedModeBanner: false, home: new Scaffold( body: new ListView( primary: true, children: <Widget>[ new Container( child: new Text( 'Latest News', style: new TextStyle(fontSize: 16.0), ), margin: EdgeInsets.only(left: 10.0, right: 10.0, bottom: 5.0), alignment: Alignment(-1.0, 0.0), ), new Container( child: new Divider( color: secondarycolor, ), margin: EdgeInsets.only(right: 10.0, left: 10.0), ), new Container( child: new ListView.builder( shrinkWrap: true, itemCount: latest_news_list == null ? 0 : latest_news_list.length, itemBuilder: (BuildContext context, int indexpos) { return new GestureDetector( onTap: () { Navigator.push( context, new MaterialPageRoute( builder: (context) => new News_Details( postid: latest_news_list[indexpos]['id'], ))); }, child: new Card( elevation: 4.0, margin: EdgeInsets.only(left: 10.0, right: 10.0, top: 5.0), child: new Row( children: <Widget>[ new Container( child: new Image.network( latest_news_list[indexpos]['image'], width: 150.0, fit: BoxFit.fill, ), ), new Flexible( child: new Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ new Container( child: new Text( latest_news_list[indexpos]['title']), margin: EdgeInsets.only(left: 10.0), ), new Container( child: new Text( latest_news_list[indexpos]['content'], softWrap: true, maxLines: 4, ), margin: EdgeInsets.only(left: 10.0, top: 5.0), ), ], ), ) ], ), ), ); }, ), ), new Container( child: new Text( 'Sports News', style: new TextStyle(fontSize: 16.0), ), margin: EdgeInsets.only(left: 10.0, right: 10.0, top: 5.0), alignment: Alignment(-1.0, 0.0), ), new Container( child: new Divider( color: secondarycolor, ), margin: EdgeInsets.only(right: 10.0, left: 10.0), ), new Container( child: new ListView.builder( shrinkWrap: true, itemCount: sports_news_list == null ? 0 : sports_news_list.length, itemBuilder: (BuildContext context, int indexpos) { return new GestureDetector( child: new Card( elevation: 4.0, margin: EdgeInsets.only(left: 10.0, right: 10.0, top: 5.0), child: new Row( children: <Widget>[ new Container( child: new Image.network( sports_news_list[indexpos]['image'], width: 150.0, height: 75.0, fit: BoxFit.fill, ), ), new Column( children: <Widget>[ new Container( child: new Text(sports_news_list[indexpos]['title']), margin: EdgeInsets.only(left: 10.0), ), new Container( child: new Text(sports_news_list[indexpos]['title']), margin: EdgeInsets.only(left: 10.0, top: 5.0), ), ], ) ], ), ), ); }, ), ), new Container( child: new Text( 'Cinema News', style: new TextStyle(fontSize: 16.0), ), margin: EdgeInsets.only( left: 10.0, right: 10.0, top: 10.0, bottom: 5.0), alignment: Alignment(-1.0, 0.0), ), new Container( child: new Divider( color: secondarycolor, ), margin: EdgeInsets.only(right: 10.0, left: 10.0), ), new Container( child: new ListView.builder( shrinkWrap: true, itemCount: cinema_news_list == null ? 0 : cinema_news_list.length, itemBuilder: (BuildContext context, int indexpos) { return new GestureDetector( child: new Card( elevation: 4.0, margin: EdgeInsets.only(left: 10.0, right: 10.0, top: 5.0), child: new Row( children: <Widget>[ new Container( child: new Image.network( cinema_news_list[indexpos]['image'], width: 150.0, height: 75.0, fit: BoxFit.fill, ), ), new Column( children: <Widget>[ new Container( child: new Text( cinema_news_list[indexpos]['categorytitle']), margin: EdgeInsets.only(left: 10.0), ), new Container( child: new Text( cinema_news_list[indexpos]['categorytitle']), margin: EdgeInsets.only(left: 10.0, top: 5.0), ), ], ) ], ), ), ); }, ), ), ], )), ); } }
You can wrap your ListView widget inside the Expanded widget and this will allow the ListView to take all the available as long as the Column allows.
You might want to create a list that scrolls horizontally rather than vertically. The ListView widget supports horizontal lists. Use the standard ListView constructor, passing in a horizontal scrollDirection , which overrides the default vertical direction.
This worked for me. Not sure whether this will work for you. Try once. I just added physics to inner ListView
.
new Container( child: new ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(),
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With