Navigator.pop

时间:2020-05-17 11:35:32

标签: flutter

在我的应用中,当我使用BottomNavigationBarItem(参见Home小部件)时,FutureBuilder可以正常工作。

但是,当我使用Navigator.push和Navigator.pop时,未触发FutureBuilder。

我不明白为什么,任何帮助将不胜感激。 吼叫我的代码。

Home widget
import 'package:com.pro.cocotal.online/models/product.dart';
import 'package:com.pro.cocotal.online/models/user.dart';
import 'package:com.pro.cocotal.online/screens/home/products/productListScreen.dart';
import 'package:com.pro.cocotal.online/screens/home/shopSettings/shopSettings.dart';
import 'package:flutter/material.dart';

class Home extends StatefulWidget {

  final User user;
  final List<Product> products;

  Home(this.user, this.products);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {

  int _selectedIndex = 0;
  List<Widget> _widgetOptions;


  @override
  void initState(){

    _widgetOptions = <Widget>[
      ProductListScreen(widget.user, widget.products),
      ShopSettings(widget.user),    
    ];  

  }



  //navigue dans les menus
  void _onItemTapped(int index) {
    setState(() {
      _selectedIndex = index;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body:Center(
        child: Scaffold(
          body:_widgetOptions.elementAt(_selectedIndex),
          bottomNavigationBar: BottomNavigationBar(
            items: [
              BottomNavigationBarItem(
                title: Text(''),
                icon: Icon(Icons.home, color: Colors.blueAccent, size: 35),
              ),
              BottomNavigationBarItem(
                title: Text(''),
                icon: Icon(Icons.settings, color: Colors.blueAccent, size: 35)
              )
            ],
            currentIndex: _selectedIndex,
            selectedItemColor: Colors.amber[800],
            onTap: _onItemTapped,
          ),
        ),
      )

    );
  }
}

ProductListScreen类

import 'package:com.pro.cocotal.online/models/product.dart';
import 'package:com.pro.cocotal.online/models/user.dart';
import 'package:com.pro.cocotal.online/screens/home/products/addProductScreen.dart';
import 'package:com.pro.cocotal.online/screens/home/products/productScreen.dart';
import 'package:com.pro.cocotal.online/services/productService.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';

class ProductListScreen extends StatefulWidget {
  final List<Product> products;
  final User user;

  ProductListScreen(this.user, this.products);

  @override
  _ProductsState createState() => _ProductsState();
}

class _ProductsState extends State<ProductListScreen> {
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text("Tienda " + widget.user.storeName),
        elevation: 0,
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          Expanded(
              child: CustomScrollView(
              slivers: <Widget>[
                SliverAppBar(
                  backgroundColor: Colors.blue,
                  expandedHeight: 130,
                  flexibleSpace: FlexibleSpaceBar(
                    background: Image.network(
                      "https://cocotal.online/wp-content/uploads/revslider/cropped-slider-41.jpg",
                      fit: BoxFit.cover,
                    ),
                  ),
                ),
                FutureBuilder(
                  future: ProductService().getProducts(widget.user),
                  builder: (context, productSnaps){
                    List<Product> products = productSnaps.data;
                    if (productSnaps.connectionState != ConnectionState.done) { 
                      return SliverFixedExtentList(
                        itemExtent: 1,
                        delegate: SliverChildBuilderDelegate(
                          (context, i) {
                            return SpinKitRotatingCircle(
                              color: Colors.white,
                                size: 50.0,
                            );
                          },
                          childCount: 1,
                        ),
                      );
                    }
                    if (productSnaps.hasData == null) {
                      return SliverFixedExtentList(
                        itemExtent: 0,
                        delegate: SliverChildBuilderDelegate(
                          (context, i) {
                            return ListTile(
                              title: Text("null"),
                              trailing: Icon(Icons.delete),
                              onTap: () {
                              },
                            );
                          },
                          childCount: 1,
                        ),
                      );
                    }
                    return SliverFixedExtentList(
                      itemExtent: 50,
                      delegate: SliverChildBuilderDelegate(
                        (context, i) {
                          return ListTile(
                            title: Text(products[i].name),
                            trailing: Icon(Icons.delete),
                            onTap: () {
                              Navigator.of(context).push(MaterialPageRoute(
                                builder: (context) => ProductScreen(products[i])));
                            },
                          );
                        },
                        childCount: products.length,
                      ),
                    );
                  },
                ),
              ],
            ),
          ),
          RaisedButton.icon(
            onPressed: () {
              Navigator.of(context).push(
                  MaterialPageRoute(builder: (context) => AddProduct()));
            },
            icon: Icon(Icons.add_circle),
            label: Text('Add a product')
          ),          
        ],   
      )
    );
  }
}

ProductScreen类

import 'package:com.pro.cocotal.online/models/product.dart';
import 'package:flutter/material.dart';

class ProductScreen extends StatefulWidget {

  final Product product;
  const ProductScreen(this.product);

  @override
  _ProductScreenState createState() => _ProductScreenState();
}

class _ProductScreenState extends State<ProductScreen> {


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.product.name),
        leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: ()async{
          Navigator.pop(context);
        }),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          Row(
            children: <Widget>[
              Text("Nom : " + widget.product.name),
            ],
          ),
          Row(
            children: <Widget>[
              Text("Description : " + widget.product.description),
            ],
          ),      
          Row(
            children: <Widget>[
              Text("Prix : " + widget.product.price),
            ],
          ),    
        ],
      ),
    );

  }
}

0 个答案:

没有答案