Я создаю приложение и хочу, чтобы мой пользователь мог редактировать местоположение, которое он выбрал в своем профиле. Это код, который я использовал в User.dart
class User {
final String uid;
final String name;
final String email;
final String userRole;
String adress;
User({this.uid, this.name, this.email, this.userRole, this.adress});
User.fromData(Map<String, dynamic> data)
: uid = data['uid'],
name = data['name'],
email = data['email'],
userRole = data['userRole'],
adress = data['adress'];
Map<String, dynamic> toJson() => {
'uid': uid,
'name': name,
'email': email,
'userRole': userRole,
'adress': adress
};
}
Это код, который я использовал в UserPage.dart для редактирования адреса: Сначала я добавляю к
class _UserProfile extends State<UserPage> {
User userr = User();
TextEditingController _userAdressController = TextEditingController();
...
FutureBuilder(
future: _getProfileData(),
builder: (context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.done) {
_userAdressController.text = userr.adress;
}
return Padding(
padding: const EdgeInsets.all(1.0),
child: Text(
"${userr.adress}",
style: TextStyle(
color: Colors.black,
fontSize: 12,
),
));
}),
}
_getProfileData() async {
final uid = await Provider.of(context).auth.getCurrentUID();
await Provider.of(context)
.db
.collection('userData')
.document('uid')
.get()
.then((result) {
userr.adress = result.data['adress'];
});
}
}
Это то, что я использовал в provider_widget.dart
import 'package: flutter / material.dart'; import 'auth.dart';
class Provider extends InheritedWidget {
final Authentication auth;
final db;
Provider({Key key, Widget child, this.auth, this.db})
: super(key: key, child: child);
@override
bool updateShouldNotify(InheritedWidget oldWidget) {
return true;
}
static Provider of(BuildContext context) =>
(context.inheritFromWidgetOfExactType(Provider) as Provider);
}
И вот что появляется в моем приложении:
This is how my Cloudfirestore looks like
введите описание изображения здесь и это Правила:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.time < timestamp.date(2020, 9, 4);
}
}
}