Вот у меня проблема с другим провайдером. У меня есть главный виджет, который переключает основной вид, этот виджет называется switcher.dart
. Я инициализирую провайдера внутри мультипровера в th switch и использую его в загруженном представлении (mainPage.dart). Представление дало мне ошибку. Поставщик не найден.
switcher.dart
import '../providers/mainPageProvider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/userProvider.dart';
import 'package:flutter/widgets.dart';
import '../widgets/login.dart';
import '../widgets/mainPage.dart';
import '../widgets/splash.dart';
class Switcher extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProxyProvider<UserProvider, MainPageProvider>(
create: (context) => MainPageProvider.init(
Provider.of<UserProvider>(context, listen: false)),
update: (context, userProvider, mainPageProvider) =>
mainPageProvider..update(userProvider),
),
],
child: Consumer<UserProvider>(
builder: (context, user, _) {
print('switcher notifyed');
print(user.status);
switch (user.status) {
case UserStatus.Uninitialized:
return Splash();
break;
case UserStatus.Authenticated:
return MainPage();
break;
case UserStatus.Unauthenticated:
return Login();
break;
case UserStatus.Authenticating:
return Login();
break;
case UserStatus.Checking:
return Splash();
break;
default:
return Splash();
}
},
),
);
}
}
в представлении mainPage. Я использую простого потребителя MainPageProvider, но говорит:
The following ProviderNotFoundError was thrown building Consumer<MainPageProvider>(dirty):
Error: Could not find the correct Provider<MainPageProvider> above this Consumer<MainPageProvider> Widget
To fix, please:
* Ensure the Provider<MainPageProvider> is an ancestor to this Consumer<MainPageProvider> Widget
* Provide types to Provider<MainPageProvider>
* Provide types to Consumer<MainPageProvider>
* Provide types to Provider.of<MainPageProvider>()
* Always use package imports. Ex: `import 'package:my_app/my_code.dart';
* Ensure the correct `context` is being used
view Потребительский пример в этом случае mainPage.dart
import 'package:client/providers/mainPageProvider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:provider/provider.dart';
import '../widgets/smallCard.dart';
import 'contoCard.dart';
class MainPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Container(
height: 100,
margin: EdgeInsets.only(left: 10),
child: Consumer<MainPageProvider>(
builder: (context, mainPageProvider, _) {
if(mainPageProvider.conti == null){
return SpinKitPulse(
color: Theme.of(context).primaryColor,
);
}else if(mainPageProvider.conti.length ==0){
return Text(
'Ancora nessun conto',
style: TextStyle(fontFamily: "sofiapro", fontSize: 14),
);
}else{
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: mainPageProvider.conti.length,
itemBuilder: (BuildContext context, index) {
var conti = mainPageProvider.conti;
var conto = conti[index];
return ContoCard(conto);
},
);
}
},
),
),
.......
Переключатель кажется мне предком, потому что представление загружается как дочерний, я попытался изменить способ импорта с импорта '.. /providers/mainPageProvider.dart '; импортировать «пакет: клиент / провайдеры / mainPageProvider.dart»; но ошибка все еще была.
Любая помощь приветствуется