我正在尝试将从一个 api 一个组件获得的信息传递给另一个组件

I'm trying to pass on information that I get from one api e a component to another in flutter

我正在使用一种搜索 api 的方法,但我无法将我获得的信息传递给呈现它的 Widget 并获得数据,我一切正常

Header 搜索小工具:

import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:movies/Movies/bloc/blocmovies.dart';
import 'package:movies/Movies/model/findmoviemodel.dart';
import 'package:movies/Movies/ui/widgets/gridview_search_screen.dart';

class HeaderSearchScreen extends StatefulWidget with PreferredSizeWidget {
  HeaderSearchScreen({Key key}) : super(key: key);

  @override
  _HeaderSearchScreenState createState() => _HeaderSearchScreenState();

  @override
  Size get preferredSize => Size.fromHeight(kToolbarHeight);
}

class _HeaderSearchScreenState extends State<HeaderSearchScreen> {
  BlocMovies blocMovies;
  final TextEditingController _controller = TextEditingController();

  Widget appBarTitle() {
    return TextField(
      onSubmitted: searchOperation,
      autofocus: true,
      controller: _controller,
      style: TextStyle(
        color: Colors.black,
      ),
      decoration: InputDecoration(
          suffix: IconButton(
            icon: Icon(Icons.cancel),
            onPressed: () {
              Future.delayed(Duration(milliseconds: 50)).then((_) {
                _controller.clear();
                FocusScope.of(context).unfocus();
              });
            },
          ),
          hintText: "Buscar",
          hintStyle: TextStyle(color: Colors.grey.withOpacity(0.5))),
    );
  }
  @override
  Widget build(BuildContext context) {
    blocMovies = BlocProvider.of(context);

    return buildAppBar(context);
  }

  Widget buildAppBar(BuildContext context) {
    return AppBar(
        iconTheme: IconThemeData(color: Colors.black),
        backgroundColor: Colors.white,
        centerTitle: true,
        title: this.appBarTitle());
  }

   searchOperation(String searchText) {
       blocMovies.findMovies(searchText)
      .then((data){
        if(data.results.length == 0){
             print("no se encontro");
          showDialog(
            context: context,
            child:  AlertDialog(
                title: const Text("No se encontro la pelicula"),
                actions: [
                 FlatButton(
                  child: const Text("Ok"),
                  onPressed: () => Navigator.pop(context),
                ),
              ],
            ),
        );
        }else{
            setState(() {
              print(data.results);
              GridViewSearchScreen(listsearchmovieOne: data.results);
            });
        }
      })
      .catchError((){
        print("Hubo un error");
      });

  }
}

/*
 blocMovies.findMovies(searchText)
      .then((data){
        if(data.results.length == 0){
             print("no se encontro");
          showDialog(
            context: context,
            child:  AlertDialog(
                title: const Text("No se encontro la pelicula"),
                actions: [
                 FlatButton(
                  child: const Text("Ok"),
                  onPressed: () => Navigator.pop(context),
                ),
              ],
            ),
        );
        }else{
              //Here trying pass datan and debug console a get snapshot
              GridViewSearchScreen(listsearchmovieOne: data.results);

        }
      })
      .catchError((){
        print("Hubo un error");
      });

网格视图搜索:

import 'package:animate_do/animate_do.dart';
import 'package:flutter/material.dart';
import 'package:movies/Movies/model/findmoviemodel.dart';
import 'package:movies/Movies/ui/widgets/cadsearchmovies.dart';
import 'package:movies/Widgets/Screen_Sizes/responsive_screens.dart';

class GridViewSearchScreen extends StatefulWidget {
  List<Result> listsearchmovieOne;
  double _crossAxisSpacing = 15, _mainAxisSpacing = 12, _aspectRatio = 1;
  GridViewSearchScreen({Key key, this.listsearchmovieOne}) : super(key: key);

  @override
  _GridViewSearchScreenState createState() => _GridViewSearchScreenState(listsearchmovie: this.listsearchmovieOne );
}

class _GridViewSearchScreenState extends State<GridViewSearchScreen> {
  List<Result> listsearchmovie;
  _GridViewSearchScreenState({this.listsearchmovie});
  @override
  Widget build(BuildContext context) {
    double screenWidth = MediaQuery.of(context).size.width;
    double screenHeight = MediaQuery.of(context).size.height;
    double _pixeRatio = MediaQuery.of(context).devicePixelRatio;
    bool small = ResponsiveWidget.isScreenSmall(screenWidth, _pixeRatio);
    bool medium = ResponsiveWidget.isScreenMedium(screenWidth, _pixeRatio);
    bool large = ResponsiveWidget.isScreenLarge(screenWidth, _pixeRatio);
    return (listsearchmovie == null)
        ? Center(
            child: Container(
            child: Text("No hay peliculas que mostrar"),
          ))
        : Container(
            margin: EdgeInsets.only(top: screenHeight * 0.2),
            child: GridView.builder(
                itemCount: listsearchmovie.length,
                gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                  crossAxisCount: (large) ? 4 : (medium) ? 2 : (small) ? 2 : 2,
                  crossAxisSpacing: widget._crossAxisSpacing,
                  mainAxisSpacing: widget._mainAxisSpacing,
                  childAspectRatio: (large)
                      ? screenWidth / (screenHeight / 0.62)
                      : (medium)
                          ? screenWidth / (screenHeight / 1.03)
                          : (small)
                              ? screenWidth / (screenHeight / 1.03)
                              : screenWidth / (screenHeight / 1.03),
                ),
                itemBuilder: (BuildContext context, int i) {
                  final movie = listsearchmovie[i];
                  print(movie.posterPath);
                  return FadeInLeft(
                    duration: Duration(milliseconds: 10 * i),
                    child: CardSearchinfoMovies(
                        movie: Result(
                            backdropPath: movie.backdropPath,
                            overview: movie.overview,
                            posterPath: movie.posterPath,
                            voteAverage: movie.voteAverage,
                            title: movie.title)),
                  );
                }));
  }
}

在这个屏幕上,这两个小部件放在一起

import 'package:flutter/material.dart';
import 'package:movies/Movies/ui/widgets/gridview_search_screen.dart';
import 'package:movies/Movies/ui/widgets/header_search_screen.dart';


class ScreenSearchMovies extends StatefulWidget {
  @override
  _ScreenSearchMoviesState createState() =>  _ScreenSearchMoviesState();
}

class _ScreenSearchMoviesState extends State<ScreenSearchMovies> {

  @override
  Widget build(BuildContext context) {
    return  Scaffold(
        appBar: HeaderSearchScreen(),
        body: Stack(
          children:<Widget>[
            GridViewSearchScreen()
          ]
        )
        );
  }

}

知道我已经尝试了所有方法但无法显示信息吗?

试试这个方法:

`....
....
class _GridViewSearchScreenState extends State<GridViewSearchScreen> {
  List<Result> listsearchmovie = List<Result>();
  _GridViewSearchScreenState({this.listsearchmovie});
.....
.....
`