Как я могу отображать данные в виде списка из облачного хранилища и передавать в другой файл во флаттере - PullRequest
0 голосов
/ 19 октября 2019

Я хочу взять данные из облачного пожарного хранилища и отправить в другой файл во флаттере

Я использую Streambuilder для извлечения данных, но список не инициализирован глобально

  class _DataState extends State<Data> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
       stream: Firestore.instance.collection('notification').snapshots(),
        builder: (context, snapshot) {
          if(!snapshot.hasData){
            return new Container(
                          margin: const EdgeInsets.only(top: 25.0),
                          child: new Center(
                            child: new Text(
                              "loading Data Please wait...",
                              style: new TextStyle(
                                color: Colors.white
                              ),
                            ),
                          ),
                        );
          }
return ListView.builder(
            shrinkWrap: true,
           itemCount: snapshot.data.documents.length,
            itemBuilder: (BuildContext context, int index) {
            DocumentSnapshot ds = snapshot.data.documents[index];
      List<Book> books = [
      Book(ds['school_name'], ds['school_name'],'Rp 50.000', 'res/corel.jpg', 3.5, 123),
];
      }
);
        },
    );
  }
}

ифайл, в который я хочу получить данные:

final grid = CustomScrollView(
  primary: false,
  slivers: <Widget>[
    SliverPadding(
      padding: EdgeInsets.all(16.0),
      sliver: SliverGrid.count(
        childAspectRatio: 2 / 3,
        crossAxisCount: 3,
        mainAxisSpacing: 20.0,
        crossAxisSpacing: 20.0,
        children: books.map((book) => createTile(book)).toList(),
      ),
    )
  ],
);

Проблема в том, как я могу использовать массив книг в другом файле, потому что это локальная переменная. есть ли другой способ сделать то же самое.

1 Ответ

0 голосов
/ 31 октября 2019

Я нашел похожий вопрос , вы можете использовать навигатор для передачи данных или объекта в другой класс.

В вашем случае вы можете использовать навигатор так:

class _DataState extends State<Data> {
    ........
    List<Book> books = [
      Book(ds['school_name'], ds['school_name'],'Rp 50.000', 'res/corel.jpg', 3.5, 123),];

    // Navigate to second screen with data
    Navigator.push(context, new MaterialPageRoute(builder: (context) => new 
    SecondScreenWithData(book: books)));                                          
   ...                                                                              
}

Второй класс

class SecondScreenWithData extends StatelessWidget {
   // Declare a field that holds the Books data
   final List<book> book;
   ......
   // In the constructor, require a Book
   SecondScreenWithData({Key key, @required this.book}) : super(key: key);
   ......
   // To display your books
   children: <Widget>[
   // Display passed data from first screen, you can run a for if you have more than a book
  new Text("Book Data  \nschool name: ${book[0][0]} \nprice: ${book[0][2]}")] 
   ......   
} 

Здесь вы можете найти учебник, который поможет вам с передачей и обменом данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...