#flutter #dart #flutter-dependencies #flutter-provider
Вопрос:
Я использую пакет поставщика flutter для получения данных.
У меня есть 2 проблемы.
- В классе dataProvider я инициализировал и запустил его 3 раза, чтобы получить данные,
- Мне нужно обновить данные каждые 5 минут(я обновляю данные с помощью вызова api) как я могу это объяснить, я думаю, нужно добавить функцию таймера.где я могу их добавить.
`
class DataProvider with ChangeNotifier {
DataProvider() {
getData();
/*this will call 3 times when i call changenotifier provider in the ui*/
}
List<Data> _vData = [];
//<Data> is my mode
List<Data> get vData => _vData ;
getData() async {
try {
_vData = await instatntApi().Services();
// got the data from service
notifyListeners();
return _vData ;
} catch (e) {
print("error provider $e");
}
}
}
`
вот мой вызов пользовательского интерфейса
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: ChangeNotifierProvider<DataProvider>(
create:
(context) => DataProvider(),
child: Builder(
builder: (
context,
) {
final model = Provider.of<DataProvider>(context);
return ListView.builder(
itemCount: model.vData.length,
itemBuilder: (BuildContext context, int index) {
return Center(
child: Text(
model.vData[index].text.toString(),
style: TextStyle(color: Colors.black),
),
);
});
},
),
),
),
),
);
}
}
Комментарии:
1. Мне нужно , чтобы вы опубликовали пользовательский интерфейс, который вызывает ваш
Provider
, потому что это, вероятно, причина тройного вызова. Вы используете aFutureBuilder
и инициализируетеfuture
непосредственно в нем?2. @venir Нет,я использую changeNotifierProvider в своем пользовательском интерфейсе
3. @venir Теперь я обновил часть пользовательского интерфейса в вопросе
4. Не могли бы вы опубликовать полную реализацию вашего Провайдера? Нам нужно глубже вникнуть в это
.HomePageList
и.data
свойства, которых я не вижу в вашей реализации5. извини, я забыл оценить твою работу,Спасибо, братан….
Ответ №1:
Вы можете попробовать Timer.periodic
class DataProvider with ChangeNotifier {
bool _call = false;
DataProvider() {
if(!_call){
getData();
_call = true;
}
}
List<Data> _vData = [];
List<Data> get vData => _vData ;
getData() async {
await processData();
Timer.periodic(Duration(minute: 5), (t){
processData();
});
}
processData() async{
try {
_vData = await instatntApi().Services();
// got the data from service
notifyListeners();
} catch (e) {
print("error provider $e");
}
}
}
Комментарии:
1. могу я узнать, почему это происходит, ожидайте технического ответа, братан, ты что-нибудь знал, в любом случае спасибо за твой ответ
2. тем не менее, он звонит 3-4 раза при первом вызове и запуске таймера