Q: ¿Cómo hago una petición POST a un objeto dentro de otro objeto, con Dart? Necesito subir a una db de firebase una clase Restaurante con otra clase dentro Menus. Mi objetivo es después poder retornar esa información de Restaurante con sus Menus.
MODELO DEL RESTAURANTE
Restaurant restaurantFromJson(String str) => Restaurant.fromJson(json.decode(str));

String restaurantToJson(Restaurant data) => json.encode(data.toJson());

class Restaurant {
    Restaurant({
        this.name,
        this.menu,
    });

    String name;
    List<Menu> menus;

    factory Restaurant.fromJson(Map<String, dynamic> json) => Restaurant(
        name: json["name"],
        menu: List<Menu>.from(json["menu"].map((x) => Menu.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "name": name,
        "menu": List<dynamic>.from(menu.map((x) => x.toJson())),
    };
}

class Menu{
    Menu({
        this.name,
        this.price,
        this.descrip,
    });

    String name;
    int price;
    String descrip;

    factory Menu.fromJson(Map<String, dynamic> json) => Menu(
        name: json["name"],
        price: json["price"],
        descrip: json["descrip"],
    );

    Map<String, dynamic> toJson() => {
        "name": name,
        "price": price,
        "descrip": descrip,
    };
}

PROVIDER (PETICION)
class RestaurantProvider{  //El puente entre el firebase y mi app

  final String _url = "https://comida-d20f0-default-rtdb.firebaseio.com";

  Future<bool> createRestaurant(Restaurant restaurant) async{

    final url = "$_url/restaurants.json";

    final resp = await http.post(Uri.parse(url), body: restaurantToJson(restaurant));

    final decodedData = json.decode(resp.body);

    print(decodedData);

    return true;
  }

INTENTO DE RETORNO Esto es un código de prueba para ver si me funciona el POST pero creo que acá es donde estoy fallando... Cuando mando a llamar el createRestaurant
TextEditingController _textEditingController = new TextEditingController();
TextEditingController _textEditingController2 = new TextEditingController();

final restProv =  RestaurantProvider();
final restaurant = Restaurant();

TextField(controller: _textEditingController), // Coloca el nombre del restaurante

TextField(controller: _textEditingController2,), // Coloca el nombre de 1 Menu del restaurante

FloatingActionButton(
            child: Text('Ok'), 
            onPressed: (){    
               restaurant.name= _textEditingController.text; // Nombre del restaurante
               restaurant.menu[0].name = _textEditingController2.text; //Nombre de 1 Menú

               restProv.createRestaurant(restaurant);
            },
          )

Si hay algo que no se llegara a entender, háganmelo saber, estoy hace varios días con esto y no logro encontrar respuesta; arranqué hace muy poco con Dart y Flutter.
