我已经看到了几个使用'extends'和'with'关键字扩展ChangeNotifier的模型的示例。我不确定有什么区别。
<table class="table table-hover table-bordered results" style="color:white;">
<thead>
<tr>
<th>Contact #</th>
<th>Picture</th>
<th >Name / Surname</th>
<th >Address</th>
</tr>
<tr class="warning no-result">
<td colspan="4"><i class="fa fa-warning"></i> No result</td>
</tr>
</thead>
<tbody>
<?php
$sqlb = "select * from debtors ";
$resultb = $conn->query($sqlb);
while($rowb = $resultb->fetch_assoc()){
$id=$rowb['contact #'];
?>
<tr a class="dropdown-item" data-toggle="modal" data-target="#logoutModal" style="color:white;">
<td><?php echo $rowb['contact #']; ?></td>
<td><?php echo $rowb['lname']; ?></td>
<td><?php echo $rowb['fname']; ?></td>
<td><?php echo $rowb['address']; ?></td></a>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<!-- Logout Modal-->
<span>
<div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel"></h5>
<button class="close" type="button" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">x</span>
</button>
</div>
<div class="modal-body"><?php echo $rowb['lname']; ?>, <?php echo $rowb['fname']; ?><BR>
<?php echo $rowb['balance']; ?>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-info" href="admin_logout.php">Yes</a>
</div>
</div>
</div>
</div>
</span>
两者之间有什么区别?我应该使用哪一个?
答案 0 :(得分:4)
您可以使用extends
(继承)或with
(作为混合)。两种方式都可以让您访问notifyListeners()
中的ChangeNotifier
方法。
扩展ChangeNotifier
意味着ChangeNotifier
是超类。
class MyModel extends ChangeNotifier {
String someValue = 'Hello';
void doSomething(String value) {
someValue = value;
notifyListeners();
}
}
如果您的模型类已经在扩展另一个类,则无法扩展ChangeNotifier
,因为Dart不允许多重继承。在这种情况下,您必须使用mixin。
mixin允许您使用mixin类(即notifyListeners()
)的具体方法。
class MyModel with ChangeNotifier {
String someValue = 'Hello';
void doSomething(String value) {
someValue = value;
notifyListeners();
}
}
因此,即使您的模型已经从另一个类扩展了,您仍然可以“混入” ChangeNotifier
。
class MyModel extends SomeOtherClass with ChangeNotifier {
String someValue = 'Hello';
void doSomething(String value) {
someValue = value;
notifyListeners();
}
}
这里有一些关于mixin的好读物:
答案 1 :(得分:0)
extends
用于继承一个类
with
用于将类用作 mixin
请参阅此处以了解 mixin 和继承力之间的区别:https://stackoverflow.com/a/860312/10471480
文档中提到ChangeNotifier
可以扩展或混合的类,该类使用VoidCallback提供通知以提供更改通知API。
因此,您既可以继承它,也可以将其用作mixin