Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振中通过选定指标的更好方法_Flutter - Fatal编程技术网

Flutter 颤振中通过选定指标的更好方法

Flutter 颤振中通过选定指标的更好方法,flutter,Flutter,我有firestore的数据 我需要在一个页面中显示名称,在另一个页面中显示内容名称,等等 还有比这更好的方法吗 电视节目页 FutureBuilder( future: Provider.of<Data>(context).fetchShows(), builder: (context, snapshot) { if (snapshot.hasData) { return L

我有firestore的数据

我需要在一个页面中显示名称,在另一个页面中显示内容名称,等等

还有比这更好的方法吗

电视节目页

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索引){
返回