widget的操作抽离出一个模块