Flutter 颤振中通过选定指标的更好方法
我有firestore的数据 我需要在一个页面中显示名称,在另一个页面中显示内容名称,等等 还有比这更好的方法吗 电视节目页Flutter 颤振中通过选定指标的更好方法,flutter,Flutter,我有firestore的数据 我需要在一个页面中显示名称,在另一个页面中显示内容名称,等等 还有比这更好的方法吗 电视节目页 FutureBuilder( future: Provider.of<Data>(context).fetchShows(), builder: (context, snapshot) { if (snapshot.hasData) { return L
FutureBuilder(
future: Provider.of<Data>(context).fetchShows(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
tvSelected = index;
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) {
return SeasonsPage(selectedTv: tvSelected);
}));
},
child: Container(
margin: EdgeInsets.all(10.0),
width: 100.0,
color: Colors.orangeAccent,
child: Text(snapshot.data[index].name),
),
);
},
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
}),
FutureBuilder(
future:Provider.of(context.fetchShows(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回ListView.builder(
itemCount:snapshot.data.length,
滚动方向:轴水平,
itemBuilder:(构建上下文,int索引){
回墨槽(
onTap:(){
tvSelected=索引;
Navigator.push(上下文、MaterialPage路由)(
生成器:(BuildContext上下文){
返回季节页面(选择电视:选择电视);
}));
},
子:容器(
保证金:所有边缘套(10.0),
宽度:100.0,
颜色:Colors.orangeacent,
子项:文本(snapshot.data[index].name),
),
);
},
);
}否则{
返回中心(
子对象:CircularProgressIndicator(),
);
}
}),
第页:
FutureBuilder(
future: Provider.of<Data>(context).fetchShows(),
builder: (context, snapshot) => snapshot.hasData
? ListView.builder(
itemCount: snapshot.data[selectedTv].content.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
selectedSeason = index;
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) {
return EpisodesPage(
selectedTv: selectedTv,
selectedSeason: selectedSeason,
);
}));
},
child: Container(
margin: EdgeInsets.all(10.0),
width: 100.0,
color: Colors.orangeAccent,
child: Text(
snapshot.data[selectedTv].content[index].name),
),
);
},
)
: Center(child: CircularProgressIndicator()),
),
FutureBuilder(
future:Provider.of(context.fetchShows(),
生成器:(上下文,快照)=>snapshot.hasData
?ListView.builder(
itemCount:snapshot.data[selectedTv].content.length,
滚动方向:轴水平,
itemBuilder:(构建上下文,int索引){
回墨槽(
onTap:(){
selectedSeason=索引;
Navigator.push(上下文、MaterialPage路由)(
生成器:(BuildContext上下文){
回信页码(
selectedTv:selectedTv,
selectedSeason:selectedSeason,
);
}));
},
子:容器(
保证金:所有边缘套(10.0),
宽度:100.0,
颜色:Colors.orangeacent,
子:文本(
快照.data[selectedTv].content[index].name),
),
);
},
)
:居中(子项:CircularProgressIndicator()),
),
第页:
FutureBuilder(
future: Provider.of<Data>(context).fetchShows(),
builder: (context, snapshot) => snapshot.hasData
? ListView.builder(
itemCount: snapshot.data[selectedTv].content[selectedSeason]
.episodes.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Container(
margin: EdgeInsets.all(10.0),
width: 100.0,
color: Colors.orangeAccent,
child: Text(snapshot.data[selectedTv]
.content[selectedSeason].episodes[index]),
);
},
)
: Center(child: CircularProgressIndicator()),
),
FutureBuilder(
future:Provider.of(context.fetchShows(),
生成器:(上下文,快照)=>snapshot.hasData
?ListView.builder(
itemCount:snapshot.data[selectedTv].content[selectedSeason]
.插曲长度,
滚动方向:轴水平,
itemBuilder:(构建上下文,int索引){
返回容器(
保证金:所有边缘套(10.0),
宽度:100.0,
颜色:Colors.orangeacent,
子项:文本(快照.数据[selectedTv]
.content[selectedSeason].剧集[index],
);
},
)
:居中(子项:CircularProgressIndicator()),
),
当我通过路线页面时,请看
.............................
.............................
首先,您创建一个新的提供者类,该类将保存当前选定电视、剧集和季节的索引,如下所示:
class CurrentIndexProvider with ChangeNotifier {
int _selectedTv;
int _selectedSeason;
int _selectedEpisode;
set selectedTv(int newIndex) {
this._selectedTv = newIndex;
notifyListeners();
}
set selectedSeason(int newIndex) {
this._selectedSeason = newIndex;
notifyListeners();
}
set selectedEpisode(int newIndex) {
this._selectedEpisode = newIndex;
notifyListeners();
}
int get selectedTv => this._selectedTv;
int get selectedSeason => this._selectedSeason;
int get selectedEpisode => this._selectedEpisode;
}
然后,您的电视节目页面变为:
final selectedItems = Provider.of<CurrentIndexProvider>(context);
FutureBuilder(
future: Provider.of<Data>(context).fetchShows(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
// tvSelected = index; -->we dont need this anylonger
//we set the current show number to the index of the current
//listview item when tapped
selectedItems.selectedSeason=index;
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) {
return SeasonsPage(
//we don't need to pass anything in the constructor again
// selectedTv: tvSelected
);
}));
},
child: Container(
margin: EdgeInsets.all(10.0),
width: 100.0,
color: Colors.orangeAccent,
child: Text(snapshot.data[index].name),
),
);
},
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
}),
final selectedItems=Provider.of(上下文);
未来建设者(
future:Provider.of(context.fetchShows(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回ListView.builder(
itemCount:snapshot.data.length,
滚动方向:轴水平,
itemBuilder:(构建上下文,int索引){
回墨槽(
onTap:(){
//tvSelected=index;-->我们不再需要这个了
//我们将当前节目编号设置为当前节目的索引
//点击时查看列表项
selectedItems.selectedSeason=索引;
Navigator.push(上下文、MaterialPage路由)(
生成器:(BuildContext上下文){
回归季节(
//我们不需要在构造函数中再次传递任何内容
//已选择电视:已选择电视
);
}));
},
子:容器(
保证金:所有边缘套(10.0),
宽度:100.0,
颜色:Colors.orangeacent,
子项:文本(snapshot.data[index].name),
),
);
},
);
}否则{
返回中心(
子对象:CircularProgressIndicator(),
);
}
}),
你的季节页面变成
final selectedItems = Provider.of<CurrentIndexProvider>(context);
FutureBuilder(
future: Provider.of<Data>(context).fetchShows(),
builder: (context, snapshot) => snapshot.hasData
? ListView.builder(
itemCount: snapshot.data[ selectedItems.selectedTv].content.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
//selectedSeason = index; --> we dont need this any longer
selectedItems.selectedSeason=index;
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) {
return EpisodesPage(
//we don't need any parameter in the constructor now
// selectedTv: selectedTv,
// selectedSeason: selectedSeason,
);
}));
},
child: Container(
margin: EdgeInsets.all(10.0),
width: 100.0,
color: Colors.orangeAccent,
child: Text(
snapshot.data[selectedItems.selectedTv].content[index].name),
),
);
},
)
: Center(child: CircularProgressIndicator()),
),
final selectedItems = Provider.of<CurrentIndexProvider>(context);
FutureBuilder(
future: Provider.of<Data>(context).fetchShows(),
builder: (context, snapshot) => snapshot.hasData
? ListView.builder(
itemCount: snapshot.data[selectedItems.selectedTv ].content[selectedItems.selectedSeason]
.episodes.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Container(
margin: EdgeInsets.all(10.0),
width: 100.0,
color: Colors.orangeAccent,
child: Text(snapshot.data[selectedItems.selectedTv]
.content[selectedItems.selectedSeason].episodes[index]),
);
},
)
: Center(child: CircularProgressIndicator()),
),
final selectedItems=Provider.of(上下文);
未来建设者(
future:Provider.of(context.fetchShows(),
生成器:(上下文,快照)=>snapshot.hasData
?ListView.builder(
itemCount:snapshot.data[selectedItems.selectedTv].content.length,
滚动方向:轴水平,
itemBuilder:(构建上下文,int索引){
返回