Почему для дротика/флаттера иногда требуется запятая вместо точки с запятой в дротике?

У меня уникальная ситуация, когда трепетание/дротик, кажется, требует комы для окончания строк вместо точки с запятой, и я полностью сбит с толку. Это правильное поведение или происходит какая-то серьезная ошибка?

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 и другими вещами, но все то же самое. Любая точка с запятой приводит к ошибке, а запятые, похоже, все делают хорошо. Если это правильное поведение, как мне узнать, когда нужны запятые??

Не знаю, флаттер, но, может быть, нотация объектов (например, Json) или отдельные предложения?

Justinas 24.07.2024 10:16

возможно, у меня есть много других встроенных функций, подобных этой, которые нормально используют точки с запятой. Это похоже на правду с .then на getInstance. По сути, кажется, что эта конкретная функция имеет уникальный синтаксис. Честно говоря, дартс — самый уродливый язык, который я знаю из 12, на которых я могу программировать.

noone392 24.07.2024 10:22

Этот вопрос похож на: Почему я не могу объявить эту локальную переменную в dart?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

Dhafin Rayhan 24.07.2024 10:26

Короче говоря: делая () => { expr1, expr2 }, вы возвращаете комплект. Вам нужно либо () => expr, либо () { expr1; expr2; }. В этом случае Dart не похож на JS.

Dhafin Rayhan 24.07.2024 10:29

@DhafinRayhan Я недостаточно понимаю этот вопрос, чтобы ответить. Но кто-то дал отличный ответ ниже

noone392 24.07.2024 10:31

@noone392 noone392 посмотри мой ответ или этот вопрос. Это ответит на ваше замешательство по поводу синтаксиса () => { expr } в Dart.

Dhafin Rayhan 24.07.2024 10:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

() {} требует полустолбца

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, этот ответ вводит в заблуждение.

Dhafin Rayhan 24.07.2024 10:31

@DhafinRayhan спасибо за дополнительную информацию. Я не осознавал, что случайно сделал лямбду, я думаю, что какой-то мысленный синтаксис из других языков, таких как C#, пробрался, лол.

noone392 24.07.2024 10:35

Я не говорил ему использовать больше одного решения, чем другое, я просто дал ему ответ, и я думаю, он его понял.

imGok 24.07.2024 10:35

Решение на самом деле не дает ответа, а @noone392 в своем комментарии не знает, о чем говорит.

() {} — функция, код которой находится внутри {}. () => {} — это тоже функция, но возвращающая пустой Map объект.

Это код, который нужен OP (обратите внимание на отсутствие =>):

SharedPreferences.getInstance().then((prefs) {
    prefs.setString("auth", sr.data);
    prefs.setString("phone", myPhone);
}

Пустой набор фигурных скобок ({}) по умолчанию будет пустым Map, но в примере ОП фигурные скобки не пусты и будут пытаться вернуть литерал Set. Этот ответ также был бы лучше, если бы он дополнительно отвечал на вопрос о запятых и точках с запятой: Set литералы должны содержать элементы, разделенные запятыми, а не операторы, завершающиеся точкой с запятой.

jamesdlin 24.07.2024 13:25

Другие вопросы по теме