提供程序无法重建主屏幕

时间:2020-03-23 02:13:41

标签: flutter flutter-provider

class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MultiProvider(
          providers: [
            ChangeNotifierProvider.value(
              value: Auth(),
             // value: Auth(),
            ),
            ),
          ],
          child: MaterialApp(
            home: Consumer<Auth>(builder: (ctx, auth, _) {
              return auth.isAuth
                  ? ProfileScreen()
                  : LoginScreen()
            }),
          ),
        );
      }
    }

在此代码中,如果在身份验证提供程序中更改了isAuth属性,并调用了notifyListeners(),则“我的应用”屏幕将不收听该消息!有什么问题吗?

2 个答案:

答案 0 :(得分:0)

MyApp无法收听,因为您没有在Provider.of(context)方法中使用build()。在当前代码中,每次更改值时都会调用Consumer的{​​{1}}方法。

答案 1 :(得分:0)

使用此:

import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt


air = xr.tutorial.open_dataset('air_temperature').air[0]

fig = plt.figure(figsize=(14,5))

ax1 = fig.add_subplot(121,
                 projection=ccrs.PlateCarree(central_longitude=180))
air.plot.pcolormesh(ax=ax1,
               transform=ccrs.PlateCarree(),
               cbar_kwargs={'orientation':'horizontal'})
ax1.coastlines()
ax1.set_extent((air.lon[0], air.lon[-1], air.lat[-1], air.lat[0]),
               crs=ccrs.PlateCarree())

ax2 = fig.add_subplot(122)
air.mean('lon').plot(ax=ax2, y='lat')

plt.tight_layout()