我有一个类,它是with
一个ChangeNotifer。当我在这个类中调用一个方法时,我想更新一个列表视图。这是一个类:
class WorkoutProvider with ChangeNotifier
{
List<Exercise> _workoutList = <Exercise>[];
///constructor
WorkoutProvider();
///get&set
List<Exercise> get workout => _workoutList;
set workout(List<Exercise> value) {
_workoutList = value;
}
///removing an exercise to the list
void removeExercise(Exercise exercise)
{
_workoutList.remove(exercise);
print("deleting");
notifyListeners();
}
}
下面是列表视图:
myPro = Provider.of<WorkoutProvider>(context);
body:Consumer<WorkoutProvider>(
builder: (BuildContext context, WorkoutProvider value, Widget? child)
{
print("building cons");
return ListView.builder(
padding: EdgeInsets.symmetric(horizontal: 30, vertical: 10),
itemCount: value.workout.length,
itemBuilder: (context, index) =>
Container(
margin: EdgeInsets.symmetric(vertical: 3),
child: exerciseCard(value.workout.elementAt(index))),
);
},
),
/// used to delete the exercise from the list of exercises
Widget buildDeleteExerciseBt(Exercise delExercise)
{
return IconButton(
onPressed: (){
myPro.removeExercise(delExercise);
},
icon: Icon(
Icons.delete,
color: Colors.red,
));
}
检查后,它正在从类中删除练习,但UI没有更新。
以下是供应商的注册:
Future<void> main() async {
GlobalContextService.navigatorKey = GlobalKey<NavigatorState>();
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(
MultiProvider(
providers: [
Provider<WorkoutProvider>(create: (_) => WorkoutProvider()),
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
routes: {
'/' : (context) => AlreadyLoggedChecker(),
'/login-screen': (context) => LoginScreen(),
'/workout-review' : (context) => WorkoutReviewScreen(),
'/create-training' : (context) => TrainingCreateScreen(),
},
initialRoute: '/',
),
),
);
}
我试着放一些print(),所以当调用notifylistners()的方法时,消费者不会被构建。
1条答案
按热度按时间u5rb5r591#
显然,在
main
中注册提供程序时,我应该使用ChangeNotifierProvider
而不是Provider
。