Флаттер: как передать данные из родительского виджета с отслеживанием состояния на одну из вкладок в BottomNavigationBar? - PullRequest
0 голосов
/ 02 ноября 2018
import 'package:flutter/material.dart';

class HomeScreen extends StatefulWidget {
  HomeScreen();

  @override
  _HomeScreenState createState() => new _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _currentIndex = 0;
  final List<Widget> _children = [
    MapsScreen(),
    HistoryScreen(),
  ];

  @override
  void initState() {
    super.initState();
    RestAPI.loadMapsFromNetwork();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home screen'),
      ),
      body: _children[_currentIndex],
      bottomNavigationBar: BottomNavigationBar(
        onTap: onTabTapped, // new
        currentIndex: _currentIndex,
        items: [
          BottomNavigationBarItem(
            icon: new Icon(Icons.map),
            title: new Text('Maps'),
          ),
          BottomNavigationBarItem(
            icon: new Icon(Icons.change_history),
            title: new Text('History'),
          )
        ],
      ),
    );
  }

  void onTabTapped(int index) {
    setState(() {
      _currentIndex = index;
    });
  }
}

Этот home.dart выполняет сетевой вызов в методе initState. Как передать список карт, полученных клиентом из сети, на одну из вкладок, например MapsScreen? Нужно ли использовать ScopedModel или InheritedWidget или есть лучший подход? Вся логика визуализации находится в классе MapsScreen.

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете передать значение из ответа json следующим образом.

class MapScreen extends StatefulWidget { 
Map<List<String,dynamic>> data ;

MapScreen({this.data}) ;

  _MapScreenState createState() => _MapScreenState() ;

 }

class _MapScreenState extends State<MapScreen> { 
  @override 
  Widget build(BuildContext context) { 
    return Container( 
       child: ListView( 
         /* use the data over here */ 
       ), 
    ); 
  } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...