Skip to content

Instantly share code, notes, and snippets.

@brianegan
Created July 18, 2019 16:00
Show Gist options
  • Save brianegan/a5a38775050f50a3e8f84c22615a96f6 to your computer and use it in GitHub Desktop.
Save brianegan/a5a38775050f50a3e8f84c22615a96f6 to your computer and use it in GitHub Desktop.
Maintain scroll position between tabs
import 'package:flutter/material.dart';
void main() {
runApp(TabBarDemo());
}
class TabBarDemo extends StatefulWidget {
@override
_TabBarDemoState createState() => _TabBarDemoState();
}
class _TabBarDemoState extends State<TabBarDemo> {
final strings1 = List<String>.generate(10000, (i) => "Tab 1, Item $i");
final strings2 = List<String>.generate(10000, (i) => "Tab 2, Item $i");
final controller1 = ScrollController();
final controller2 = ScrollController();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)),
Tab(icon: Icon(Icons.directions_transit)),
],
),
title: Text('Tabs Demo'),
),
body: TabBarView(
children: [
MyList(items: strings1, controller: controller1,),
MyList(items: strings2, controller: controller2,),
],
),
),
),
);
}
}
class MyList extends StatelessWidget {
final List<String> items;
final ScrollController controller;
MyList({Key key, @required this.items, @required this.controller}) : super(key: key);
@override
Widget build(BuildContext context) {
return ListView.builder(
controller: controller,
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${items[index]}'),
);
},
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment