SystemContextMenuController.show 已棄用
概述
#SystemContextMenuController.show 已棄用。透過將呼叫 SystemContextMenu.getDefaultItems 的結果傳遞給 SystemContextMenuController.showWithItems,可以實現相同的功能。
背景
#最初新增 iOS 繪製的 SystemContextMenu 功能時,無法控制選單中顯示的項。平臺會根據活動的 TextInputConnection 來決定顯示哪些項。
這種方法的缺點是,通常會顯示一個“自動填充”按鈕,但 Flutter 無法響應此按鈕。因此,在許多情況下,使用者會看到一個點選後無任何作用的“自動填充”按鈕,而 Flutter 應用開發者也無法隱藏該按鈕。
透過引入新方法 SystemContextMenuController.showWithItems 解決了此問題,該方法要求傳遞一個 items 列表。
對於不關心顯示哪些項的開發者,可以呼叫新方法 SystemContextMenu.getDefaultItems,根據給定的 EditableTextState 獲取預設項。例如,如果 EditableTextState 表明未選擇任何內容,則不會包含“**複製**”按鈕,因為它需要有選中的內容才能複製。
遷移指南
#大多數使用者透過 SystemContextMenu widget 使用系統上下文選單,在這種情況下無需任何更改。SystemContextMenu widget 會在後臺自動獲取預設項。
無需遷移
class _MyWidgetState extends State<MyWidget> {
@override
Widget build(BuildContext context) {
TextField(
contextMenuBuilder: (BuildContext context, EditableTextState editableTextState) {
return SystemContextMenu.editableText(
editableTextState: editableTextState,
);
}
);
}
}對於直接使用 SystemContextMenuController 的高階使用者,請遷移到新方法 SystemContextMenuController.showWithItems。可以透過 SystemContextMenu.getDefaultItems 獲取預設項列表,該列表為 IOSSystemContextMenuItems,可以透過 IOSSystemContextMenuItem.getData 轉換為 showWithItems 所需的格式。
遷移前的程式碼
_controller.show(selectionRect);遷移後的程式碼
final List<IOSSystemContextMenuItem> defaultItems =
SystemContextMenu.getDefaultItems(editableTextState);
final WidgetsLocalizations localizations =
WidgetsLocalizations.of(context);
final List<IOSSystemContextMenuItemData> defaultItemDatas =
defaultItems
.map((IOSSystemContextMenuItem item) =>
item.getData(localizations))
.toList();
_controller.showWithItems(selectionRect, defaultItemDatas);時間線
#已在版本中落地:3.29.0-0.3.pre
穩定版本:3.32
參考資料
#API 文件
TextInputConnectionSystemContextMenuController.showSystemContextMenuController.showWithItemsSystemContextMenu
相關問題
相關 PR