А в чем проблема загрузить настройки и передать их в провайдер до runApp, не делая провайдер синглтоном?
Синглтон, на мой взгляд, это почти всегда анти-паттерн, поскольку теряется контроль над временем жизни объекта, может поползти архитектура, если начнут обращаться напрямую к синглтону вместо нормального доступа через
context.read и т.д.