我有一个平板电脑的主从页面。
当我在列表中选择一个项目时,我想更改详细信息页面。
所以我写了这样的代码,
class AttendancesModel with ChangeNotifier {
final int userId;
AttendancesModel(this.userId);
List<Attendance> attendances = [];
// do initialize
}
class AttendancesPage extends StatelessWidget {
final int userId;
AttendancesPage(this.userId);
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => AttendancesModel(userId),
child: Consumer(
builder: (_, model, __) {
print('model.userId=${model.userId}')
return Scaffold(
// appbar, body, etc...
);
}
)
);
}
}
但是,建造者收到的模型总是相同的值。
因此,更改用户选择不会更改详细信息屏幕。
如何创建新模型?
谢谢你。
[编辑] 这样的 UserListPage 会通知用户选择
class UserListModel with ChangeNotifier {
List<User> users = [];
int _selectedUserId;
int get selectedUserId => _selectedUserId;
set selectedUserId(int userId) {
_selectedUserId = userId;
notifyListeners();
}
}
class UserListPage extends StatelessWidget {
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: Provider.of<UserListModel>(context),
child: Consumer(
builder: (_, model, __) {
return ListView.builder(
itemBuilder: (_, i) {
final user = model.users[i];
return ListTile(
title: Text(user.name),
onTap: () => model.selectedUserId = user.id,
);
},
itemCount: model.users.length
);
}
)
)
}
}
class HomePage extends StatelessWidget {
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => UserListModel(),
child: HomePageBody()
);
}
}
class HomePageBody extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
body: Row(
children: <Widget>[
SizedBox(width: 320, child: UserListPage()),
ChangeNotifierProvider.value(
value: Provider.of<UserListModel>(context),
child: Consumer<UserListModel>(
builder: (_, model, __) {
return AttendancePage(model.selectedUserId);
}
)
)
]
)
)
}
}