Read database from IO context and update UI from Main context in Kotlin
One thing that makes it kludgy is using GlobalScope, which is discouraged by the coroutines design lead. In this case, if this were a very long-running job, you would be leaking your UI elements because they are captured by the coroutine.
Also, since you are using Room, you can make your DAO's getAllWidgets() a suspend function, in which case, there's no reason to use a specific dispatcher to call it. A properly composed suspend function doesn't block the dispatcher it is called from, so you never should have to specify a dispatcher to call a suspend function. The proper way to do this would be:
private fun updateList() {
    getListJob = lifecycleScope.launch {
        widgetList = db.widgetDao().getAllWidgets()
        val recyclerView = findViewById&lt;RecyclerView&gt;(R.id.deck_recycler_view)
        var widgetListAdapter = WidgetListAdapter(widgetList)
        recyclerView.adapter = widgetListAdapter
        widgetListAdapter.notifyDataSetChanged()
    }
}

No Dispatcher specifying needed at all, because the coroutine doesn't call any blocking code and lifecycleScope defaults to Dispatchers.Main.