Экспорт данных в файл CSV в Symfony

Для обычной навигации, инициированной пользователем, вам вообще не нужен шаблон BLoC. Просто используйте Navigator.

Вход - это особый случай. Следуя шаблону BLoC, было бы целесообразно предоставить поток isAuthenticated:

abstract class MyBloc {
  Stream get isAuthenticated;
}

В вашем приложении, вероятно, будут два разных имени маршрута: один для зарегистрированных пользователей и один для анонимных пользователей:

final Map anonymousRoutes = {
  '/': (context) => new LoginScreen(), // default for anon
  '/register': (context) => new RegisterScreen(),
};

final Map authenticatedRoutes = {
  '/': (context) => new HomeScreen(), // default for logged in
  '/savings': (context) => new SavingsScreen(),
  // ...
};

Обычно Navigator и его именованные маршруты тесно связаны с MaterialApp, но вы также можете определить свой собственный, который перестраивается при обновлении потока isAuthenticated:

class MyApp extends StatelessWidget {
  const MyApp({Key key, this.bloc}) : super(key: key);

  final MyBloc bloc;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: (BuildContext context, Widget child) {
        return StreamBuilder(
          stream: bloc.isAuthenticated,
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            if (!snapshot.hasData) {
              return Text('loading...');
            }

            bool isAuthenticated = snapshot.data;
            return _buildNavigator(isAuthenticated);
          },
        );
      },
    );
  }
}

Navigator _buildNavigator(bool isAuthenticated) {
  // different route tree and different default route depending on auth state
  final routes = isAuthenticated ? authenticatedRoutes : anonymousRoutes;

  return Navigator(
    key: new ValueKey(isAuthenticated),
    onGenerateRoute: (RouteSettings settings) {
      final name = settings.name;
      return new MaterialPageRoute(
        builder: routes[name],
        settings: settings,
      );
    },
    onUnknownRoute: (RouteSettings settings) {
      throw Exception('unknown route');
    },
  );
}

К сожалению, сейчас (2018-07-14) в коде флаттера есть два противоречивых утверждения , которые вы должны удалить, чтобы сделать код выше работы (вы может просто отредактировать его с вашей IDE):

Линия 93 и 96 в packages\flutter\lib\src\widgets\app.dart

//assert(navigatorObservers != null),
//assert(onGenerateRoute != null || navigatorObservers == const []),

0
задан Mohammadreza Farahani 18 January 2019 в 19:14
поделиться

1 ответ

Если вы посмотрите страницу документа для писателя , вы увидите предупреждение вверху, в котором говорится

При вставке записей в документ CSV с помощью League \ Csv \ Writer, сначала вставьте все данные, которые нужно вставить, прежде чем начинать манипулировать CSV. Если вы манипулируете документом CSV перед вставкой, вы можете изменить положение курсора файла и стереть ваши данные.

Ваш код вызывает

$writer = Writer::createFromPath('/path/to/saved/file.csv', 'w+');              
$writer->insertOne([$row['mpn'], $row['qty'], $row['price'], $row['description']]);

На каждой итерации выполняется условие, которое, кажется, перезаписывает или отбрасывает вашу предыдущую вставку каждый раз. Вы должны объявить $writer один раз перед началом цикла, чтобы сохранить каждую вставку.

$writer = Writer::createFromPath('/path/to/saved/file.csv', 'w+');
foreach ($results as $row) { 
  // do stuff with $writer
}
0
ответ дан Arleigh Hix 18 January 2019 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: