У меня уникальная ситуация, когда трепетание/дротик, кажется, требует комы для окончания строк вместо точки с запятой, и я полностью сбит с толку. Это правильное поведение или происходит какая-то серьезная ошибка?
SharedPreferences.getInstance().then((prefs) => {
prefs.setString("auth", sr.data);
prefs.setString("phone", myPhone);
}
выдает ошибку "Ожидается найти '}'
если я поменяю их на запятые, все будет в порядке
SharedPreferences.getInstance().then((prefs) => {
prefs.setString("auth", sr.data),
prefs.setString("phone", myPhone),
}
У меня здесь гораздо больше кода с операторами if и другими вещами, но все то же самое. Любая точка с запятой приводит к ошибке, а запятые, похоже, все делают хорошо. Если это правильное поведение, как мне узнать, когда нужны запятые??
возможно, у меня есть много других встроенных функций, подобных этой, которые нормально используют точки с запятой. Это похоже на правду с .then на getInstance. По сути, кажется, что эта конкретная функция имеет уникальный синтаксис. Честно говоря, дартс — самый уродливый язык, который я знаю из 12, на которых я могу программировать.
Этот вопрос похож на: Почему я не могу объявить эту локальную переменную в dart?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
Короче говоря: делая () => { expr1, expr2 }
, вы возвращаете комплект. Вам нужно либо () => expr
, либо () { expr1; expr2; }
. В этом случае Dart не похож на JS.
@DhafinRayhan Я недостаточно понимаю этот вопрос, чтобы ответить. Но кто-то дал отличный ответ ниже
@noone392 noone392 посмотри мой ответ или этот вопрос. Это ответит на ваше замешательство по поводу синтаксиса () => { expr }
в Dart.
() {} требует полустолбца
SharedPreferences.getInstance().then((prefs) {
prefs.setString("auth", sr.data);
prefs.setString("phone", myPhone);
}
() => {} требует запятой
SharedPreferences.getInstance().then((prefs) => {
prefs.setString("auth", sr.data),
prefs.setString("phone", myPhone),
}
Никогда не делайте второго. Вы возвращаете комплект без всякой причины. Это не JS. @ noone392 noone392, этот ответ вводит в заблуждение.
@DhafinRayhan спасибо за дополнительную информацию. Я не осознавал, что случайно сделал лямбду, я думаю, что какой-то мысленный синтаксис из других языков, таких как C#, пробрался, лол.
Я не говорил ему использовать больше одного решения, чем другое, я просто дал ему ответ, и я думаю, он его понял.
Решение на самом деле не дает ответа, а @noone392 в своем комментарии не знает, о чем говорит.
() {}
— функция, код которой находится внутри {}
.
() => {}
— это тоже функция, но возвращающая пустой Map
объект.
Это код, который нужен OP (обратите внимание на отсутствие =>
):
SharedPreferences.getInstance().then((prefs) {
prefs.setString("auth", sr.data);
prefs.setString("phone", myPhone);
}
Пустой набор фигурных скобок ({}
) по умолчанию будет пустым Map
, но в примере ОП фигурные скобки не пусты и будут пытаться вернуть литерал Set
. Этот ответ также был бы лучше, если бы он дополнительно отвечал на вопрос о запятых и точках с запятой: Set
литералы должны содержать элементы, разделенные запятыми, а не операторы, завершающиеся точкой с запятой.
Не знаю, флаттер, но, может быть, нотация объектов (например, Json) или отдельные предложения?