Я хочу, чтобы мое приложение получало данные из sqflite по значению, предоставленному пользователем. Я использую провайдера для установки нового значения, но я не могу передать новое значение с провайдером в класс базы данных, потому что не в дереве виджетов, если я прав. Мой вопрос заключается в том, как я могу передать новое значение классу БД?
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:mcr/app.dart';
import 'package:mcr/bloc/bloc_meals.dart';
import 'package:mcr/db/breakfast_db_provider.dart';
import 'package:mcr/logic/day_selector_model.dart';
import 'package:provider/provider.dart';
class WeekdaysSelector extends StatefulWidget {
@override
_WeekdaysSelectorState createState() => _WeekdaysSelectorState();
}
class _WeekdaysSelectorState extends State<WeekdaysSelector> {
final blocMeal = MealsBloc();
final dateSelector = DaySelectorModel();
int datePassed = 0;
@override
Widget build(BuildContext context) {
var datePassing = Provider.of<DaySelectorModel>(context, listen: false);
print("Data teraz!!!!!");
return Padding(
padding: const EdgeInsets.symmetric(horizontal:40),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Consumer<DaySelectorModel>(
builder: (context, dateSe, child){
return GestureDetector(
onTap:(){
datePassed--;
datePassing.daySelectorSub();
print("datata !!!!!!!!!!!!!!!!${dateSelector.daySelected.day}");
},
child: Container(
child: Icon(Icons.arrow_left,color: Colors.blueGrey,),
),
);
}
),
Container(
height: 20.0,
child: GestureDetector(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 0,
vertical:0
),
child: Container(
height: 20,
width: 90.0,
child: Center(
child:Consumer<DaySelectorModel>(
builder:(context, dateSe, child){
print("diididickcickikiddicki${dateSe.daySelected.day} ");
return Container(
width: 150,
child: Text("${dateSe.daySelected.day}/ 0${dateSe.daySelected.month}/ ${dateSe.daySelected.year}",style: GoogleFonts.ubuntu(color: Colors.blueGrey,fontSize: 15,)));
})
),
),
),
),
),
GestureDetector(
onTap:(){
datePassing.daySelectorAdd();
print("datata !!!!!!!!!!!!!!!!${dateSelector.daySelected.day}");
},
child: Container(
child: Icon(Icons.arrow_right,color: Colors.blueGrey,),
),
),
],
),
);
}
}
and provider model
import 'package:flutter/material.dart';
class DaySelectorModel extends ChangeNotifier{
static DateTime now = DateTime.now();
static DateTime lastMidnight = now.subtract(Duration(
hours: now.hour,
minutes: now.minute,
seconds: now.second,
milliseconds: now.millisecond,
microseconds: now.microsecond,
));
int n = 0;
DateTime _dateSelected = lastMidnight.add(Duration(days: 0));
void daySelectorAdd(){
n++;
_dateSelected = lastMidnight.add(Duration(days: n));
_dateSelected.add(Duration(days: n));
notifyListeners();
print("asddasd !!!!!!!!!!!!!!!!${_dateSelected.day}");
}
void daySelectorSub(){
n--;
_dateSelected = lastMidnight.add(Duration(days: n));
_dateSelected.add(Duration(days: n));
notifyListeners();
print("asddasd !!!!!!!!!!!!!!!!${_dateSelected.day}");
}
DateTime get daySelected => _dateSelected;
void resetDate(){
_dateSelected = lastMidnight.add(Duration(days: 0));
_dateSelected.add(Duration(days: 0));
}
}
Поэтому я хочу, чтобы класс базы данных имел доступ к дате и выбрал новое значение. БД просто выбирается с помощью где dateCreated = dayselected.day ....